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:
143
.paul/PROJECT.md
143
.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)*
|
||||
|
||||
|
||||
Reference in New Issue
Block a user