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
This commit is contained in:
2026-03-25 21:59:37 +01:00
parent f592203b60
commit 9cbe0a89f0
12 changed files with 623 additions and 3372 deletions

View File

@@ -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 399 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)*