• Link to Facebook
  • Link to LinkedIn
  • Link to Instagram
  • Link to Youtube
  • Link to Mail
GOODMAN GROUP - SZKOLENIA I DORADZTWO
  • HOME
  • SZKOLENIA OTWARTE
    • AKTUALNE SZKOLENIA OTWARTE
    • SZKOLENIA ZAKUPOWE
    • KONFERENCJA ZAKUPOWA
    • SZKOLENIA ZAMÓWIENIA, PRZETARGI PUBLICZNE
    • SZKOLENIA LOGISTYCZNE
    • SZKOLENIA HANDLOWE
    • SZKOLENIA ZARZĄDZANIE PROJEKTAMI
    • SZKOLENIA UMIEJĘTNOŚCI MANAGERSKIE
  • SZKOLENIA DEDYKOWANE
    • ANALIZA WIDEO – WARSZTATY NEGOCJACYJNE
    • AKADEMIA ZAKUPOWA
    • AKADEMIA CATEGORY MANAGEMENT
    • AKADEMIA PRODUCT MANAGERA
    • SZKOLENIA HYBRYDOWE
    • SZKOLENIA SPECJALISTYCZNE
    • KOMPETENCJE OSOBISTE
    • SZKOLENIA DOFINANSOWANE KFS
  • USŁUGI
    • ZARZĄDZANIE SCENARIUSZOWE
    • OPTYMALIZACJA ZAKUPÓW
    • AUDYT ZAKUPÓW I PROCESÓW ZAKUPOWYCH
    • ANALIZA WYDATKÓW – Spend Cube
    • PROJEKTOWANIE ZAKUPÓW
    • CATEGORY MANAGEMENT
    • ZARZĄDZANIE RYZYKIEM W ZAKUPACH
    • REALIZACJA PROCESÓW PRZETARGOWYCH
    • ZAKUPY CAPEX
    • AUDYTY DOSTAWCÓW
    • PRODUCT MANAGEMENT
    • REDUKCJA TRANSAKCYJNOŚCI
    • GREEN PROCUREMENT
    • LEAN IN PROCUREMENT / LEAN W ZAKUPACH
    • HR / REKRUTACJA
    • TESTY KOMPETENCYJNE DLA KUPCÓW
    • OBSZARY WSPARCIA
  • NARZĘDZIA
    • ZARZĄDZANIE KATEGORIĄ
    • SRM ZARZĄDZANIE RELACJAMI
    • FCOP- ZARZĄDZANIE ZAKUPAMI INWESTYCYJNYMI
    • TIME BOX MONITORING PRODUKCJI
    • ANALIZA BIZNESOWA
    • KALKULATORY
    • SKLEP
  • STUDIA PODYPLOMOWE
  • O NAS
    • NASZA MISJA
    • OPINIE I REFERENCJE
    • GALERIA
    • PUBLIKACJE
    • POLITYKA FIRMY
  • PUBLIKACJE
    • ZARZĄDZANIE ZAKUPAMI
    • PZP – PRAWO ZAMÓWIEŃ PUBLICZNCH
    • SŁOWNIK ZAKUPOWY
    • UMIEJĘTNOŚCI MANAGERSKIE
    • WSZYSTKIE ARTYKUŁY
    • KALKULATORY
  • SKLEP
  • KONTAKT
    • KONTAKT
  • Click to open the search input field Click to open the search input field Szukaj
  • Menu Menu
  • Shopping Cart Shopping Cart
    0Shopping Cart
Jesteś tutaj: Home1 / Kontrakt
szkolenia dla dzialu zakupow scm logistyka szkolenie

TRENER/DORADCA – SCM – LOGISTYKA

praca zakupy

MENEDŻER KATEGORII

Pages

  • GOODMAN POWER ANALYSIS
  • Harmonogram dnia 2026
  • Savings Analyzer analiza oszczednosci w zakupach
  • Smart Spend Cube
  • supplier financial risk classification SFRC ocena ekonomiczna dostawcy
  • Gemstone Matrix
  • Dojrzałość zakupowa
  • VERTEX Ocena integracji wstecz / w przód
  • GOOODMAN – Procurement Decision Radar
  • Mapowanie interesariuszy
  • Analiza Pięciu Sił Portera
  • ANALIZA SRM – GOODMAN GROUP
  • Kalkulator MOQ perspektywa popytowo finansowa
  • Kalkulator MOQ perspektywa logistyczna (opakowania, palety)
  • Kalkulator MOQ perspektywa technologiczno marżowa
  • Goodman Demand Planner
  • Testy opracowanie 2025
  • Foto GG
  • Analiza jakości slajdu
  • goodman procurement matrix
  • Wsparcie funduszy inwestycyjnych
  • analiza make or buy
  • Analiza VRIO – VRIN ekspert
  • ipip analityka
  • Analiza batny watny zopy negocjacyjnej w zakupach
  • Analiza percepcji dostawców
  • Test work values wartości pracy
  • Narzędzia wspierające analizę biznesową
  • Macierz OA online goodman group
  • IPIP-NEO-300 test profilu osobowości
  • Test predyspozycji przywódczych
  • Zintegrowany test dla kupców analityka logika arytmetyka
  • Testy kompetencyjne dla kupców
  • Test stylu negocjacyjnego goodman group
  • Analiza koszyka zakupowego – CrossMate
  • Analiza VRIO – VRIN
  • Generator analizy SWOT TOWS
  • Generator macierzy BCG
  • Generator analiza ABC
  • Generator macierzy Svenssona
  • Generator macierzy Kraljica
  • kalkulator koszt i plan produkcyjny
  • kalkulator kary za opóźnienie dostaw
  • kalkulator zarządzanie zakupami zakupy what if
  • kalkulator skonto dynamic discount
  • kalkulator planowanie zamówień
  • Kalkulatory goodman group
  • Kalkulator TCO oprogramowanie
  • Kalkulator CLV Customer Lifetime Value
  • Kalkulator płatności
  • Kalkulator porównawczy transz płatności
  • Kalkulator koszt zakupu maszyny
  • Kalkulator kosztów transportu
  • Kalkulator kosztów PO purchase order
  • Kalkulator ukrytych kosztów
  • Kalkulator koszty dostaw i magazynowania
  • Kalkulator rabatu retro rabat retrospektywny
  • Kalkulator jednostek masy
  • Kalkulator jednostek długości
  • Kalkulator zniżek i rabatów
  • Kalkulator marży i narzutu
  • Kalkulator VAT
  • Kalkulator kilometrówki
  • Prospecting
  • Prospecting i analiza ofert
  • SZKOLENIE – STRATEGIC SOURCING – BUDOWA STRATEGII
  • ANALIZA WIDEO – WARSZTATY NEGOCJACYJNE
  • Zarządzania scenariuszowe
  • Realizacja zakupów CAPEX
  • Wdrożenie Category Managementu
  • Redukcja transakcyjności
  • Wdrożenie standardów i narzędzi Product Management
  • Akademia Product Managera
  • Zarządzanie ryzykiem w zakupach
  • Analiza wydatków i tworzenie Spend Cube
  • Procurement and Procurement Process Audit
  • Audyt zakupów i procesów zakupowych
  • Audyty dostawców – kompleksowa ocena i weryfikacja
  • Realizacja procesów przetargowych
  • Polityka firmy GOODMAN GROUP Sp. z o.o.
  • Szkolenia z zakresu zamówień publicznych
  • Login Customizer
  • 30 UNIKÓW NEGOCJACYJNYCH
  • AKADEMIA ZAKUPOWA
  • ANKIETA
  • ANKIETA – AKADEMIA ZAKUPOWA – 06 – 2020
  • ANKIETA OCENY SZKOLENIA ONLINE
  • ANKIETA-SWIADOMOSCI-ZAKUPOWEJ
  • AUDYT OPERACYJNY
  • AUDYTOR DOSTAWCÓW W BRANŻY AUTOMOTIVE
  • AUDYTOR DOSTAWCÓW W BRANŻY FMCG
  • BERATUNGSBEREICHE
  • BUDOWANIE STRATEGII DLA KATEGORII W ZAKUPACH SZKOLENIE
  • Cart
  • CATEGORY MANAGEMENT DAY TO DAY – ONLINE COURSE
  • CATEGORY MANAGEMENT END TO END – ONLINE COURSE
  • CATEGORY MANAGEMENT IMPLEMENTATION – ONLINE COURSE
  • CATEGORY MANAGEMENT PRIME
  • CATEGORY MANAGEMENT PRIME – COURSES
  • CATEGORY MANAGEMENT PRIME – ONLINE COURSES
  • CATEGORY MANAGEMENT STRATEGY – ONLINE COURSE
  • CATEGORY MANAGEMENT ZARZĄDZANIE KATEGORIA PRIME
  • Checkout
  • Cookie Policy
  • Dane do certyfikatu
  • domena sejm.com.pl
  • domeny
  • Einkaufswagen
  • FCOP- ZARZĄDZANIE ZAKUPAMI INWESTYCYJNYMI
  • FORMULARZ – OPINIA O SZKOLENIU
  • FORMULARZ ZAMÓWIENIA NA USŁUGI DORADZTWA PERSONALNEGO
  • FORMULARZ ZAMÓWIENIA USŁUGI ON-LINE
  • FORMULARZ ZAPOTRZEBOWANIA NA USŁUGI SZKOLENIOWE
  • FORMULARZ ZGŁOSZENIA OFERTY PRACY
  • GALERIA
  • GREEN PROCUREMENT
  • JAK NEGOCJOWAĆ ŁAPÓWKI
  • KONTAKT
  • CONTACT
  • Konferencja zakupowa
  • Koszyk
  • KWALIFIKACJA I OCENA DOSTAWCÓW SZKOLENIE
  • LEAN IN PROCUREMENT / LEAN W ZAKUPACH
  • LISTA SZKOLEŃ LOGISTYCZNYCH
  • LISTA SZKOLEŃ ZAKUPOWYCH
  • LISTA SZKOLEŃ ZARZĄDZANIE PROJEKTAMI
  • Lokalizacja konferencji zakupowej 2022
  • Mein Account
  • METODY GENEROWANIA OSZCZĘDNOŚCI W ZAKUPACH SZKOLENIE
  • Moje konto
  • My Account
  • NARZĘDZIA
  • NASZ ZESPÓŁ
  • Nasza Misja
  • News
  • Newsletter
  • ABOUT US
  • O NAS
  • #21148 (bez tytułu)
  • OBSŁUGA CELNA W OBROCIE MIĘDZYNARODOWYM – SZKOLENIE
  • OPINIE I REFERENCJE
  • OPINIONS AND REFERENCES
  • Optymalizacja procesów biznesowych
  • OPTYMALIZACJA ZAKUPÓW
  • polityka prywatnosci, rodo
  • POWER ANALYSIS BY GOODMAN GROUP
  • PRACA
  • Privacy Settings Page
  • procurement open space technology warsztaty szkoleniowe dla kupcow
  • PROCUREMENT SUMMER GRILL PUSZCZYKOWO 2019
  • PROFIL TRENERA – GRZEGORZ OLECHNIEWICZ
  • Projektowanie i budowa działu zakupów
  • PRZYWÓDZTWO A MOŻE…
  • Przywództwo transformacyjne – Jack Welch
  • PRZYWÓDZTWO ZESPOŁOWE SZKOLENIE
  • PUBLICATIONS
  • PUBLIKACJE
  • Q1 22 SZKOLENIA – ZARZĄDZANIE ZAKUPAMI, NEGOCJACJE ZAKUPOWE
  • Q4 21 SZKOLENIA NEGOCJACJE ZAKUPOWE, ZARZĄDZANIE ZAKUPAMI
  • REKRUTACJA
  • RFP – SPC-15.04.22
  • RODZAJE PRZYWÓDZTWA
  • ROZMOWY ZALEGŁOŚCIOWE SZKOLENIE
  • Shop
  • Shop
  • Sklep
  • Słownik zakupowy
  • SPRZEDAŻ KONSULTACYJNA SPRZEDAŻ DORADCZA SZKOLENIE
  • SRM ZARZĄDZANIE RELACJAMI Z DOSTAWCĄ 4SRM
  • STRATEGIE ZAKUPOWE SZKOLENIE
  • STRONA GŁÓWNA
  • STRONA GŁÓWNA ENG
  • STUDIA PODYPLOMOWE
  • Supplier Relationship Management – 4SRM
  • SZKOLENIA AKADEMIA CATEGORY MANAGEMENT – PRIME™
  • SZKOLENIA DEDYKOWANE
  • Szkolenia dofinansowane z KFS
  • SZKOLENIA HANDLOWE
  • SZKOLENIA HYBRYDOWE
  • SZKOLENIA KOMPETENCJE MIĘKKIE
  • SZKOLENIA LOGISTYCZNE
  • SZKOLENIA OTWARTE
  • SZKOLENIA UMIEJĘTNOŚCI MANAGERSKIE
  • SZKOLENIA ZAKUPOWE
  • SZKOLENIA ZARZĄDZANIE PROJEKTAMI
  • Szkolenie – ABC Zakupów – od procesu po negocjacje
  • SZKOLENIE – STRATEGIC SOURCING
  • SZKOLENIE ZARZĄDZANIE KATEGORIAMI W ZAKUPACH – PRIME™
  • SZKOLENIE ZARZĄDZANIE KATEGORIAMI W ZAKUPACH – PRIME™ – WARSZAWA
  • SZKOLENIE ZARZĄDZANIE RELACJAMI W ZAKUPACH – 4Srm™
  • TEMATY SZKOLEŃ SPECJALISTYCZNYCH
  • TERMS AND CONDITIONS FOR TRAINING AND E-LEARNING COURSES
  • TIME BOX MONITORING PRODUKCJI NA ŻYWO
  • Über uns
  • USŁUGI
  • USŁUGI DORADCZE
  • WEBINAR C19 23.04.2020
  • ZAKUPY I NEGOCJACJE W BIZNESIE – SZKOLENIE
  • Zamówienie
  • ZARZĄDZANIE GRUPĄ / ZESPOŁEM
  • ZARZĄDZANIE PROJEKTAMI SZKOLENIE
  • ZARZĄDZANIE RYZYKIEM W ZAKUPACH
  • PLANOWANIE ZAKUPÓW
  • ZARZĄDZANIE ZAKUPAMI CAPEX – SZKOLENIE
  • ZARZĄDZANIE ZAKUPAMI W PROJEKTACH
  • ZAUFALI NAM

Categories

  • ABC ZAKUPÓW
  • ANALIZA ZAKUPÓW
  • BAZA WIEDZY
  • Bez kategorii
  • CATEGORY MANAGEMENT
  • DOJRZAŁOŚĆ ZAKUPÓW
  • Human resources
  • HUMAN RESOURCES
  • KOMUNIKACJA
  • KPI
  • KRI
  • Leadership
  • MARKETING
  • MIERNIKI EFEKTYWNOŚCI W ZAKUPACH
  • NEGOCJACJE ZAKUPOWE
  • PR
  • PRZYWÓDZTWO
  • Purchasing management
  • PZP
  • SPRZEDAŻ
  • Strategic management
  • STRTEGIE SOURCINGOWE
  • TECHNIKI NEGOCJACYJNE
  • UMIEJĘTNOŚCI MANAGERSKIE
  • ZAMÓWIENIA PUBLICZNE
  • ZARZĄDZANIE KATEGORIĄ
  • ZARZĄDZANIE RYZYKIEM
  • ZARZĄDZANIE STRATEGICZNE
  • ZARZĄDZANIE ZAKUPAMI
  • ZARZĄDZANIE ZESPOŁEM

Archive

  • październik 2025
  • sierpień 2025
  • czerwiec 2025
  • marzec 2025
  • luty 2025
  • styczeń 2025
  • grudzień 2024
  • listopad 2024
  • październik 2024
  • wrzesień 2024
  • sierpień 2024
  • czerwiec 2024
  • maj 2024
  • grudzień 2023
  • październik 2023
  • wrzesień 2023
  • czerwiec 2023
  • maj 2023
  • październik 2022
  • wrzesień 2022
  • styczeń 2022
  • luty 2021
  • styczeń 2021
  • grudzień 2020
  • październik 2020
  • sierpień 2020
  • lipiec 2020
  • czerwiec 2020
  • maj 2020
  • kwiecień 2020
  • marzec 2020
  • grudzień 2019
  • październik 2019
  • wrzesień 2019
  • sierpień 2019
  • lipiec 2019
  • kwiecień 2019
  • styczeń 2019
  • listopad 2018
  • sierpień 2018
  • czerwiec 2018

szkolenia doradztwo zakupowe

Kontakt:

GOODMAN GROUP Sp. z o. o.
www.goodman.eu
biuro@goodman.eu

Adres:

Aleja Jana Pawła II nr 27
00-867 Warszawa

 

DANE FIRMY:

KRS: 0000690027
REGON: 368030467
NIP: 5272816824

© Copyright - GOODMAN GROUP Sp. z o. o.
  • Link to Facebook
  • Link to LinkedIn
  • Link to Instagram
  • Link to Youtube
  • Link to Mail
Scroll to top Scroll to top Scroll to top
szkolenia zakupowe szkolenia dla kupców abc

Na tej stronie korzystamy z narzędzi własnych lub zewnętrznych, które przechowują małe pliki (cookie) na Twoim urządzeniu.
Masz prawo zdecydować, czy włączyć statystyczne i profilujące pliki cookie.
Włączając je pomagasz nam oferować lepsze usługi i udoskonalać nasz serwis.

`; } function openPopup(){ const w=1200,h=900; if(chartWin && !chartWin.closed){ chartWin.focus(); return true; } chartWin = window.open('', 'sdbGoodmanPowerChartV4', `width=${w},height=${h},resizable=yes,scrollbars=yes`); if(!chartWin) return false; chartWin.document.open(); chartWin.document.write(popupHTML()); chartWin.document.close(); return true; } function postToPopup(totals){ if(!chartWin || chartWin.closed) return; chartWin.postMessage({type:'SDBG_PA_UPDATE', totals}, '*'); } function init(root){ const selects = root.querySelectorAll('select[data-q]'); const svg = root.querySelector('svg[data-radar]'); const totalsBox = root.querySelector('[data-results-table]'); const debugBox = root.querySelector('[data-debug]'); const toggleDebugBtn = root.querySelector('[data-action="toggle-debug"]'); const hint = root.querySelector('[data-popup-hint]'); const key = storageKey(root); function save(){ const obj = {}; selects.forEach(sel => obj[sel.getAttribute('data-q')] = sel.value || ''); try{ localStorage.setItem(key, JSON.stringify(obj)); }catch(e){} } function load(){ try{ const raw = localStorage.getItem(key); if(!raw) return null; const obj = JSON.parse(raw); return (obj && typeof obj === 'object') ? obj : null; }catch(e){ return null; } } function applyLoaded(obj){ selects.forEach(sel=>{ const k = sel.getAttribute('data-q'); sel.value = (obj && obj[k]) ? obj[k] : ''; }); } function update(doSave){ const answers = getAnswers(root); const {matrix, totals} = computeMatrixAndTotals(answers); renderRadar(svg, totals, false); renderTotalsTable(totalsBox, totals); renderDebug(debugBox, answers, matrix, totals); postToPopup(totals); if (doSave) save(); } // restore applyLoaded(load()); selects.forEach(sel => sel.addEventListener('change', ()=> update(true))); const btnReset = root.querySelector('[data-action="reset"]'); btnReset.addEventListener('click', ()=>{ applyLoaded(null); try{ localStorage.removeItem(key); }catch(e){} update(false); }); const btnPopup = root.querySelector('[data-action="popup"]'); btnPopup.addEventListener('click', ()=>{ const ok = openPopup(); if(!ok){ if(hint) hint.textContent='Pop-up zablokowany (dodaj wyjątek w przeglądarce).'; return; } if(hint) hint.textContent=''; update(false); }); toggleDebugBtn.addEventListener('click', ()=>{ const hidden = debugBox.hasAttribute('hidden'); if(hidden) debugBox.removeAttribute('hidden'); else debugBox.setAttribute('hidden',''); }); update(false); } function boot(){ document.querySelectorAll('[data-sdb-pa]').forEach(init); } if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', boot); else boot(); })(); `; } /* ===================== Generate report ===================== */ function generateReportForHost(host){ let state = null; if(host){ const instanceId = host.getAttribute('data-instance'); if(instanceId) state = readState(instanceId); } if(!state){ state = readLatestState(); } if(!state){ alert('Nie znaleziono danych mapy interesariuszy w localStorage. Otwórz mapę interesariuszy i dodaj/zaimportuj dane.'); return; } const html = buildReportHTML(state); const w = window.open('', 'SDBG_Raport_Interesariuszy', 'width=1200,height=800'); if(!w){ alert('Przeglądarka zablokowała nowe okno. Zezwól na pop-upy dla tej strony, aby wygenerować PDF.'); return; } w.document.open(); w.document.write(html); w.document.close(); } /* ===================== Button injection ===================== */ function findButtonByText(container, needle){ const btns = Array.from(container.querySelectorAll('button, a')); const n = String(needle||'').toLowerCase(); return btns.find(b => (b.textContent || '').trim().toLowerCase().includes(n)) || null; } function ensureFloatingButton(){ if(document.querySelector('[data-sdbg-pdf="1"]')) { const fb = document.querySelector('[data-sdbg-pdf-float="1"]'); if(fb) fb.remove(); return; } if(document.querySelector('[data-sdbg-pdf-float="1"]')) return; const fb = document.createElement('button'); fb.type = 'button'; fb.className = 'sdbg-report-btn sdbg-report-float'; fb.textContent = 'Generuj raport PDF'; fb.setAttribute('data-sdbg-pdf-float','1'); fb.addEventListener('click', function(){ const host = document.querySelector('.goodman-stakeholders[data-instance]') || document.querySelector('.goodman-stakeholders') || null; generateReportForHost(host); }); document.body.appendChild(fb); } function tryInjectIntoWidget(){ const hosts = document.querySelectorAll('.goodman-stakeholders'); if(!hosts.length) return false; let any = false; hosts.forEach(host=>{ if(host.querySelector('[data-sdbg-pdf="1"]')){ any = true; return; } const btnRow = host.querySelector('.btn-row') || host.querySelector('.goodman-btn-row') || null; if(!btnRow) return; let exportBtn = btnRow.querySelector('[data-act="export"], [data-action="export"], .export, .btn-export') || host.querySelector('[data-act="export"], [data-action="export"]'); let resetBtn = btnRow.querySelector('[data-act="reset"], [data-action="reset"], .reset, .btn-reset') || host.querySelector('[data-act="reset"], [data-action="reset"]'); if(!exportBtn) exportBtn = findButtonByText(btnRow, 'eksport'); if(!resetBtn) resetBtn = findButtonByText(btnRow, 'reset'); const b = document.createElement('button'); b.type = 'button'; b.textContent = 'Generuj raport PDF'; b.setAttribute('data-sdbg-pdf','1'); b.className = (exportBtn && exportBtn.className) ? exportBtn.className : 'sdbg-report-btn'; if(!b.className || !b.className.trim()) b.className = 'sdbg-report-btn'; b.addEventListener('click', function(){ generateReportForHost(host); }); if(resetBtn){ btnRow.insertBefore(b, resetBtn); }else{ btnRow.appendChild(b); } any = true; }); return any; } function boot(){ setTimeout(ensureFloatingButton, 800); let tries = 0; const maxTries = 240; const timer = setInterval(function(){ tries++; const ok = tryInjectIntoWidget(); if(ok){ clearInterval(timer); ensureFloatingButton(); return; } if(tries >= maxTries){ clearInterval(timer); ensureFloatingButton(); } }, 250); const obs = new MutationObserver(function(){ tryInjectIntoWidget(); ensureFloatingButton(); }); obs.observe(document.body, {childList:true, subtree:true}); } if(document.readyState === 'loading'){ document.addEventListener('DOMContentLoaded', boot, {once:true}); }else{ boot(); } })(); `; } function openPopup(){ const w=1200,h=900; if(chartWin && !chartWin.closed){ chartWin.focus(); return true; } chartWin = window.open('', 'sdbGoodmanPowerChartV4', `width=${w},height=${h},resizable=yes,scrollbars=yes`); if(!chartWin) return false; chartWin.document.open(); chartWin.document.write(popupHTML()); chartWin.document.close(); return true; } function postToPopup(totals){ if(!chartWin || chartWin.closed) return; chartWin.postMessage({type:'SDBG_PA_UPDATE', totals}, '*'); } function init(root){ const selects = root.querySelectorAll('select[data-q]'); const svg = root.querySelector('svg[data-radar]'); const totalsBox = root.querySelector('[data-results-table]'); const debugBox = root.querySelector('[data-debug]'); const toggleDebugBtn = root.querySelector('[data-action="toggle-debug"]'); const hint = root.querySelector('[data-popup-hint]'); const key = storageKey(root); function save(){ const obj = {}; selects.forEach(sel => obj[sel.getAttribute('data-q')] = sel.value || ''); try{ localStorage.setItem(key, JSON.stringify(obj)); }catch(e){} } function load(){ try{ const raw = localStorage.getItem(key); if(!raw) return null; const obj = JSON.parse(raw); return (obj && typeof obj === 'object') ? obj : null; }catch(e){ return null; } } function applyLoaded(obj){ selects.forEach(sel=>{ const k = sel.getAttribute('data-q'); sel.value = (obj && obj[k]) ? obj[k] : ''; }); } function update(doSave){ const answers = getAnswers(root); const {matrix, totals} = computeMatrixAndTotals(answers); renderRadar(svg, totals, false); renderTotalsTable(totalsBox, totals); renderDebug(debugBox, answers, matrix, totals); postToPopup(totals); if (doSave) save(); } // restore applyLoaded(load()); selects.forEach(sel => sel.addEventListener('change', ()=> update(true))); const btnReset = root.querySelector('[data-action="reset"]'); btnReset.addEventListener('click', ()=>{ applyLoaded(null); try{ localStorage.removeItem(key); }catch(e){} update(false); }); const btnPopup = root.querySelector('[data-action="popup"]'); btnPopup.addEventListener('click', ()=>{ const ok = openPopup(); if(!ok){ if(hint) hint.textContent='Pop-up zablokowany (dodaj wyjątek w przeglądarce).'; return; } if(hint) hint.textContent=''; update(false); }); toggleDebugBtn.addEventListener('click', ()=>{ const hidden = debugBox.hasAttribute('hidden'); if(hidden) debugBox.removeAttribute('hidden'); else debugBox.setAttribute('hidden',''); }); update(false); } function boot(){ document.querySelectorAll('[data-sdb-pa]').forEach(init); } if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', boot); else boot(); })();