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)*
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
<details>
|
||||
<summary>v1.3 Konfiguracja śledzenia przesyłek — 2026-03-23 (1 phase, 1 plan)</summary>
|
||||
<summary>v1.4 UI Readability Tweaks - 2026-03-25 (1 phase, 1 plan)</summary>
|
||||
|
||||
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/`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v1.3 Konfiguracja śledzenia przesyłek — 2026-03-23 (1 phase, 1 plan)</summary>
|
||||
|
||||
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/`
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v1.2 Śledzenie przesyłek — 2026-03-23 (2 phases, 2 plans)</summary>
|
||||
<summary>v1.2 Śledzenie przesyłek — 2026-03-23 (2 phases, 2 plans)</summary>
|
||||
|
||||
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
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v1.1 Ręczny numer przesyłki — 2026-03-23 (1 phase, 1 plan)</summary>
|
||||
<summary>v1.1 Ręczny numer przesyłki — 2026-03-23 (1 phase, 1 plan)</summary>
|
||||
|
||||
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/`
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v1.0 Presety przesyłek — 2026-03-22 (3 phases, 3 plans)</summary>
|
||||
<summary>v1.0 Presety przesyłek — 2026-03-22 (3 phases, 3 plans)</summary>
|
||||
|
||||
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-
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v0.9 Poprawki ustawień firmy — 2026-03-22 (1 phase, 1 plan)</summary>
|
||||
<summary>v0.9 Poprawki ustawień firmy — 2026-03-22 (1 phase, 1 plan)</summary>
|
||||
|
||||
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/`
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v0.8 Poprawki wyświetlania źródła zamówień — 2026-03-22 (1 phase, 1 plan)</summary>
|
||||
<summary>v0.8 Poprawki wyświetlania źródła zamówień — 2026-03-22 (1 phase, 1 plan)</summary>
|
||||
|
||||
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/`
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v0.7 Zdalne drukowanie etykiet — 2026-03-22 (3 phases, 3 plans)</summary>
|
||||
<summary>v0.7 Zdalne drukowanie etykiet — 2026-03-22 (3 phases, 3 plans)</summary>
|
||||
|
||||
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
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v0.6 Poprawki UX — 2026-03-22 (1 phase, 1 plan)</summary>
|
||||
<summary>v0.6 Poprawki UX — 2026-03-22 (1 phase, 1 plan)</summary>
|
||||
|
||||
| Phase | Name | Plans | Completed |
|
||||
|-------|------|-------|-----------|
|
||||
@@ -120,7 +133,19 @@ Archive: `.paul/phases/17-receipt-duplicate-guard/`
|
||||
## Completed Milestones
|
||||
|
||||
<details>
|
||||
<summary>v0.5 Moduł Automatyzacji — 2026-03-18 (1 phase, 2 plans)</summary>
|
||||
<summary>v1.4 UI Readability Tweaks - 2026-03-25 (1 phase, 1 plan)</summary>
|
||||
|
||||
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/
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary>v0.5 Moduł Automatyzacji — 2026-03-18 (1 phase, 2 plans)</summary>
|
||||
|
||||
| Phase | Name | Plans | Completed |
|
||||
|-------|------|-------|-----------|
|
||||
@@ -131,35 +156,35 @@ Archive: `.paul/phases/16-automated-tasks/`
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v0.4 Moduł E-mail — 2026-03-17 (3 phases, 4 plans)</summary>
|
||||
<summary>v0.4 Moduł E-mail — 2026-03-17 (3 phases, 4 plans)</summary>
|
||||
|
||||
| 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`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v0.3 Moduł Paragonów — 2026-03-15 (5 phases, 5 plans)</summary>
|
||||
<summary>v0.3 Moduł Paragonów — 2026-03-15 (5 phases, 5 plans)</summary>
|
||||
|
||||
| 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`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v0.2 Pre-Expansion Fixes — 2026-03-15 (1 phase, 5 plans)</summary>
|
||||
<summary>v0.2 Pre-Expansion Fixes — 2026-03-15 (1 phase, 5 plans)</summary>
|
||||
|
||||
| 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/`
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v0.1 Initial Release — 2026-03-13 (6 phases, 15 plans)</summary>
|
||||
<summary>v0.1 Initial Release — 2026-03-13 (6 phases, 15 plans)</summary>
|
||||
|
||||
| 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*
|
||||
|
||||
|
||||
|
||||
|
||||
255
.paul/STATE.md
255
.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*
|
||||
|
||||
|
||||
|
||||
|
||||
163
.paul/phases/30-button-primary-color/30-01-PLAN.md
Normal file
163
.paul/phases/30-button-primary-color/30-01-PLAN.md
Normal file
@@ -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
|
||||
---
|
||||
|
||||
<objective>
|
||||
## 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.
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
## 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
|
||||
</context>
|
||||
|
||||
<skills>
|
||||
## 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
|
||||
|
||||
</skills>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## 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
|
||||
```
|
||||
|
||||
</acceptance_criteria>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Wydzielenie palety kolorow dla akcji (buttons)</name>
|
||||
<files>resources/scss/shared/_ui-components.scss</files>
|
||||
<action>
|
||||
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.
|
||||
</action>
|
||||
<verify>rg -n "c-action-primary|btn--primary|focus-ring" resources/scss/shared/_ui-components.scss</verify>
|
||||
<done>AC-1 satisfied: primary button nie korzysta juz z tej samej niebieskiej bazy co `section-title`.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Ujednolicenie wariantow przyciskow zaleznych od primary</name>
|
||||
<files>resources/scss/modules/_printing.scss, resources/scss/shared/_ui-components.scss</files>
|
||||
<action>
|
||||
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.
|
||||
</action>
|
||||
<verify>rg -n "btn--outline-primary|c-primary|c-action-primary" resources/scss/modules/_printing.scss resources/scss/shared/_ui-components.scss</verify>
|
||||
<done>AC-2 satisfied: stany hover/focus dla przyciskow sa spojne i oparte o nowy kolor akcji.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 3: Build assets i aktualizacja dokumentacji zmiany</name>
|
||||
<files>public/assets/css/app.css, DOCS/ARCHITECTURE.md, DOCS/TECH_CHANGELOG.md, DOCS/todo.md</files>
|
||||
<action>
|
||||
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.
|
||||
</action>
|
||||
<verify>npm run build:css oraz manualny check ekranow z przyciskami i naglowkami (np. orders/list, settings/*)</verify>
|
||||
<done>AC-3 satisfied: assets + dokumentacja + status TODO sa zgodne z wymaganiami projektu.</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
|
||||
## 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.
|
||||
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
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
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- Wszystkie taski zakonczone
|
||||
- Build CSS zakonczony sukcesem
|
||||
- Kontrast semantyczny: naglowki i glowny CTA nie myla sie kolorystycznie
|
||||
- Zmiana udokumentowana i gotowa do UNIFY
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.paul/phases/30-button-primary-color/30-01-SUMMARY.md`
|
||||
</output>
|
||||
|
||||
133
.paul/phases/30-button-primary-color/30-01-SUMMARY.md
Normal file
133
.paul/phases/30-button-primary-color/30-01-SUMMARY.md
Normal file
@@ -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*
|
||||
@@ -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`
|
||||
|
||||
@@ -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 `<select>` na tryb bezpieczny (`focus first match` bez modyfikacji listy opcji),
|
||||
- eliminuje przypadki „znikajacych” opcji i problem z wyborem uslugi po zmianie przewoznika na `Apaczka`,
|
||||
- eliminuje przypadki „znikajacych” opcji i problem z wyborem uslugi po zmianie przewoznika na `Apaczka`,
|
||||
- ujednolicono zachowanie z `resources/views/settings/shoppro.php`.
|
||||
- Poprawiono inicjalizacje stanu mapowania przewoznika (`allegro.php`, `shoppro.php`):
|
||||
- dla niezamapowanych form domyslny przewoznik to teraz pusty wybor (zamiast `allegro`),
|
||||
@@ -188,7 +195,7 @@
|
||||
- `ShopproOrdersSyncService` mapuje `inpost_paczkomat`/`orlen_point` do adresu `delivery` (punkt, ulica, kod, miasto),
|
||||
- zapisuje `parcel_external_id` i `parcel_name` dla punktu odbioru,
|
||||
- `delivery` dziedziczy telefon i e-mail klienta, gdy API nie zwraca osobnych danych odbiorcy,
|
||||
- etykieta metody dostawy (`external_carrier_id`) zawiera koszt transportu (`transport_cost`), np. `Paczkomaty InPost - przedpłata: 13.5 zł`.
|
||||
- etykieta metody dostawy (`external_carrier_id`) zawiera koszt transportu (`transport_cost`), np. `Paczkomaty InPost - przedpłata: 13.5 zł`.
|
||||
- Fix importu shopPRO dla listy zamowien (`Kwoty` + miniatury):
|
||||
- `ShopproOrdersSyncService` mapuje kwoty zamowienia z `summary` i `paid` (fallback), ceny pozycji z `price_brutto`,
|
||||
- poprawiono laczenie payloadow `orders/list` i `orders/get|details` (zachowanie kluczowych pol z listy),
|
||||
@@ -238,7 +245,7 @@
|
||||
- Dodano migracje `20260308_000041_ensure_shoppro_status_sync_schedule_and_direction.sql`:
|
||||
- seed/naprawa harmonogramu `shoppro_order_status_sync` (domyslnie 900s, priorytet 100),
|
||||
- uzupelnienie kolumny `integrations.order_status_sync_direction` jesli brak.
|
||||
- Rozszerzono `ShopproOrdersSyncService` o opcje uruchomienia filtrowanego po `integration_id` i z pominięciem flagi `orders_fetch_enabled` (wykorzystane przez cron synchronizacji statusow).
|
||||
- Rozszerzono `ShopproOrdersSyncService` o opcje uruchomienia filtrowanego po `integration_id` i z pominięciem flagi `orders_fetch_enabled` (wykorzystane przez cron synchronizacji statusow).
|
||||
- Dodano cron importu zamowien z `shopPRO`:
|
||||
- nowy handler `App\Modules\Cron\ShopproOrdersImportHandler`,
|
||||
- nowy serwis `App\Modules\Settings\ShopproOrdersSyncService`,
|
||||
@@ -305,7 +312,7 @@
|
||||
dla srodowisk, gdzie tabela `integrations` zostala odtworzona pozniej niz pierwotne migracje shopPRO.
|
||||
- Poprawiono UX ekranu `shopPRO`:
|
||||
- przy istniejacych instancjach automatycznie wybierana jest pierwsza integracja (bez koniecznosci wracania do zakladki `Integracja`),
|
||||
- dodano przełącznik instancji nad zakladkami (`Wybrana integracja`) dostepny globalnie dla `Statusy/Ustawienia/Formy dostawy`.
|
||||
- dodano przełącznik instancji nad zakladkami (`Wybrana integracja`) dostepny globalnie dla `Statusy/Ustawienia/Formy dostawy`.
|
||||
|
||||
## 2026-03-06
|
||||
- Fix: synchronizacja statusow Allegro nie aktualizowala zamowien.
|
||||
@@ -508,7 +515,7 @@
|
||||
- zmniejszono paddingi/gapy i wysokosci kontrolek, aby zwiekszyc ilosc danych widocznych bez scrolla.
|
||||
- Wprowadzono globalna preferencje kompaktowego UI w `AGENTS.md`.
|
||||
- Poprawiono generowanie `code` dla statusow/grup: polskie znaki sa transliterowane do ASCII
|
||||
(np. `Nieopłacone` -> `nieoplacone`), zamiast zamiany na `_`.
|
||||
(np. `Nieopłacone` -> `nieoplacone`), zamiast zamiany na `_`.
|
||||
- Dodano skrypt serwisowy `bin/fix_status_codes.php`:
|
||||
- przelicza kody grup/statusow na podstawie aktualnych nazw z transliteracja PL->ASCII,
|
||||
- zapewnia unikalnosc kodow (`_2`, `_3` przy konfliktach),
|
||||
@@ -568,7 +575,7 @@
|
||||
- filtry (fraza, zrodlo, status, status platnosci, zakres dat),
|
||||
- sortowanie i paginacje,
|
||||
- kompaktowe komorki (referencje, klient, status+platnosc, pozycje, kwoty, wysylka, daty),
|
||||
- skrócone statystyki (`wszystkie`, `oplacone`, `wyslane`).
|
||||
- skrĂłcone statystyki (`wszystkie`, `oplacone`, `wyslane`).
|
||||
- Rozszerzono liste zamowien o podglad produktow w zamowieniu:
|
||||
- nazwa produktu,
|
||||
- miniatura (z `order_items.media_url`, fallback bez obrazu),
|
||||
@@ -613,3 +620,4 @@
|
||||
- aktualizuje tez `is_canceled_by_buyer` dla statusu `cancelled`,
|
||||
- wspiera `--use-remote` i `--dry-run`.
|
||||
- Wykonano podmiane statusow na bazie zdalnej (`--use-remote`): zaktualizowano 30 zamowien.
|
||||
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
|
||||
37. [x] Nie działa zapisywanie numer REGON
|
||||
38. [x] Customowe przyciski paczek
|
||||
39. [] Zamian głównego koloru przycisków z niebieskiego na inny (bo się z nagłówkami myli)
|
||||
39. [x] Zmiana głównego koloru przycisków z niebieskiego na inny (bo się z nagłówkami myli)
|
||||
40. [] Usunąć przycisk "Drukuj etykiety" z widoku https://orderpro.projectpro.pl/orders/list razem z mechanizmem, który to obsługuje
|
||||
41. [] Jaki jest sens tylu logów z importu allegro np w tym zamówieniu https://orderpro.projectpro.pl/orders/29, skąd taka ilość, co jest pobierane i sprawdzane?
|
||||
42. [] Nowy zdarzenie w zadaniach automatyczny -> zmiana statusu przesyłki, oraz nowe waruneki dla zdarzenia "zmiana statusu przesyłki": przesyłka zarejestrowana, przesyłka do odbioru, przesyłka nadana w punkcie, przesyłka odebrana, przesyłka anulowana, przesyłka nieodebrana, przesyłka odebrana (zwrot), chyba że takich statusów się nie da to trzeba sprawdzić jakie się da.
|
||||
43. [] Usuwanie wpisu z kolejki druku etykiet
|
||||
43. [] Usuwanie wpisu z kolejki druku etykiet
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -36,8 +36,8 @@
|
||||
|
||||
.btn--outline-primary {
|
||||
background: transparent;
|
||||
border: 1px solid #4a90d9;
|
||||
color: #4a90d9;
|
||||
border: 1px solid var(--c-action-primary);
|
||||
color: var(--c-action-primary);
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
font-size: 0.75rem;
|
||||
@@ -45,7 +45,7 @@
|
||||
transition: background-color 0.15s, color 0.15s;
|
||||
|
||||
&:hover {
|
||||
background-color: #4a90d9;
|
||||
background-color: var(--c-action-primary);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
:root {
|
||||
--c-primary: #6690f4;
|
||||
--c-primary-dark: #3164db;
|
||||
--c-action-primary: #0f766e;
|
||||
--c-action-primary-dark: #0b5f59;
|
||||
--c-bg: #f4f6f9;
|
||||
--c-surface: #ffffff;
|
||||
--c-text: #4e5e6a;
|
||||
@@ -9,6 +11,7 @@
|
||||
--c-border: #b0bec5;
|
||||
--c-danger: #cc0000;
|
||||
--focus-ring: 0 0 0 3px rgba(102, 144, 244, 0.15);
|
||||
--focus-ring-action: 0 0 0 3px rgba(15, 118, 110, 0.18);
|
||||
--shadow-card: 0 1px 4px rgba(0, 0, 0, 0.06);
|
||||
}
|
||||
|
||||
@@ -29,11 +32,11 @@
|
||||
|
||||
.btn--primary {
|
||||
color: #ffffff;
|
||||
background: var(--c-primary);
|
||||
background: var(--c-action-primary);
|
||||
}
|
||||
|
||||
.btn--primary:hover {
|
||||
background: var(--c-primary-dark);
|
||||
background: var(--c-action-primary-dark);
|
||||
}
|
||||
|
||||
.btn--secondary {
|
||||
@@ -80,8 +83,8 @@
|
||||
|
||||
.btn:focus-visible {
|
||||
outline: none;
|
||||
box-shadow: var(--focus-ring);
|
||||
border-color: var(--c-primary);
|
||||
box-shadow: var(--focus-ring-action);
|
||||
border-color: var(--c-action-primary);
|
||||
}
|
||||
|
||||
.form-control {
|
||||
|
||||
Reference in New Issue
Block a user