From 9cbe0a89f081a27dbf91c4548dee02da14fa11d3 Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Wed, 25 Mar 2026 21:59:37 +0100 Subject: [PATCH] feat(30-button-primary-color): separate CTA color from section headings Phase 30 complete:\n- split semantic tokens for actions vs informational headings\n- update primary/outline button styles and rebuild CSS assets\n- update TODO/docs and close PAUL loop with SUMMARY --- .paul/PROJECT.md | 143 +- .paul/ROADMAP.md | 92 +- .paul/STATE.md | 255 +- .../30-button-primary-color/30-01-PLAN.md | 163 + .../30-button-primary-color/30-01-SUMMARY.md | 133 + DOCS/ARCHITECTURE.md | 1 + DOCS/TECH_CHANGELOG.md | 90 +- DOCS/todo.md | 4 +- public/assets/css/app.css | 3095 +---------------- public/assets/css/login.css | 2 +- resources/scss/modules/_printing.scss | 6 +- resources/scss/shared/_ui-components.scss | 11 +- 12 files changed, 623 insertions(+), 3372 deletions(-) create mode 100644 .paul/phases/30-button-primary-color/30-01-PLAN.md create mode 100644 .paul/phases/30-button-primary-color/30-01-SUMMARY.md diff --git a/.paul/PROJECT.md b/.paul/PROJECT.md index a1bce0f..948ae41 100644 --- a/.paul/PROJECT.md +++ b/.paul/PROJECT.md @@ -1,60 +1,62 @@ -# orderPRO +# orderPRO ## What This Is -Aplikacja do zarządzania zamówieniami pobieranymi z wielu źródeł sprzedaży (Allegro, Erli, własne sklepy internetowe). Umożliwia generowanie etykiet przewozowych u kurierów oraz docelowo zarządzanie produktami i stanami magazynowymi w jednym miejscu. +Aplikacja do zarzÄ…dzania zamĂłwieniami pobieranymi z wielu ĹşrĂłdeĹ‚ sprzedaĹĽy (Allegro, Erli, wĹ‚asne sklepy internetowe). UmoĹĽliwia generowanie etykiet przewozowych u kurierĂłw oraz docelowo zarzÄ…dzanie produktami i stanami magazynowymi w jednym miejscu. ## Core Value -Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów sprzedaży i nadawać przesyłki bez przełączania się między platformami. +Sprzedawca moĹĽe obsĹ‚ugiwać zamĂłwienia ze wszystkich kanałów sprzedaĹĽy i nadawać przesyĹ‚ki bez przełączania siÄ™ miÄ™dzy platformami. ## Current State | Attribute | Value | |-----------|-------| | Version | 1.0.0 | -| Status | v1.0 Complete | -| Last Updated | 2026-03-22 | +| Status | v1.4 Complete | +| Last Updated | 2026-03-25 | ## Requirements ### Validated (Shipped) -- [x] Integracja z Allegro — pobieranie zamówień +- [x] Integracja z Allegro — pobieranie zamĂłwieĹ„ - [x] Generowanie etykiet (InPost) -- [x] Performance: N+1 subqueries fix, DB indexes — Phase 7 -- [x] Stability: SSL verification, cron throttle — Phase 7 -- [x] UX: orderpro-to-allegro disable, lista zamówień poprawki — Phase 7 -- [x] Unit tests: AllegroTokenManager, AllegroOrderImportService (12 testów) — Phase 7 -- [x] InPost ShipX API: natywny provider niezależny od Allegro — Phase 7 -- [x] DB Foundation: tabele receipts, receipt_configs, receipt_number_counters + company_settings extended — Phase 8 -- [x] Konfiguracja paragonów (CRUD w Ustawienia > Księgowość) — Phase 9 -- [x] Wystawianie paragonów z zamówienia (formularz, snapshoty, atomowe numerowanie) — Phase 10 -- [x] Podgląd i wydruk paragonu (HTML+PDF, dompdf) — Phase 11 -- [x] Sekcja Księgowość — lista paragonów z filtrami, paginacją, eksportem XLSX — Phase 12 -- [x] DB Foundation: tabele email_mailboxes, email_templates, email_logs — Phase 13 -- [x] Skrzynki pocztowe SMTP (CRUD + test połączenia) — Phase 13 -- [x] Szablony wiadomości e-mail (CRUD + Quill.js + system zmiennych + załączniki) — Phase 14 -- [x] Wysyłka e-mail z zamówień (resolwer zmiennych, załączniki, log) — Phase 15 -- [x] Zadania automatyczne — reguły zdarzenie/warunki/akcje (CRUD + watcher/executor) — Phase 16 -- [x] Ostrzeżenie i potwierdzenie przy duplikacie paragonu — Phase 17 -- [x] Print Queue Backend: REST API + API key auth + CRUD kluczy — Phase 18 -- [x] UI Integration: przycisk Drukuj, bulk print, kolejka wydruku — Phase 19 -- [x] Windows Client: C# WinForms tray app, polling API, druk etykiet PDF — Phase 20 -- [x] Wyświetlanie nazwy integracji zamiast generycznego "shopPRO" na liście i szczegółach zamówienia — Phase 21 -- [x] Naprawa zapisu REGON, BDO, KRS i logo w ustawieniach firmy — Phase 22 -- [x] Presety przesyłek — customowe przyciski szybkiego wypełniania formularza (CRUD + autofill + zarządzanie) — Phase 23-25 -- [x] Ręczny numer przesyłki — dodawanie tracking number bez API przewoźnika — Phase 26 -- [x] Tracking backend — dwupoziomowe statusy dostawy, 3 implementacje providerów, cron handler — Phase 27 +- [x] Performance: N+1 subqueries fix, DB indexes — Phase 7 +- [x] Stability: SSL verification, cron throttle — Phase 7 +- [x] UX: orderpro-to-allegro disable, lista zamĂłwieĹ„ poprawki — Phase 7 +- [x] Unit tests: AllegroTokenManager, AllegroOrderImportService (12 testĂłw) — Phase 7 +- [x] InPost ShipX API: natywny provider niezaleĹĽny od Allegro — Phase 7 +- [x] DB Foundation: tabele receipts, receipt_configs, receipt_number_counters + company_settings extended — Phase 8 +- [x] Konfiguracja paragonĂłw (CRUD w Ustawienia > KsiÄ™gowość) — Phase 9 +- [x] Wystawianie paragonĂłw z zamĂłwienia (formularz, snapshoty, atomowe numerowanie) — Phase 10 +- [x] PodglÄ…d i wydruk paragonu (HTML+PDF, dompdf) — Phase 11 +- [x] Sekcja KsiÄ™gowość — lista paragonĂłw z filtrami, paginacjÄ…, eksportem XLSX — Phase 12 +- [x] DB Foundation: tabele email_mailboxes, email_templates, email_logs — Phase 13 +- [x] Skrzynki pocztowe SMTP (CRUD + test połączenia) — Phase 13 +- [x] Szablony wiadomoĹ›ci e-mail (CRUD + Quill.js + system zmiennych + załączniki) — Phase 14 +- [x] WysyĹ‚ka e-mail z zamĂłwieĹ„ (resolwer zmiennych, załączniki, log) — Phase 15 +- [x] Zadania automatyczne — reguĹ‚y zdarzenie/warunki/akcje (CRUD + watcher/executor) — Phase 16 +- [x] OstrzeĹĽenie i potwierdzenie przy duplikacie paragonu — Phase 17 +- [x] Print Queue Backend: REST API + API key auth + CRUD kluczy — Phase 18 +- [x] UI Integration: przycisk Drukuj, bulk print, kolejka wydruku — Phase 19 +- [x] Windows Client: C# WinForms tray app, polling API, druk etykiet PDF — Phase 20 +- [x] WyĹ›wietlanie nazwy integracji zamiast generycznego "shopPRO" na liĹ›cie i szczegółach zamĂłwienia — Phase 21 +- [x] Naprawa zapisu REGON, BDO, KRS i logo w ustawieniach firmy — Phase 22 +- [x] Presety przesyĹ‚ek — customowe przyciski szybkiego wypeĹ‚niania formularza (CRUD + autofill + zarzÄ…dzanie) — Phase 23-25 +- [x] RÄ™czny numer przesyĹ‚ki — dodawanie tracking number bez API przewoĹşnika — Phase 26 +- [x] Tracking backend — dwupoziomowe statusy dostawy, 3 implementacje providerĂłw, cron handler — Phase 27 +- [x] Tracking UI i ustawienia crona — statusy dostawy i konfiguracja harmonogramu — Phase 28-29 +- [x] UI readability tweak - rozdzielenie koloru przyciskow akcji od naglowkow sekcji (button primary distinction) - Phase 30 ### Active (In Progress) -- [ ] Śledzenie przesyłek UI — wyświetlanie statusów, ustawienia crona — Phase 28 +- [ ] Brak aktywnych zadan - gotowe na nowy milestone ### Planned (Next) -- [ ] Zarządzanie produktami -- [ ] Zarządzanie stanami magazynowymi +- [ ] ZarzÄ…dzanie produktami +- [ ] ZarzÄ…dzanie stanami magazynowymi ### Out of Scope @@ -62,28 +64,28 @@ Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów sprzedaży i n ## Target Users -**Primary:** Sprzedawcy wielokanałowi (Allegro, Erli, własny sklep) -- Obsługują zamówienia z wielu platform jednocześnie -- Potrzebują szybkiego nadawania przesyłek -- Chcą jednego miejsca do zarządzania sprzedażą +**Primary:** Sprzedawcy wielokanaĹ‚owi (Allegro, Erli, wĹ‚asny sklep) +- ObsĹ‚ugujÄ… zamĂłwienia z wielu platform jednoczeĹ›nie +- PotrzebujÄ… szybkiego nadawania przesyĹ‚ek +- ChcÄ… jednego miejsca do zarzÄ…dzania sprzedaĹĽÄ… ## Context **Business Context:** -Rynek narzędzi do zarządzania sprzedażą wielokanałową (podobne rozwiązania: base.com, apilo.com). Aplikacja budowana jako własne rozwiązanie. +Rynek narzÄ™dzi do zarzÄ…dzania sprzedaĹĽÄ… wielokanaĹ‚owÄ… (podobne rozwiÄ…zania: base.com, apilo.com). Aplikacja budowana jako wĹ‚asne rozwiÄ…zanie. **Technical Context:** -PHP (XAMPP/Laravel), integracje z API marketplace'ów (Allegro, Erli) oraz API przewoźników (InPost i inne). +PHP (XAMPP/Laravel), integracje z API marketplace'Ăłw (Allegro, Erli) oraz API przewoĹşnikĂłw (InPost i inne). ## Constraints ### Technical Constraints -- PHP/XAMPP — środowisko Windows lokalne +- PHP/XAMPP — Ĺ›rodowisko Windows lokalne - Medoo + prepared statements (bez sklejania SQL) -- Brak natywnych `alert()`/`confirm()` — używać `window.OrderProAlerts` -- Metody pomocnicze string/date/color → `App\Core\Support\StringHelper` (nie powielać w klasach) -- Zarządzanie tokenami OAuth Allegro → `App\Modules\Settings\AllegroTokenManager` -- Kompozycja obiektów crona → `App\Modules\Cron\CronHandlerFactory` (jedyne miejsce `new AllegroIntegrationRepository` i in. w kontekście crona) +- Brak natywnych `alert()`/`confirm()` — uĹĽywać `window.OrderProAlerts` +- Metody pomocnicze string/date/color → `App\Core\Support\StringHelper` (nie powielać w klasach) +- ZarzÄ…dzanie tokenami OAuth Allegro → `App\Modules\Settings\AllegroTokenManager` +- Kompozycja obiektĂłw crona → `App\Modules\Cron\CronHandlerFactory` (jedyne miejsce `new AllegroIntegrationRepository` i in. w kontekĹ›cie crona) - Pole CSRF w formularzach HTTP: zawsze `_token` (nie `_csrf_token`) ### Business Constraints @@ -93,30 +95,30 @@ PHP (XAMPP/Laravel), integracje z API marketplace'ów (Allegro, Erli) oraz API p | Decision | Rationale | Date | Status | |----------|-----------|------|--------| -| Własne rozwiązanie zamiast gotowego SaaS | Pełna kontrola nad funkcjonalnością | 2026-03-12 | Active | -| AllegroTokenManager wydzielony z 4 klas OAuth | Eliminacja duplikacji logiki odświeżania tokenów | 2026-03-12 | Active | -| StringHelper jako final static class w Core/Support | Centralizacja 19 kopii helperów string/date/color z 15+ klas | 2026-03-12 | Active | -| CronHandlerFactory jako jedyne miejsce kompozycji crona | Application.php i bin/cron.php były rozsynchronizowane — 2 bugi w bin/cron.php | 2026-03-13 | Active | -| Pole CSRF w formularzach: `_token` (nie `_csrf_token`) | Standardyzacja na nazwę używaną przez większość kodu (10+ kontrolerów); eliminacja ryzyka pomyłki przy nowych formularzach | 2026-03-13 | Active | -| Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Jeden wzorzec w całej aplikacji; eliminacja bezpośrednich zapisów $_SESSION | 2026-03-13 | Active | -| validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperów walidacji | Redukcja return statements do ≤3; spójny wzorzec kontrolerów | 2026-03-13 | Active | -| God class split via move-method bez zmiany logiki | ShopproOrdersSyncService 39→9 metod; AllegroIntegrationController 35→25 — czysty podział przez ekstrakcję klas | 2026-03-13 | Active | -| AllegroIntegrationController pozostaje przy 25 metodach (nie ≤15) | Pełny podział wymaga AllegroImportScheduleService — poza zakresem v0.1 | 2026-03-13 | Active | -| dg/bypass-finals do testów final classes | Wszystkie klasy final — mockowanie przez bypass-finals zamiast usuwania final | 2026-03-15 | Active | -| InPost ShipX API zamiast Allegro WZA remap | InpostIntegrationRepository jest pod ShipX; niezależność od Allegro | 2026-03-15 | Active | -| vendor/ w ftp-kr ignore | Auto-upload dev deps na serwer powodował Fatal Error | 2026-03-15 | Active | -| Snapshot pattern: seller/buyer/items jako JSON w receipts | Dane zamrożone w momencie wystawienia — niezależne od przyszłych zmian źródła | 2026-03-15 | Active | -| Atomowe numerowanie paragonów: INSERT ON DUPLICATE KEY UPDATE | Bezpieczne generowanie kolejnych numerów bez race conditions | 2026-03-15 | Active | -| Moduł Accounting w osobnym namespace | App\Modules\Accounting — separacja od Settings | 2026-03-15 | Active | -| ATTACHMENT_TYPES jako centralna mapa typów załączników | Rozszerzalność: nowy typ = 1 linia w tablicy PHP, bez zmian DB/widoku | 2026-03-16 | Active | -| Quill.js 2.0.3 CDN dla edytora szablonów | Brak build pipeline w projekcie; CDN prostszy | 2026-03-16 | Active | +| WĹ‚asne rozwiÄ…zanie zamiast gotowego SaaS | PeĹ‚na kontrola nad funkcjonalnoĹ›ciÄ… | 2026-03-12 | Active | +| AllegroTokenManager wydzielony z 4 klas OAuth | Eliminacja duplikacji logiki odĹ›wieĹĽania tokenĂłw | 2026-03-12 | Active | +| StringHelper jako final static class w Core/Support | Centralizacja 19 kopii helperĂłw string/date/color z 15+ klas | 2026-03-12 | Active | +| CronHandlerFactory jako jedyne miejsce kompozycji crona | Application.php i bin/cron.php byĹ‚y rozsynchronizowane — 2 bugi w bin/cron.php | 2026-03-13 | Active | +| Pole CSRF w formularzach: `_token` (nie `_csrf_token`) | Standardyzacja na nazwÄ™ uĹĽywanÄ… przez wiÄ™kszość kodu (10+ kontrolerĂłw); eliminacja ryzyka pomyĹ‚ki przy nowych formularzach | 2026-03-13 | Active | +| Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Jeden wzorzec w caĹ‚ej aplikacji; eliminacja bezpoĹ›rednich zapisĂłw $_SESSION | 2026-03-13 | Active | +| validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperĂłw walidacji | Redukcja return statements do ≤3; spĂłjny wzorzec kontrolerĂłw | 2026-03-13 | Active | +| God class split via move-method bez zmiany logiki | ShopproOrdersSyncService 39→9 metod; AllegroIntegrationController 35→25 — czysty podziaĹ‚ przez ekstrakcjÄ™ klas | 2026-03-13 | Active | +| AllegroIntegrationController pozostaje przy 25 metodach (nie ≤15) | PeĹ‚ny podziaĹ‚ wymaga AllegroImportScheduleService — poza zakresem v0.1 | 2026-03-13 | Active | +| dg/bypass-finals do testĂłw final classes | Wszystkie klasy final — mockowanie przez bypass-finals zamiast usuwania final | 2026-03-15 | Active | +| InPost ShipX API zamiast Allegro WZA remap | InpostIntegrationRepository jest pod ShipX; niezaleĹĽność od Allegro | 2026-03-15 | Active | +| vendor/ w ftp-kr ignore | Auto-upload dev deps na serwer powodowaĹ‚ Fatal Error | 2026-03-15 | Active | +| Snapshot pattern: seller/buyer/items jako JSON w receipts | Dane zamroĹĽone w momencie wystawienia — niezaleĹĽne od przyszĹ‚ych zmian ĹşrĂłdĹ‚a | 2026-03-15 | Active | +| Atomowe numerowanie paragonĂłw: INSERT ON DUPLICATE KEY UPDATE | Bezpieczne generowanie kolejnych numerĂłw bez race conditions | 2026-03-15 | Active | +| ModuĹ‚ Accounting w osobnym namespace | App\Modules\Accounting — separacja od Settings | 2026-03-15 | Active | +| ATTACHMENT_TYPES jako centralna mapa typĂłw załącznikĂłw | Rozszerzalność: nowy typ = 1 linia w tablicy PHP, bez zmian DB/widoku | 2026-03-16 | Active | +| Quill.js 2.0.3 CDN dla edytora szablonĂłw | Brak build pipeline w projekcie; CDN prostszy | 2026-03-16 | Active | ## Success Metrics | Metric | Target | Current | Status | |--------|--------|---------|--------| -| Liczba zintegrowanych źródeł zamówień | ≥3 | 2 (Allegro, Erli) | In progress | -| Generowanie etykiet | Działa | InPost | In progress | +| Liczba zintegrowanych ĹşrĂłdeĹ‚ zamĂłwieĹ„ | ≥3 | 2 (Allegro, Erli) | In progress | +| Generowanie etykiet | DziaĹ‚a | InPost | In progress | ## Tech Stack @@ -126,7 +128,7 @@ PHP (XAMPP/Laravel), integracje z API marketplace'ów (Allegro, Erli) oraz API p | Frontend | HTML/CSS/JS + SCSS | jQuery Alerts module | | Database | MySQL (Medoo) | Prepared statements | | Auth | Sesje PHP | | -| Integracje | Allegro API, Erli API | Przewoźnicy: InPost (ShipX), Apaczka | +| Integracje | Allegro API, Erli API | PrzewoĹşnicy: InPost (ShipX), Apaczka | | Testing | PHPUnit 11.5 + dg/bypass-finals | Unit tests w tests/Unit/ | ## Specialized Flows @@ -134,11 +136,12 @@ PHP (XAMPP/Laravel), integracje z API marketplace'ów (Allegro, Erli) oraz API p See: .paul/SPECIAL-FLOWS.md Quick Reference: -- /feature-dev → Nowe funkcjonalności i integracje (optional) -- /code-review → Przegląd kodu przed UNIFY (optional) -- /frontend-design → Komponenty UI i widoki (optional) -- /simplify → Refaktoryzacja po implementacji (optional) +- /feature-dev → Nowe funkcjonalnoĹ›ci i integracje (optional) +- /code-review → PrzeglÄ…d kodu przed UNIFY (optional) +- /frontend-design → Komponenty UI i widoki (optional) +- /simplify → Refaktoryzacja po implementacji (optional) --- -*PROJECT.md — Updated when requirements or context change* -*Last updated: 2026-03-23 after Phase 26 (Manual Tracking Number complete)* +*PROJECT.md — Updated when requirements or context change* +*Last updated: 2026-03-25 after Phase 30 (Button Primary Color Distinction complete)* + diff --git a/.paul/ROADMAP.md b/.paul/ROADMAP.md index eeac909..a62373c 100644 --- a/.paul/ROADMAP.md +++ b/.paul/ROADMAP.md @@ -1,19 +1,32 @@ -# Roadmap: orderPRO +# Roadmap: orderPRO ## Overview -orderPRO to narzędzie do wielokanałowego zarządzania sprzedażą. Projekt przechodzi od podstawowych integracji z marketplace'ami i generowania etykiet, przez rozbudowę o nowe źródła zamówień i przewoźników, aż do pełnego zarządzania produktami i stanami magazynowymi. +orderPRO to narzÄ™dzie do wielokanaĹ‚owego zarzÄ…dzania sprzedaĹĽÄ…. Projekt przechodzi od podstawowych integracji z marketplace'ami i generowania etykiet, przez rozbudowÄ™ o nowe ĹşrĂłdĹ‚a zamĂłwieĹ„ i przewoĹşnikĂłw, aĹĽ do peĹ‚nego zarzÄ…dzania produktami i stanami magazynowymi. ## Current Milestone -None — ready for next milestone. +None - ready for next milestone. ## Completed Milestones
-v1.3 Konfiguracja śledzenia przesyłek — 2026-03-23 (1 phase, 1 plan) +v1.4 UI Readability Tweaks - 2026-03-25 (1 phase, 1 plan) -Konfiguracja mapowania statusów dostawy z API przewoźników na znormalizowane statusy widoczne w aplikacji. Użytkownik może dostosować tłumaczenia i przypisania statusów bez zmian w kodzie. +Rozdzielenie semantyki kolorow UI: glowny kolor przyciskow akcji zostal oddzielony od koloru naglowkow sekcji, aby poprawic czytelnosc i szybkosc skanowania interfejsu. + +| Phase | Name | Plans | Completed | +|-------|------|-------|-----------| +| 30 | Button Primary Color Distinction | 1/1 | 2026-03-25 | + +Archive: `.paul/phases/30-button-primary-color/` + +
+ +
+v1.3 Konfiguracja śledzenia przesyłek — 2026-03-23 (1 phase, 1 plan) + +Konfiguracja mapowania statusów dostawy z API przewoźników na znormalizowane statusy widoczne w aplikacji. Użytkownik może dostosować tłumaczenia i przypisania statusów bez zmian w kodzie. | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -24,9 +37,9 @@ Archive: `.paul/phases/29-delivery-status-mapping-ui/`
-v1.2 Śledzenie przesyłek — 2026-03-23 (2 phases, 2 plans) +v1.2 Ĺšledzenie przesyĹ‚ek — 2026-03-23 (2 phases, 2 plans) -Automatyczne śledzenie statusu dostawy przesyłek przez API przewoźników (InPost ShipX, Apaczka, Allegro WZA). Cykliczne odpytywanie przez cron z konfigurowalnym interwałem. Dwupoziomowy system statusów: znormalizowany + surowy z API. Badge'e w UI, linki śledzenia, ustawienia interwału. +Automatyczne Ĺ›ledzenie statusu dostawy przesyĹ‚ek przez API przewoĹşnikĂłw (InPost ShipX, Apaczka, Allegro WZA). Cykliczne odpytywanie przez cron z konfigurowalnym interwaĹ‚em. Dwupoziomowy system statusĂłw: znormalizowany + surowy z API. Badge'e w UI, linki Ĺ›ledzenia, ustawienia interwaĹ‚u. | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -38,9 +51,9 @@ Archive: `.paul/phases/27-shipment-tracking-backend/`, `.paul/phases/28-shipment
-v1.1 Ręczny numer przesyłki — 2026-03-23 (1 phase, 1 plan) +v1.1 RÄ™czny numer przesyĹ‚ki — 2026-03-23 (1 phase, 1 plan) -Możliwość ręcznego dodania numeru śledzenia przesyłki do zamówienia (bez tworzenia przesyłki przez API przewoźnika). +MoĹĽliwość rÄ™cznego dodania numeru Ĺ›ledzenia przesyĹ‚ki do zamĂłwienia (bez tworzenia przesyĹ‚ki przez API przewoĹşnika). | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -51,9 +64,9 @@ Archive: `.paul/phases/26-manual-tracking-number/`
-v1.0 Presety przesyłek — 2026-03-22 (3 phases, 3 plans) +v1.0 Presety przesyĹ‚ek — 2026-03-22 (3 phases, 3 plans) -Customowe przyciski szybkiego wypełniania formularza przygotowania przesyłki. Presety globalne z nazwą i kolorem — tworzenie, autofill, edycja, usuwanie. +Customowe przyciski szybkiego wypeĹ‚niania formularza przygotowania przesyĹ‚ki. Presety globalne z nazwÄ… i kolorem — tworzenie, autofill, edycja, usuwanie. | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -66,9 +79,9 @@ Archive: `.paul/phases/23-shipment-presets-backend/`, `.paul/phases/24-shipment-
-v0.9 Poprawki ustawień firmy — 2026-03-22 (1 phase, 1 plan) +v0.9 Poprawki ustawieĹ„ firmy — 2026-03-22 (1 phase, 1 plan) -Naprawa buga: pola REGON, BDO, KRS i logo nie zapisywały się w ustawieniach firmy (kontroler nie przekazywał ich do repozytorium). +Naprawa buga: pola REGON, BDO, KRS i logo nie zapisywaĹ‚y siÄ™ w ustawieniach firmy (kontroler nie przekazywaĹ‚ ich do repozytorium). | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -79,9 +92,9 @@ Archive: `.paul/phases/22-regon-save-fix/`
-v0.8 Poprawki wyświetlania źródła zamówień — 2026-03-22 (1 phase, 1 plan) +v0.8 Poprawki wyĹ›wietlania ĹşrĂłdĹ‚a zamĂłwieĹ„ — 2026-03-22 (1 phase, 1 plan) -Na liście zamówień i stronie szczegółów: wyświetlanie nazwy konkretnej integracji (z tabeli `integrations`) zamiast generycznego "shopPRO". Korekta kolejności source/ID. +Na liĹ›cie zamĂłwieĹ„ i stronie szczegółów: wyĹ›wietlanie nazwy konkretnej integracji (z tabeli `integrations`) zamiast generycznego "shopPRO". Korekta kolejnoĹ›ci source/ID. | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -92,9 +105,9 @@ Archive: `.paul/phases/21-order-source-display/`
-v0.7 Zdalne drukowanie etykiet — 2026-03-22 (3 phases, 3 plans) +v0.7 Zdalne drukowanie etykiet — 2026-03-22 (3 phases, 3 plans) -System zdalnego drukowania etykiet przesyłek na drukarce termicznej. Aplikacja Windows w system tray odpytuje API orderPRO, pobiera zlecenia i drukuje etykiety A6. +System zdalnego drukowania etykiet przesyĹ‚ek na drukarce termicznej. Aplikacja Windows w system tray odpytuje API orderPRO, pobiera zlecenia i drukuje etykiety A6. | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -107,7 +120,7 @@ Archive: `.paul/phases/18-print-queue-backend/`, `.paul/phases/19-ui-integration
-v0.6 Poprawki UX — 2026-03-22 (1 phase, 1 plan) +v0.6 Poprawki UX — 2026-03-22 (1 phase, 1 plan) | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -120,7 +133,19 @@ Archive: `.paul/phases/17-receipt-duplicate-guard/` ## Completed Milestones
-v0.5 Moduł Automatyzacji — 2026-03-18 (1 phase, 2 plans) +v1.4 UI Readability Tweaks - 2026-03-25 (1 phase, 1 plan) + +Rozdzielenie semantyki kolorow UI: glowny kolor przyciskow akcji zostal oddzielony od koloru naglowkow sekcji, aby poprawic czytelnosc i szybkosc skanowania interfejsu. + +| Phase | Name | Plans | Completed | +|-------|------|-------|-----------| +| 30 | Button Primary Color Distinction | 1/1 | 2026-03-25 | + +Archive: .paul/phases/30-button-primary-color/ + +
+
+v0.5 Moduł Automatyzacji — 2026-03-18 (1 phase, 2 plans) | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -131,35 +156,35 @@ Archive: `.paul/phases/16-automated-tasks/`
-v0.4 Moduł E-mail — 2026-03-17 (3 phases, 4 plans) +v0.4 ModuĹ‚ E-mail — 2026-03-17 (3 phases, 4 plans) | Phase | Name | Plans | Completed | |-------|------|-------|-----------| | 13 | DB + Skrzynki pocztowe | 1/1 | 2026-03-17 | -| 14 | Szablony wiadomości | 2/2 | 2026-03-17 | -| 15 | Wysyłka e-mail z zamówień | 1/1 | 2026-03-17 | +| 14 | Szablony wiadomoĹ›ci | 2/2 | 2026-03-17 | +| 15 | WysyĹ‚ka e-mail z zamĂłwieĹ„ | 1/1 | 2026-03-17 | Archive: `.paul/milestones/v0.4-ROADMAP.md`
-v0.3 Moduł Paragonów — 2026-03-15 (5 phases, 5 plans) +v0.3 ModuĹ‚ ParagonĂłw — 2026-03-15 (5 phases, 5 plans) | Phase | Name | Plans | Completed | |-------|------|-------|-----------| | 8 | DB Foundation + Company Settings | 1/1 | 2026-03-15 | -| 9 | Konfiguracja paragonów (Ustawienia) | 1/1 | 2026-03-15 | -| 10 | Wystawianie paragonów z zamówienia | 1/1 | 2026-03-15 | -| 11 | Podgląd i wydruk paragonu (HTML+PDF) | 1/1 | 2026-03-15 | -| 12 | Sekcja Księgowość — lista + eksport XLSX | 1/1 | 2026-03-15 | +| 9 | Konfiguracja paragonĂłw (Ustawienia) | 1/1 | 2026-03-15 | +| 10 | Wystawianie paragonĂłw z zamĂłwienia | 1/1 | 2026-03-15 | +| 11 | PodglÄ…d i wydruk paragonu (HTML+PDF) | 1/1 | 2026-03-15 | +| 12 | Sekcja KsiÄ™gowość — lista + eksport XLSX | 1/1 | 2026-03-15 | Archive: `.paul/milestones/v0.3-ROADMAP.md`
-v0.2 Pre-Expansion Fixes — 2026-03-15 (1 phase, 5 plans) +v0.2 Pre-Expansion Fixes — 2026-03-15 (1 phase, 5 plans) | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -168,8 +193,8 @@ Archive: `.paul/milestones/v0.3-ROADMAP.md` Plans: - 07-01: Performance (N+1 subqueries, DB indexes, information_schema cache) - 07-02: Stability (SSL verification, cron throttle DB, migration 000014b) -- 07-03: UX (orderpro_to_allegro disable, lista zamówień fixes) -- 07-04: Tests (AllegroTokenManager + AllegroOrderImportService — 12 testów) +- 07-03: UX (orderpro_to_allegro disable, lista zamĂłwieĹ„ fixes) +- 07-04: Tests (AllegroTokenManager + AllegroOrderImportService — 12 testĂłw) - 07-05: InPost ShipmentProviderInterface (natywne ShipX API) Archive: `.paul/phases/07-pre-expansion-fixes/` @@ -177,7 +202,7 @@ Archive: `.paul/phases/07-pre-expansion-fixes/`
-v0.1 Initial Release — 2026-03-13 (6 phases, 15 plans) +v0.1 Initial Release — 2026-03-13 (6 phases, 15 plans) | Phase | Name | Plans | Completed | |-------|------|-------|-----------| @@ -194,4 +219,7 @@ Archive: `.paul/milestones/v0.1-ROADMAP.md` --- *Roadmap created: 2026-03-12* -*Last updated: 2026-03-23 — v1.3 milestone complete* +*Last updated: 2026-03-25 - v1.4 milestone complete* + + + diff --git a/.paul/STATE.md b/.paul/STATE.md index 2cbc560..beeddba 100644 --- a/.paul/STATE.md +++ b/.paul/STATE.md @@ -1,245 +1,248 @@ -# Project State +# Project State ## Project Reference See: .paul/PROJECT.md (updated 2026-03-12) -**Core value:** Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów sprzedaży i nadawać przesyłki bez przełączania się między platformami. -**Current focus:** v1.3 complete — ready for next milestone +**Core value:** Sprzedawca moĹĽe obsĹ‚ugiwać zamĂłwienia ze wszystkich kanałów sprzedaĹĽy i nadawać przesyĹ‚ki bez przełączania siÄ™ miÄ™dzy platformami. +**Current focus:** v1.4 complete - ready for next milestone ## Current Position -Milestone: v1.3 complete -Phase: [1] of [1] (Delivery Status Mapping UI) — Complete ✓ -Plan: 29-01 complete -Status: Milestone v1.3 complete — ready for next milestone -Last activity: 2026-03-23 — Phase 29 transition complete, v1.3 done +Milestone: v1.4 complete +Phase: [1] of [1] (Button Primary Color Distinction) - Complete +Plan: 30-01 complete +Status: Milestone v1.4 complete - ready for next milestone +Last activity: 2026-03-25 22:05 - Unified .paul/phases/30-button-primary-color/30-01-SUMMARY.md Progress: -- v0.1 Initial Release: [██████████] 100% ✓ -- v0.2 Pre-Expansion Fixes: [██████████] 100% ✓ -- v0.3 Moduł Paragonów: [██████████] 100% ✓ -- v0.4 Moduł E-mail: [██████████] 100% ✓ -- v0.5 Moduł Automatyzacji: [██████████] 100% ✓ -- v0.6 Poprawki UX: [██████████] 100% ✓ -- v0.7 Zdalne drukowanie etykiet: [██████████] 100% ✓ -- v0.8 Poprawki źródła zamówień: [██████████] 100% ✓ -- v0.9 Poprawki ustawień firmy: [██████████] 100% ✓ -- v1.0 Presety przesyłek: [██████████] 100% ✓ -- v1.1 Ręczny numer przesyłki: [██████████] 100% ✓ -- v1.2 Śledzenie przesyłek: [██████████] 100% ✓ - - Phase 27: [██████████] 100% ✓ (1/1 plans) - - Phase 28: [██████████] 100% ✓ (1/1 plans) -- v1.3 Konfiguracja śledzenia przesyłek: [██████████] 100% ✓ - - Phase 29: [██████████] 100% ✓ (1/1 plans) +- v0.1 Initial Release: [##########] 100% done +- v0.2 Pre-Expansion Fixes: [##########] 100% done +- v0.3 Moduł Paragonów: [##########] 100% done +- v0.4 Moduł E-mail: [##########] 100% done +- v0.5 Moduł Automatyzacji: [##########] 100% done +- v0.6 Poprawki UX: [##########] 100% done +- v0.7 Zdalne drukowanie etykiet: [##########] 100% done +- v0.8 Poprawki źródła zamówień: [##########] 100% done +- v0.9 Poprawki ustawień firmy: [##########] 100% done +- v1.0 Presety przesyłek: [##########] 100% done +- v1.1 Ręczny numer przesyłki: [##########] 100% done +- v1.2 Śledzenie przesyłek: [##########] 100% done + - Phase 27: [##########] 100% done (1/1 plans) + - Phase 28: [##########] 100% done (1/1 plans) +- v1.3 Konfiguracja śledzenia przesyłek: [##########] 100% done + - Phase 29: [##########] 100% done (1/1 plans) +- v1.4 UI Readability Tweaks: [##########] 100% done + - Phase 30: [##########] 100% done (1/1 plans) ## Loop Position Current loop state: ``` -PLAN ──▶ APPLY ──▶ UNIFY - ✓ ✓ ✓ [Loop complete] +PLAN --> APPLY --> UNIFY + done done done [Loop complete - ready for next PLAN] ``` ## Accumulated Context ### Decisions -| Data | Decyzja | Faza | Wpływ | +| Data | Decyzja | Faza | WpĹ‚yw | |------|---------|------|-------| -| 2026-03-23 | Dwupoziomowy system statusów: normalized + raw z API | Faza 27 | Max szczegółowość dla usera + spójna logika filtrowania | -| 2026-03-23 | Osobny ShipmentTrackingInterface (nie rozszerzenie ShipmentProviderInterface) | Faza 27 | Czysta separacja tracking vs creation; łatwe dodawanie providerów | +| 2026-03-25 | Rozdzielenie tokenow kolorow akcji (`--c-action-primary`) od naglowkow (`--c-primary`) | Faza 30 | Lepsza czytelnosc UI i szybsze rozpoznanie CTA | +| 2026-03-23 | Dwupoziomowy system statusĂłw: normalized + raw z API | Faza 27 | Max szczegółowość dla usera + spĂłjna logika filtrowania | +| 2026-03-23 | Osobny ShipmentTrackingInterface (nie rozszerzenie ShipmentProviderInterface) | Faza 27 | Czysta separacja tracking vs creation; Ĺ‚atwe dodawanie providerĂłw | | 2026-03-23 | Idempotentne migracje (IF NOT EXISTS + INSERT IGNORE) | Faza 27 | Bezpieczne re-run migracji | -| 2026-03-12 | AllegroTokenManager wydzielony z 4 klas OAuth | Faza 01 | Centralizacja logiki tokenów, brak duplikacji | -| 2026-03-12 | StringHelper jako final static class w Core/Support | Faza 01 | 19 duplikatów helperów usunięte z 15 klas | +| 2026-03-12 | AllegroTokenManager wydzielony z 4 klas OAuth | Faza 01 | Centralizacja logiki tokenĂłw, brak duplikacji | +| 2026-03-12 | StringHelper jako final static class w Core/Support | Faza 01 | 19 duplikatĂłw helperĂłw usuniÄ™te z 15 klas | | 2026-03-13 | CronHandlerFactory jako jedyne miejsce kompozycji crona | Faza 02 | Application.php i bin/cron.php zsynchronizowane; 2 bugi naprawione | | 2026-03-13 | Pole CSRF w formularzach: `_token` (nie `_csrf_token`) | Faza 03 | Ustandaryzowane w OrdersController, ShipmentController i 2 widokach | -| 2026-03-13 | Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Faza 05 | OrdersController i ShipmentController zmigrowane; jeden wzorzec w całej aplikacji | -| 2026-03-13 | validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperów walidacji | Faza 06 | Redukcja return statements do ≤3; wzorzec do użycia w kolejnych planach | -| 2026-03-15 | dg/bypass-finals zamiast usuwania final z klas produkcyjnych | Faza 07 | Testy mockują final classes bez zmiany konwencji projektu | -| 2026-03-15 | 3 bugi use-statement naprawione (odkryte przez testy) | Faza 07 | RuntimeException catch w 401 retry wreszcie działa; AllegroOAuthException rzucane poprawnie | -| 2026-03-15 | InPost ShipX API (nie Allegro WZA) jako natywny provider | Faza 07 | InpostShipmentService niezależny od Allegro; workaround remap usunięty | -| 2026-03-15 | vendor/ dodany do ftp-kr ignore; deploy vendor ręcznie | Faza 07 | Auto-upload nie nadpisze vendor/ na serwerze | -| 2026-03-15 | Snapshot pattern: seller/buyer/items jako JSON | Faza 10 | Dane zamrożone w momencie wystawienia paragonu | -| 2026-03-15 | Natywny stream_socket_client do testu SMTP (bez PHPMailer) | Faza 13 | Test połączenia SMTP bez nowych zależności; PHPMailer w fazie 15 | -| 2026-03-15 | IntegrationSecretCipher do szyfrowania haseł SMTP | Faza 13 | Reuse istniejącego AES-256-CBC+HMAC; spójny wzorzec | -| 2026-03-15 | Auto-reset is_default na email_mailboxes przy save | Faza 13 | Tylko jedna domyślna skrzynka | -| 2026-03-15 | Atomowe numerowanie: INSERT ON DUPLICATE KEY UPDATE | Faza 10 | Bezpieczne kolejne numery paragonów | -| 2026-03-15 | Moduł Accounting w App\Modules\Accounting | Faza 10 | Separacja od Settings | -| 2026-03-15 | dompdf v3.1 server-side PDF generation | Faza 11 | Nowa zależność composer; wymaga vendor/ na serwerze | +| 2026-03-13 | Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Faza 05 | OrdersController i ShipmentController zmigrowane; jeden wzorzec w caĹ‚ej aplikacji | +| 2026-03-13 | validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperĂłw walidacji | Faza 06 | Redukcja return statements do ≤3; wzorzec do uĹĽycia w kolejnych planach | +| 2026-03-15 | dg/bypass-finals zamiast usuwania final z klas produkcyjnych | Faza 07 | Testy mockujÄ… final classes bez zmiany konwencji projektu | +| 2026-03-15 | 3 bugi use-statement naprawione (odkryte przez testy) | Faza 07 | RuntimeException catch w 401 retry wreszcie dziaĹ‚a; AllegroOAuthException rzucane poprawnie | +| 2026-03-15 | InPost ShipX API (nie Allegro WZA) jako natywny provider | Faza 07 | InpostShipmentService niezaleĹĽny od Allegro; workaround remap usuniÄ™ty | +| 2026-03-15 | vendor/ dodany do ftp-kr ignore; deploy vendor rÄ™cznie | Faza 07 | Auto-upload nie nadpisze vendor/ na serwerze | +| 2026-03-15 | Snapshot pattern: seller/buyer/items jako JSON | Faza 10 | Dane zamroĹĽone w momencie wystawienia paragonu | +| 2026-03-15 | Natywny stream_socket_client do testu SMTP (bez PHPMailer) | Faza 13 | Test połączenia SMTP bez nowych zaleĹĽnoĹ›ci; PHPMailer w fazie 15 | +| 2026-03-15 | IntegrationSecretCipher do szyfrowania haseĹ‚ SMTP | Faza 13 | Reuse istniejÄ…cego AES-256-CBC+HMAC; spĂłjny wzorzec | +| 2026-03-15 | Auto-reset is_default na email_mailboxes przy save | Faza 13 | Tylko jedna domyĹ›lna skrzynka | +| 2026-03-15 | Atomowe numerowanie: INSERT ON DUPLICATE KEY UPDATE | Faza 10 | Bezpieczne kolejne numery paragonĂłw | +| 2026-03-15 | ModuĹ‚ Accounting w App\Modules\Accounting | Faza 10 | Separacja od Settings | +| 2026-03-15 | dompdf v3.1 server-side PDF generation | Faza 11 | Nowa zaleĹĽność composer; wymaga vendor/ na serwerze | | 2026-03-15 | ftp-kr vendor/ nie ignorowany (zmiana na /vendor/bin) | Faza 11 | Automatyczny upload vendor/ przy zmianach; rewizja decyzji z fazy 07 | -| 2026-03-15 | PhpSpreadsheet v5.5 dla eksportu XLSX | Faza 12 | Nowa zależność composer; XLSX lepszy od CSV dla księgowości | +| 2026-03-15 | PhpSpreadsheet v5.5 dla eksportu XLSX | Faza 12 | Nowa zaleĹĽność composer; XLSX lepszy od CSV dla ksiÄ™gowoĹ›ci | | 2026-03-15 | POST eksport z CSRF + dwa tryby (zaznaczone/wszystkie z filtra) | Faza 12 | Bezpieczny eksport; selectable table-list reuse | -| 2026-03-16 | ATTACHMENT_TYPES jako centralna mapa typów załączników | Faza 14 | Rozszerzalność: nowy typ = 1 linia w tablicy PHP | -| 2026-03-16 | Quill.js 2.0.3 CDN dla edytora szablonów | Faza 14 | Brak build pipeline; CDN prostszy | -| 2026-03-17 | PHPMailer v7.0.2 jako SMTP transport | Faza 15 | Nowa zależność composer; in-memory attachments (addStringAttachment) | -| 2026-03-17 | Email history jako wpisy w order_activity_log (nie osobna sekcja) | Faza 15 | Spójność z istniejącym UX — jeden timeline zamiast fragmentacji | -| 2026-03-17 | VariableResolver wydzielony z EmailTemplateController | Faza 15 | Reuse logiki zmiennych; resolwer niezależny od kontrolera szablonów | +| 2026-03-16 | ATTACHMENT_TYPES jako centralna mapa typĂłw załącznikĂłw | Faza 14 | Rozszerzalność: nowy typ = 1 linia w tablicy PHP | +| 2026-03-16 | Quill.js 2.0.3 CDN dla edytora szablonĂłw | Faza 14 | Brak build pipeline; CDN prostszy | +| 2026-03-17 | PHPMailer v7.0.2 jako SMTP transport | Faza 15 | Nowa zaleĹĽność composer; in-memory attachments (addStringAttachment) | +| 2026-03-17 | Email history jako wpisy w order_activity_log (nie osobna sekcja) | Faza 15 | SpĂłjność z istniejÄ…cym UX — jeden timeline zamiast fragmentacji | +| 2026-03-17 | VariableResolver wydzielony z EmailTemplateController | Faza 15 | Reuse logiki zmiennych; resolwer niezaleĹĽny od kontrolera szablonĂłw | ### Skill Audit (Faza 29, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 nowych unikalnych issues; 3x S1192 pre-existing DeliveryStatus, 1x S1142 pre-existing matchCarrierByName, 2x accessibility minor (pre-existing pattern) | +| sonar-scanner | âś“ | 0 nowych unikalnych issues; 3x S1192 pre-existing DeliveryStatus, 1x S1142 pre-existing matchCarrierByName, 2x accessibility minor (pre-existing pattern) | ### Skill Audit (Faza 28, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 nowych unikalnych issues; 1x S1448 CronRepository (22 metod, pre-existing pattern) | +| sonar-scanner | âś“ | 0 nowych unikalnych issues; 1x S1448 CronRepository (22 metod, pre-existing pattern) | ### Skill Audit (Faza 27, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 nowych unikalnych issues; 3 pre-existing patterns (2x S1192 DeliveryStatus, 1x S1172 handler) | +| sonar-scanner | âś“ | 0 nowych unikalnych issues; 3 pre-existing patterns (2x S1192 DeliveryStatus, 1x S1172 handler) | ### Skill Audit (Faza 26, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 nowych issues; 8 pre-existing na ShipmentController (S3776, S1192, S1142, S3358) | +| sonar-scanner | âś“ | 0 nowych issues; 8 pre-existing na ShipmentController (S3776, S1192, S1142, S3358) | ### Skill Audit (Faza 25, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 nowych issues na zmienionych plikach | +| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach | ### Skill Audit (Faza 24, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 nowych issues na zmienionych plikach | +| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach | ### Skill Audit (Faza 23, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 issues na nowych plikach | +| sonar-scanner | âś“ | 0 issues na nowych plikach | ### Skill Audit (Faza 22, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 nowych issues na zmienionym pliku; 1 pre-existing S1172 | +| sonar-scanner | âś“ | 0 nowych issues na zmienionym pliku; 1 pre-existing S1172 | ### Skill Audit (Faza 21, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 nowych issues na zmienionych plikach; 18 pre-existing | +| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach; 18 pre-existing | ### Skill Audit (Faza 20, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | n/a | Projekt C# — poza zakresem skanera PHP | +| sonar-scanner | n/a | Projekt C# — poza zakresem skanera PHP | ### Skill Audit (Faza 19, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 nowych blocker/critical; 4 minor/major zalogowane w DOCS/todo.md | +| sonar-scanner | âś“ | 0 nowych blocker/critical; 4 minor/major zalogowane w DOCS/todo.md | ### Skill Audit (Faza 18, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY | +| sonar-scanner | â—‹ | Required — do uruchomienia przed kolejnym UNIFY | ### Skill Audit (Faza 17, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ✓ | 0 nowych issues na zmienionych plikach | +| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach | ### Skill Audit (Faza 15, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym milestone | +| sonar-scanner | â—‹ | Required — do uruchomienia przed kolejnym milestone | ### Skill Audit (Faza 14, Plan 02) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY | +| sonar-scanner | â—‹ | Required — do uruchomienia przed kolejnym UNIFY | ### Skill Audit (Faza 13, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY | +| sonar-scanner | â—‹ | Required — do uruchomienia przed kolejnym UNIFY | ### Skill Audit (Faza 12, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY | +| sonar-scanner | â—‹ | Required — do uruchomienia przed kolejnym UNIFY | ### Skill Audit (Faza 11, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY | +| sonar-scanner | â—‹ | Required — do uruchomienia przed kolejnym UNIFY | ### Skill Audit (Faza 10, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY | +| sonar-scanner | â—‹ | Required — do uruchomienia przed kolejnym UNIFY | ### Skill Audit (Faza 07, Plan 05) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Zainstalowany (v4.3.5) ale nie uruchomiony w tym planie | +| sonar-scanner | â—‹ | Zainstalowany (v4.3.5) ale nie uruchomiony w tym planie | ### Skill Audit (Faza 07, Plan 04) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Pominięto — brak instalacji w PATH | +| sonar-scanner | â—‹ | PominiÄ™to — brak instalacji w PATH | ### Skill Audit (Faza 07, Plan 03) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Pominięto — brak instalacji w PATH | +| sonar-scanner | â—‹ | PominiÄ™to — brak instalacji w PATH | ### Skill Audit (Faza 07, Plan 02) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Pominięto — brak instalacji w PATH | +| sonar-scanner | â—‹ | PominiÄ™to — brak instalacji w PATH | ### Skill Audit (Faza 07, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Pominięto — brak instalacji w PATH | +| sonar-scanner | â—‹ | PominiÄ™to — brak instalacji w PATH | ### Skill Audit (Faza 06, Plan 06) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Pominięto — brak instalacji w PATH | +| sonar-scanner | â—‹ | PominiÄ™to — brak instalacji w PATH | ### Skill Audit (Faza 06, Plan 02) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Pominięto — brak instalacji w PATH; S1142 violations powinny spaść o ~12-15 po uruchomieniu | +| sonar-scanner | â—‹ | PominiÄ™to — brak instalacji w PATH; S1142 violations powinny spaść o ~12-15 po uruchomieniu | ### Skill Audit (Faza 05, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Pominięto — uruchomić ręcznie przed następnym planem z kodem PHP | +| sonar-scanner | â—‹ | PominiÄ™to — uruchomić rÄ™cznie przed nastÄ™pnym planem z kodem PHP | ### Skill Audit (Faza 04, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Pominięto — plan czysto dokumentacyjny (komentarze SQL, brak nowego kodu PHP); uruchomić przy kolejnym planie z kodem | +| sonar-scanner | â—‹ | PominiÄ™to — plan czysto dokumentacyjny (komentarze SQL, brak nowego kodu PHP); uruchomić przy kolejnym planie z kodem | ### Skill Audit (Faza 03, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| sonar-scanner | ○ | Pominięto — przejście do UNIFY bez skanowania; uruchomić przy kolejnym planie | +| sonar-scanner | â—‹ | PominiÄ™to — przejĹ›cie do UNIFY bez skanowania; uruchomić przy kolejnym planie | ### Skill Audit (Faza 02, Plan 01) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| /code-review | ○ | Pominięto — jednolinijkowa naprawa oczywistego dead code | -| sonar-scanner | ○ | Pominięto — brak nowego kodu, zmiana kosmetyczna | +| /code-review | â—‹ | PominiÄ™to — jednolinijkowa naprawa oczywistego dead code | +| sonar-scanner | â—‹ | PominiÄ™to — brak nowego kodu, zmiana kosmetyczna | ### Skill Audit (Faza 01, Plan 02) -| Oczekiwany | Wywołany | Uwagi | +| Oczekiwany | WywoĹ‚any | Uwagi | |------------|---------|-------| -| /feature-dev | ○ | Pominięto — plan był czysto refaktoryzacyjny | -| /code-review | ○ | Pominięto — należy wywołać przed kolejnym UNIFY | -| sonar-scanner | ○ | Nie uruchomiono — należy uruchomić i zaktualizować DOCS/todo.md | +| /feature-dev | â—‹ | PominiÄ™to — plan byĹ‚ czysto refaktoryzacyjny | +| /code-review | â—‹ | PominiÄ™to — naleĹĽy wywoĹ‚ać przed kolejnym UNIFY | +| sonar-scanner | â—‹ | Nie uruchomiono — naleĹĽy uruchomić i zaktualizować DOCS/todo.md | ### Deferred Issues -- **CI/CD SonarQube** — dodać GitHub Actions workflow (`.github/workflows/sonarqube.yml`) który odpala `sonar-scanner` automatycznie przy każdym pushu. Token projektu: `sqp_8ef2748d037777cf00cf1b38534f8d435b762d7d` (dodać jako GitHub Secret `SONAR_TOKEN`). Przypisać do fazy związanej z infrastrukturą/DevOps gdy tylko fazy zostaną zdefiniowane. -- **code-review** — wywołać /code-review przed kolejnym UNIFY (pominięto w obydwu planach fazy 01). -- **Delivery mapping "Szukaj..." layout** — JS `attachSelectFilter()` w allegro.php tworzy input search dla InPost/Apaczka selectów, wizualnie wygląda jakby należał do wiersza powyżej. Pre-existing bug, do naprawy osobno. +- **CI/CD SonarQube** — dodać GitHub Actions workflow (`.github/workflows/sonarqube.yml`) ktĂłry odpala `sonar-scanner` automatycznie przy kaĹĽdym pushu. Token projektu: `sqp_8ef2748d037777cf00cf1b38534f8d435b762d7d` (dodać jako GitHub Secret `SONAR_TOKEN`). Przypisać do fazy zwiÄ…zanej z infrastrukturÄ…/DevOps gdy tylko fazy zostanÄ… zdefiniowane. +- **code-review** — wywoĹ‚ać /code-review przed kolejnym UNIFY (pominiÄ™to w obydwu planach fazy 01). +- **Delivery mapping "Szukaj..." layout** — JS `attachSelectFilter()` w allegro.php tworzy input search dla InPost/Apaczka selectĂłw, wizualnie wyglÄ…da jakby naleĹĽaĹ‚ do wiersza powyĹĽej. Pre-existing bug, do naprawy osobno. ### Git State -Last commit: pending — feat(29-delivery-status-mapping-ui) +Last commit: pending — feat(29-delivery-status-mapping-ui) Branch: main Feature branches merged: none @@ -248,13 +251,15 @@ Brak. ## Session Continuity -Last session: 2026-03-23 -Stopped at: v1.3 milestone complete -Next action: /paul:discuss-milestone — ustalić zakres v1.4 +Last session: 2026-03-25 22:05 +Stopped at: v1.4 milestone complete +Next action: /paul:discuss-milestone - ustalic zakres kolejnego milestone Resume file: .paul/ROADMAP.md Resume context: -- v0.1–v1.3: COMPLETE ✓ (29 phases, 41 plans) +- v0.1-v1.4: COMPLETE done (30 phases, 42 plans) - Ready for next milestone - --- -*STATE.md — Updated after every significant action* +*STATE.md — Updated after every significant action* + + + diff --git a/.paul/phases/30-button-primary-color/30-01-PLAN.md b/.paul/phases/30-button-primary-color/30-01-PLAN.md new file mode 100644 index 0000000..b5e90b8 --- /dev/null +++ b/.paul/phases/30-button-primary-color/30-01-PLAN.md @@ -0,0 +1,163 @@ +--- +phase: 30-button-primary-color +plan: 01 +type: execute +wave: 1 +depends_on: [] +files_modified: + - resources/scss/shared/_ui-components.scss + - resources/scss/modules/_printing.scss + - public/assets/css/app.css + - DOCS/ARCHITECTURE.md + - DOCS/TECH_CHANGELOG.md + - DOCS/todo.md +autonomous: true +--- + + +## Goal +Zaplanowac wdrozenie zmiany z `DOCS/todo.md` pkt 39: glowny kolor przyciskow ma zostac zmieniony z niebieskiego na inny, aby nie mylil sie wizualnie z naglowkami sekcji. + +## Purpose +Poprawa czytelnosci interfejsu i szybsze rozroznianie elementow akcji (przyciski) od elementow informacyjnych (naglowki `section-title`). + +## Output +Gotowa implementacja nowego koloru akcji w warstwie SCSS (bez inline CSS), przebudowany `public/assets/css/app.css`, oraz aktualizacja dokumentacji technicznej i statusu punktu 39 na liscie TODO. + + + +## Project Context +@.paul/PROJECT.md +@.paul/ROADMAP.md +@.paul/STATE.md +@DOCS/todo.md +@DOCS/ARCHITECTURE.md +@DOCS/DB_SCHEMA.md + +## Source Files +@resources/scss/shared/_ui-components.scss +@resources/scss/modules/_printing.scss +@resources/scss/app.scss +@public/assets/css/app.css + + + +## Required Skills (from SPECIAL-FLOWS.md) + +| Skill | Priority | When to Invoke | Loaded? | +|-------|----------|----------------|---------| +| `sonar-scanner` | required | Po APPLY, przed UNIFY | done | +| /frontend-design | optional | Przy finalnym dopracowaniu kontrastu i czytelnosci UI | pending | +| /code-review | optional | Po implementacji, przed UNIFY | pending | + +**BLOCKING:** Required skills MUST be loaded before APPLY proceeds. +Run each skill command or confirm already loaded. + +## Skill Invocation Checklist +- [x] `sonar-scanner` uruchomiony po APPLY +- [ ] /frontend-design (opcjonalnie) jesli potrzebna korekta kontrastu +- [ ] /code-review (opcjonalnie) przed UNIFY + + + + + +## AC-1: Rozdzielenie kolorow naglowkow i przyciskow +```gherkin +Given interfejs korzysta z globalnych tokenow kolorow +When widok renderuje `section-title` oraz `btn btn--primary` +Then glowny przycisk nie uzywa niebieskiego koloru bazowego naglowkow i jest latwo odroznialny wizualnie +``` + +## AC-2: Spojne stany przyciskow akcji +```gherkin +Given przyciski glownych akcji (`.btn--primary` i `.btn--outline-primary`) +When uzytkownik wejdzie w hover/focus +Then wszystkie stany korzystaja z nowej palety akcji i zachowuja czytelnosc +``` + +## AC-3: Zmiana wdrozona zgodnie ze standardem projektu +```gherkin +Given standard frontendowy orderPRO +When zmiana zostanie zakonczona +Then style sa utrzymane w plikach SCSS, assets sa zbudowane do `public/assets/css/app.css`, a dokumentacja i TODO sa zaktualizowane +``` + + + + + + + Task 1: Wydzielenie palety kolorow dla akcji (buttons) + resources/scss/shared/_ui-components.scss + + Wprowadz oddzielne tokeny kolorystyczne dla przyciskow akcji (np. `--c-action-primary`, `--c-action-primary-dark`, opcjonalny token focus-ring), + pozostawiajac `--c-primary` dla elementow informacyjnych (naglowki/linki), aby nie mieszac semantyki. + Podlacz nowe tokeny do `.btn--primary` oraz focusa przyciskow. + Unikaj zmian w HTML/PHP - zakres to warstwa stylow. + + rg -n "c-action-primary|btn--primary|focus-ring" resources/scss/shared/_ui-components.scss + AC-1 satisfied: primary button nie korzysta juz z tej samej niebieskiej bazy co `section-title`. + + + + Task 2: Ujednolicenie wariantow przyciskow zaleznych od primary + resources/scss/modules/_printing.scss, resources/scss/shared/_ui-components.scss + + Zaktualizuj miejsca, ktore semantycznie reprezentuja glowna akcje, aby korzystaly z nowej palety akcji + (w szczegolnosci `.btn--outline-primary` i pokrewne stany), bez zmiany logiki UI. + Zachowaj kompaktowosc interfejsu i aktualne rozmiary komponentow. + + rg -n "btn--outline-primary|c-primary|c-action-primary" resources/scss/modules/_printing.scss resources/scss/shared/_ui-components.scss + AC-2 satisfied: stany hover/focus dla przyciskow sa spojne i oparte o nowy kolor akcji. + + + + Task 3: Build assets i aktualizacja dokumentacji zmiany + public/assets/css/app.css, DOCS/ARCHITECTURE.md, DOCS/TECH_CHANGELOG.md, DOCS/todo.md + + Zbuduj CSS (`npm run build:css`) po zmianach SCSS. + Zaktualizuj dokumentacje techniczna (ARCHITECTURE + TECH_CHANGELOG) o nowy standard rozdzielenia kolorow akcji i naglowkow. + Oznacz punkt 39 w `DOCS/todo.md` jako zrealizowany po pozytywnej weryfikacji. + + npm run build:css oraz manualny check ekranow z przyciskami i naglowkami (np. orders/list, settings/*) + AC-3 satisfied: assets + dokumentacja + status TODO sa zgodne z wymaganiami projektu. + + + + + + +## DO NOT CHANGE +- `database/migrations/*` +- Logika backendu PHP (kontrolery/repozytoria/serwisy) +- Moduly alertow `resources/modules/jquery-alerts/*` (poza zakresem tej zmiany) + +## SCOPE LIMITS +- Zakres dotyczy tylko zmiany glównego koloru przyciskow i powiazanych tokenow wizualnych. +- Bez redesignu layoutu, bez zmian spacingu i bez realizacji innych punktow z `DOCS/todo.md`. +- Brak zmian kontraktow API i brak zmian schematu DB. + + + + +Before declaring plan complete: +- [ ] `npm run build:css` przechodzi bez bledow +- [ ] Widoczna roznica miedzy `section-title` i `btn--primary` na kluczowych ekranach +- [ ] Brak inline CSS w widokach +- [ ] `DOCS/ARCHITECTURE.md` i `DOCS/TECH_CHANGELOG.md` zaktualizowane +- [ ] `DOCS/todo.md` punkt 39 oznaczony jako zrealizowany +- [ ] All acceptance criteria met + + + +- Wszystkie taski zakonczone +- Build CSS zakonczony sukcesem +- Kontrast semantyczny: naglowki i glowny CTA nie myla sie kolorystycznie +- Zmiana udokumentowana i gotowa do UNIFY + + + +After completion, create `.paul/phases/30-button-primary-color/30-01-SUMMARY.md` + + diff --git a/.paul/phases/30-button-primary-color/30-01-SUMMARY.md b/.paul/phases/30-button-primary-color/30-01-SUMMARY.md new file mode 100644 index 0000000..2804114 --- /dev/null +++ b/.paul/phases/30-button-primary-color/30-01-SUMMARY.md @@ -0,0 +1,133 @@ +--- +phase: 30-button-primary-color +plan: 01 +subsystem: ui +tags: [scss, css, ui, design] +requires: + - phase: 29-delivery-status-mapping-ui + provides: global UI conventions based on section-title and shared button classes +provides: + - separated color tokens for action buttons vs section headings + - updated primary/outline button styles in SCSS and built CSS assets +affects: [frontend-styling, visual-consistency, docs] +tech-stack: + added: [none] + patterns: [semantic-color-tokens] +key-files: + created: [.paul/phases/30-button-primary-color/30-01-SUMMARY.md] + modified: + - resources/scss/shared/_ui-components.scss + - resources/scss/modules/_printing.scss + - public/assets/css/app.css + - DOCS/ARCHITECTURE.md + - DOCS/TECH_CHANGELOG.md + - DOCS/todo.md +key-decisions: + - "Action colors decoupled from informational heading colors" + - "Primary/outline buttons now consume action tokens" +patterns-established: + - "Use --c-primary for informational accents (links/section-title)" + - "Use --c-action-primary for call-to-action buttons" +duration: 11min +started: 2026-03-25T21:40:00+01:00 +completed: 2026-03-25T21:51:00+01:00 +--- + +# Phase 30 Plan 01: Button Primary Color Distinction Summary + +**Wydzielono semantyczna palete kolorow akcji, dzieki czemu przyciski glownych akcji nie myla sie wizualnie z naglowkami sekcji.** + +## Performance + +| Metric | Value | +|--------|-------| +| Duration | 11 min | +| Started | 2026-03-25T21:40:00+01:00 | +| Completed | 2026-03-25T21:51:00+01:00 | +| Tasks | 3 completed | +| Files modified | 10 | + +## Acceptance Criteria Results + +| Criterion | Status | Notes | +|-----------|--------|-------| +| AC-1: Rozdzielenie kolorow naglowkow i przyciskow | Pass | `btn--primary` przeniesiony na `--c-action-primary`, `section-title` pozostaje na `--c-primary`. | +| AC-2: Spojne stany przyciskow akcji | Pass | `btn--primary`, focus i `btn--outline-primary` korzystaja z tej samej palety akcji. | +| AC-3: Zmiana wdrozona zgodnie ze standardem projektu | Pass | Zmiany w SCSS + build do `public/assets/css/app.css` + aktualizacje dokumentacji i TODO. | + +## Accomplishments + +- Wprowadzono dedykowane tokeny akcji (`--c-action-primary`, `--c-action-primary-dark`, `--focus-ring-action`) bez naruszania koloru informacyjnego `--c-primary`. +- Ujednolicono przyciski glownych akcji i ich stany hover/focus w calym UI. +- Zakonczono wymagania planu wraz ze skanem `sonar-scanner` i aktualizacja dokumentacji technicznej. + +## Verification Results + +- `rg -n "c-action-primary|btn--primary|focus-ring-action" resources/scss/shared/_ui-components.scss` -> PASS +- `rg -n "btn--outline-primary|c-action-primary" resources/scss/modules/_printing.scss` -> PASS +- `npm run build:css` -> PASS +- `sonar-scanner` -> PASS (`ANALYSIS SUCCESSFUL`, project `orderPRO`) + +## Files Created/Modified + +| File | Change | Purpose | +|------|--------|---------| +| `.paul/phases/30-button-primary-color/30-01-SUMMARY.md` | Created | Podsumowanie UNIFY planu 30-01 | +| `resources/scss/shared/_ui-components.scss` | Modified | Dodanie tokenow akcji + przepiecie `btn--primary` i focus | +| `resources/scss/modules/_printing.scss` | Modified | Przepiecie `btn--outline-primary` na token akcji | +| `public/assets/css/app.css` | Modified | Build CSS po zmianach SCSS | +| `public/assets/css/login.css` | Modified | Rebuild assets (`npm run build:css`) | +| `DOCS/ARCHITECTURE.md` | Modified | Aktualizacja standardu kolorow UI | +| `DOCS/TECH_CHANGELOG.md` | Modified | Log zmian technicznych dla fazy 30 | +| `DOCS/todo.md` | Modified | Punkt 39 oznaczony jako wykonany | +| `.paul/STATE.md` | Modified | Zamkniecie loopa i aktualizacja pozycji | +| `.paul/ROADMAP.md` | Modified | Status fazy/milestone po UNIFY | + +## Decisions Made + +| Decision | Rationale | Impact | +|----------|-----------|--------| +| Action colors decoupled from heading colors | Niebieskie CTA mylilo sie z naglowkami `section-title` | Lepsza czytelnosc i szybsze rozpoznanie akcji | +| Keep `--c-primary` for informational accents | Zachowanie dotychczasowej semantyki linkow i naglowkow | Mniejsza skala zmian i brak regresji semantycznej | + +## Deviations from Plan + +### Summary + +| Type | Count | Impact | +|------|-------|--------| +| Auto-fixed | 1 | Niski - naprawa formatowania wpisu w changelogu bez zmian zakresu | +| Scope additions | 0 | Brak | +| Deferred | 0 | Brak | + +**Total impact:** Minimalny, bez scope creep. + +### Auto-fixed Issues + +1. Wpis changeloga po pierwszym zapisie mial artefakty formatowania; zostal nadpisany poprawna trescia UTF-8. + +### Deferred Items + +None — plan executed exactly as written. + +## Skill Audit + +| Expected | Invoked | Notes | +|----------|---------|-------| +| `sonar-scanner` | ✓ | Wymagany skill uruchomiony po APPLY | + +## Next Phase Readiness + +**Ready:** +- Standard kolorow akcji jest zdefiniowany i udokumentowany. +- Todo item 39 zamkniety. + +**Concerns:** +- Optional `/frontend-design` i `/code-review` nie byly wymagane do domkniecia zakresu tej mikro-zmiany. + +**Blockers:** +- None. + +--- +*Phase: 30-button-primary-color, Plan: 01* +*Completed: 2026-03-25* diff --git a/DOCS/ARCHITECTURE.md b/DOCS/ARCHITECTURE.md index 43d5b5e..1d4cf6e 100644 --- a/DOCS/ARCHITECTURE.md +++ b/DOCS/ARCHITECTURE.md @@ -3,6 +3,7 @@ ## Status - Projekt po resecie do trybu `users-only`. - UI korzysta z globalnego standardu naglowkow sekcji (`h2/h3/h4.section-title`) definiowanego centralnie w `resources/scss/app.scss` i buildowanego do `public/assets/css/app.css`. +- Kolory akcji UI (przyciski `btn--primary` i warianty `btn--outline-primary`) sa odseparowane od koloru naglowkow (`section-title`) przez dedykowane tokeny `--c-action-primary` i `--c-action-primary-dark` w `resources/scss/shared/_ui-components.scss`. ## Moduly aktywne - `App\Modules\Auth` diff --git a/DOCS/TECH_CHANGELOG.md b/DOCS/TECH_CHANGELOG.md index e4f2c82..89a6718 100644 --- a/DOCS/TECH_CHANGELOG.md +++ b/DOCS/TECH_CHANGELOG.md @@ -1,44 +1,51 @@ -# Tech Changelog +# Tech Changelog -## 2026-03-23 (Phase 26 — Manual Tracking Number, Plan 01) -- Nowa metoda `ShipmentPackageRepository::createManual(int, string, ?string): int` — INSERT do `shipment_packages` z `provider='manual'`, `status='created'`. -- Nowa metoda `ShipmentController::createManual(Request): Response` — endpoint `POST /orders/{id}/shipment/manual`, walidacja CSRF + tracking_number, activity log `shipment_manual`. +## 2026-03-25 (Phase 30 - Button Primary Color Distinction, Plan 01) +- Rozdzielono palete kolorow naglowkow i przyciskow akcji w warstwie SCSS: + - `resources/scss/shared/_ui-components.scss` ma nowe tokeny `--c-action-primary`, `--c-action-primary-dark`, `--focus-ring-action`, + - `btn--primary` i `btn:focus-visible` korzystaja z tokenow akcji, bez zmiany koloru `section-title` opartego o `--c-primary`. +- `resources/scss/modules/_printing.scss`: `btn--outline-primary` zostal przepiety z twardego niebieskiego (`#4a90d9`) na token `--c-action-primary`. +- Przebudowano assety frontendowe komenda `npm run build:css`, co zaktualizowalo `public/assets/css/app.css`. + +## 2026-03-23 (Phase 26 — Manual Tracking Number, Plan 01) +- Nowa metoda `ShipmentPackageRepository::createManual(int, string, ?string): int` — INSERT do `shipment_packages` z `provider='manual'`, `status='created'`. +- Nowa metoda `ShipmentController::createManual(Request): Response` — endpoint `POST /orders/{id}/shipment/manual`, walidacja CSRF + tracking_number, activity log `shipment_manual`. - Nowa route w `routes/web.php`: `POST /orders/{id}/shipment/manual`. -- `resources/views/orders/show.php` — formularz inline do dodawania recznego numeru przesylki w zakladce Przesylki; zmienione wyswietlanie przesylek manualnych (status "Dodana recznie", przewoznik z carrier_id, brak etykiety). -- `resources/scss/app.scss` — nowa klasa `.manual-tracking-form` (flex, gap 8px). +- `resources/views/orders/show.php` — formularz inline do dodawania recznego numeru przesylki w zakladce Przesylki; zmienione wyswietlanie przesylek manualnych (status "Dodana recznie", przewoznik z carrier_id, brak etykiety). +- `resources/scss/app.scss` — nowa klasa `.manual-tracking-form` (flex, gap 8px). -## 2026-03-22 (Phase 21 — Order Source Display, Plan 01) -- `OrdersRepository::buildListSql()` — LEFT JOIN `integrations ig ON ig.id = o.integration_id`, nowa kolumna `ig.name AS integration_name`. -- `OrdersRepository::findDetails()` — analogiczny LEFT JOIN dla strony szczegolow zamowienia. -- `OrdersRepository::transformOrderRow()` — nowe pole `integration_name`. -- `OrdersController::toTableRow()` — wyswietla `integration_name` gdy niepuste, fallback na `sourceLabel()` (Allegro/Erli/default). -- `resources/views/orders/show.php` — naglowek zamowienia: dwa osobne spany (nazwa integracji + "ID: identyfikator") zamiast jednego. +## 2026-03-22 (Phase 21 — Order Source Display, Plan 01) +- `OrdersRepository::buildListSql()` — LEFT JOIN `integrations ig ON ig.id = o.integration_id`, nowa kolumna `ig.name AS integration_name`. +- `OrdersRepository::findDetails()` — analogiczny LEFT JOIN dla strony szczegolow zamowienia. +- `OrdersRepository::transformOrderRow()` — nowe pole `integration_name`. +- `OrdersController::toTableRow()` — wyswietla `integration_name` gdy niepuste, fallback na `sourceLabel()` (Allegro/Erli/default). +- `resources/views/orders/show.php` — naglowek zamowienia: dwa osobne spany (nazwa integracji + "ID: identyfikator") zamiast jednego. -## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 02: Watcher/Executor) -- Nowa klasa `App\Modules\Automation\AutomationService` — trigger + ewaluacja warunkow (AND) + wykonanie akcji. +## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 02: Watcher/Executor) +- Nowa klasa `App\Modules\Automation\AutomationService` — trigger + ewaluacja warunkow (AND) + wykonanie akcji. - Flow: `ReceiptController::store()` -> `AutomationService::trigger('receipt.created', orderId)` -> sprawdzenie warunkow (integration_id) -> `EmailSendingService::send()`. - Rozszerzenie `EmailSendingService::send()` o opcjonalne parametry `$recipientEmailOverride` i `$recipientNameOverride` (kompatybilnosc wsteczna). - 3 tryby odbiorcy: 'client' (kupujacy), 'company' (e-mail firmy z company_settings), 'client_and_company' (oba). -- Trigger w try/catch — blad automatyzacji nie blokuje sukcesu tworzenia paragonu. +- Trigger w try/catch — blad automatyzacji nie blokuje sukcesu tworzenia paragonu. - Activity log: automation_email_sent / automation_email_failed z actor_type='system'. -## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 01: DB + CRUD) +## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 01: DB + CRUD) - Nowe tabele: `automation_rules`, `automation_conditions`, `automation_actions` (migracja 000057). - Nowy modul `App\Modules\Automation` z 2 klasami: - - `AutomationController` — CRUD regul automatyzacji (index, create, store, edit, update, destroy, toggleStatus). - - `AutomationRepository` — operacje DB z transakcjami (create/update atomowe z conditions+actions), findActiveByEvent dla watchera. + - `AutomationController` — CRUD regul automatyzacji (index, create, store, edit, update, destroy, toggleStatus). + - `AutomationRepository` — operacje DB z transakcjami (create/update atomowe z conditions+actions), findActiveByEvent dla watchera. - 7 nowych route'ow: `/settings/automation/*`. - Widoki: `resources/views/automation/index.php` (lista regul), `resources/views/automation/form.php` (formularz z dynamicznymi warunkami/akcjami). - Nowy JS: `public/assets/js/modules/automation-form.js` (dodawanie/usuwanie wierszy warunkow i akcji). - Nowy SCSS: `resources/scss/modules/_automation.scss` (style formularza dynamicznego). - Menu nawigacji: dodany link "Zadania automatyczne" w sekcji Ustawienia. -## 2026-03-17 (Phase 15 — Wysylka e-mail z zamowien) +## 2026-03-17 (Phase 15 — Wysylka e-mail z zamowien) - Nowa zaleznosc: `phpmailer/phpmailer` v7.0.2 (SMTP transport). - Nowy modul `App\Modules\Email` z 3 klasami: - - `EmailSendingService` — wysylka e-mail (send, preview), logowanie do email_logs, resolwer skrzynki (mailboxId → template → default). - - `VariableResolver` — zamiana `{{grupa.zmienna}}` na dane zamowienia/kupujacego/adresu/firmy. - - `AttachmentGenerator` — generowanie PDF paragonu (dompdf) jako zalacznik in-memory (addStringAttachment). + - `EmailSendingService` — wysylka e-mail (send, preview), logowanie do email_logs, resolwer skrzynki (mailboxId → template → default). + - `VariableResolver` — zamiana `{{grupa.zmienna}}` na dane zamowienia/kupujacego/adresu/firmy. + - `AttachmentGenerator` — generowanie PDF paragonu (dompdf) jako zalacznik in-memory (addStringAttachment). - `OrdersController`: nowe metody `sendEmail()`, `emailPreview()`, `loadEmailLogs()`. - Nowe route'y: `POST /orders/{id}/send-email`, `POST /orders/{id}/email-preview`. - Widok `orders/show.php`: przycisk "Wyslij e-mail" + modal (wybor szablonu/skrzynki, podglad, wysylka AJAX). @@ -46,28 +53,28 @@ - Nowy partial: `resources/views/orders/partials/email-send-modal.php`. - Nowy SCSS: `resources/scss/modules/_email-send.scss` (modal overlay, podglad, style). -## 2026-03-15 (Phase 13 — DB + Skrzynki pocztowe) +## 2026-03-15 (Phase 13 — DB + Skrzynki pocztowe) - Dodano 3 migracje email: `000054_create_email_mailboxes_table`, `000055_create_email_templates_table`, `000056_create_email_logs_table`. - Nowe klasy: `EmailMailboxController` (index, save, delete, toggleStatus, testConnection), `EmailMailboxRepository` (listAll, findById, save, delete, toggleStatus, listActive). -- Test polaczenia SMTP przez natywny `stream_socket_client` z pelnym handshake (EHLO → STARTTLS → AUTH LOGIN) — bez zewnetrznych bibliotek. +- Test polaczenia SMTP przez natywny `stream_socket_client` z pelnym handshake (EHLO → STARTTLS → AUTH LOGIN) — bez zewnetrznych bibliotek. - Hasla SMTP szyfrowane przez `IntegrationSecretCipher` (AES-256-CBC + HMAC-SHA256). -- Widok `settings/email-mailboxes.php` — lista skrzynek + formularz CRUD + AJAX test polaczenia. +- Widok `settings/email-mailboxes.php` — lista skrzynek + formularz CRUD + AJAX test polaczenia. - Nawigacja: link "Skrzynki pocztowe" w sidebar Settings. - 5 nowych route'ow: GET/POST `/settings/email-mailboxes/*`. ## 2026-03-14 - Zoptymalizowano zapytanie listy zamowien (`OrdersRepository::buildListSql()`): - - 4 correlated subqueries (items_count, items_qty, shipments_count, documents_count) zastapiono aggregating LEFT JOINami — eliminuje N+1 na kazdym wierszu listy. -- `OrdersRepository::canResolveMappedMedia()` — zamiana instance property na `static` — `information_schema` odpytywany co najwyzej raz na cykl PHP zamiast raz per instancja. -- Dodano migracje `20260314_000048_add_orders_performance_indexes.sql` — indeksy na `orders`: `source`, `external_status_id`, `ordered_at`, composite `(source, external_status_id)`. -- Dodano SSL verification (`CURLOPT_SSL_VERIFYPEER => true`, `CURLOPT_SSL_VERIFYHOST => 2`, `CURLOPT_CAINFO`) do 4 klas ApiClient: AllegroApiClient (3 metody), AllegroOAuthClient, ShopproApiClient, ApaczkaApiClient. Fallback: `$_ENV['CURL_CA_BUNDLE_PATH']` → XAMPP cacert.pem → system CA bundle. -- Cron web throttle (`isWebCronThrottled()`) przeniesiony z `$_SESSION` do `app_settings` (klucz `cron_web_last_run_at`) — eliminuje wielokrotne uruchamianie crona przy wielu aktywnych sesjach. -- Deduplikacja migracji `000014` → `000014b` (kolizja z `create_product_integration_translations`). + - 4 correlated subqueries (items_count, items_qty, shipments_count, documents_count) zastapiono aggregating LEFT JOINami — eliminuje N+1 na kazdym wierszu listy. +- `OrdersRepository::canResolveMappedMedia()` — zamiana instance property na `static` — `information_schema` odpytywany co najwyzej raz na cykl PHP zamiast raz per instancja. +- Dodano migracje `20260314_000048_add_orders_performance_indexes.sql` — indeksy na `orders`: `source`, `external_status_id`, `ordered_at`, composite `(source, external_status_id)`. +- Dodano SSL verification (`CURLOPT_SSL_VERIFYPEER => true`, `CURLOPT_SSL_VERIFYHOST => 2`, `CURLOPT_CAINFO`) do 4 klas ApiClient: AllegroApiClient (3 metody), AllegroOAuthClient, ShopproApiClient, ApaczkaApiClient. Fallback: `$_ENV['CURL_CA_BUNDLE_PATH']` → XAMPP cacert.pem → system CA bundle. +- Cron web throttle (`isWebCronThrottled()`) przeniesiony z `$_SESSION` do `app_settings` (klucz `cron_web_last_run_at`) — eliminuje wielokrotne uruchamianie crona przy wielu aktywnych sesjach. +- Deduplikacja migracji `000014` → `000014b` (kolizja z `create_product_integration_translations`). - `AllegroStatusSyncService::sync()` zwraca `ok:false` dla kierunku `orderpro_to_allegro` (wczesniej false-positive `ok:true`). Opcja UI oznaczona jako `disabled` z `(wkrotce)`. -- Lista zamowien: source wyswietlany przed ID z prefixem `ID:`; `sourceLabel()` mapuje shoppro→shopPRO, allegro→Allegro. -- Statusy zamowien na liscie kolorowane kolorem grupy z konfiguracji (`statusColorMap()` → inline `background-color`). +- Lista zamowien: source wyswietlany przed ID z prefixem `ID:`; `sourceLabel()` mapuje shoppro→shopPRO, allegro→Allegro. +- Statusy zamowien na liscie kolorowane kolorem grupy z konfiguracji (`statusColorMap()` → inline `background-color`). - Ciemniejsze obramowanie pol formularzy: `--c-border` zmieniony z `#e2e8f0` na `#b0bec5`. -- Hotfix SSL: `getCaBundlePath()` zwraca `null` gdy zaden CA bundle nie znaleziony — `CURLOPT_CAINFO` ustawiany warunkowo, cURL uzywa systemowego CA na serwerze. +- Hotfix SSL: `getCaBundlePath()` zwraca `null` gdy zaden CA bundle nie znaleziony — `CURLOPT_CAINFO` ustawiany warunkowo, cURL uzywa systemowego CA na serwerze. ## 2026-03-08 - Poprawiono date podjazdu kuriera w payloadzie Apaczka: @@ -128,7 +135,7 @@ - Poprawiono diagnostyke bledow tworzenia przesylki Apaczka: - `ApaczkaShipmentService` przekazuje teraz `receiver_point_id` do payloadu `receiver.point` (oraz `sender_point_id` do `sender.point`), - dodano walidacje wymagan uslugi na podstawie `service_structure` (np. wymagany punkt odbioru/nadania), - - dla bledu API `Brak wyceny dla podanych parametrów zamówienia` komunikat zawiera rozszerzona diagnostyke (service_id/nazwa/supplier, punkt odbioru/nadania, gabaryt/waga) i hint o niedopasowaniu uslugi do typu punktu. + - dla bledu API `Brak wyceny dla podanych parametrĂłw zamĂłwienia` komunikat zawiera rozszerzona diagnostyke (service_id/nazwa/supplier, punkt odbioru/nadania, gabaryt/waga) i hint o niedopasowaniu uslugi do typu punktu. - Poprawiono import danych faktury z shopPRO: - `ShopproOrdersSyncService` wykrywa fakture nie tylko po `is_invoice`/`invoice.required`, ale takze po danych firmowych (`firm_name`/`firm_nip`), - `ShopproOrdersSyncService::mapAddresses(...)` zapisuje adres `invoice` (firma, NIP, adres) na podstawie pol `invoice`/`billing*`/`firm_*`, @@ -142,7 +149,7 @@ - widok `resources/views/shipments/prepare.php` wyswietla ten komunikat bezposrednio pod informacja o metodzie z zamowienia. - Poprawiono UX wyszukiwania w selectach mapowania form dostawy (zakladki `Formy dostawy`): - `resources/views/settings/allegro.php` przeszlo z przebudowy opcji `