From 6d3dba89ed2e1bbd738f3d85269b4f19b6cc0646 Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Tue, 28 Apr 2026 22:13:52 +0200 Subject: [PATCH] feat(109): checkbox multiselect filters Phase 109 complete: - Add checkbox dropdown enhancement for statistics multi-select filters - Preserve GET contract for channels[] and status_groups[] - Update PAUL plan context to read .paul/codebase docs Co-Authored-By: Codex --- .paul/PROJECT.md | 11 +- .paul/ROADMAP.md | 15 +- .paul/STATE.md | 39 ++-- .paul/changelog/2026-04-28.md | 23 +++ .paul/codebase/architecture.md | 35 ++++ .paul/codebase/tech_changelog.md | 44 ++++ .../109-01-PLAN.md | 189 ++++++++++++++++++ .../109-01-SUMMARY.md | 62 ++++++ public/assets/css/app.css | 2 +- .../assets/js/modules/checkbox-multiselect.js | 164 +++++++++++++++ resources/scss/app.scss | 105 ++++++++++ resources/views/layouts/app.php | 1 + resources/views/statistics/orders.php | 20 +- 13 files changed, 681 insertions(+), 29 deletions(-) create mode 100644 .paul/changelog/2026-04-28.md create mode 100644 .paul/codebase/tech_changelog.md create mode 100644 .paul/phases/109-checkbox-multiselect-filters/109-01-PLAN.md create mode 100644 .paul/phases/109-checkbox-multiselect-filters/109-01-SUMMARY.md create mode 100644 public/assets/js/modules/checkbox-multiselect.js diff --git a/.paul/PROJECT.md b/.paul/PROJECT.md index ccdc56a..1916d26 100644 --- a/.paul/PROJECT.md +++ b/.paul/PROJECT.md @@ -12,9 +12,9 @@ Sprzedawca moĹĽe obsĹ‚ugiwać zamĂłwienia ze wszystkich kanałów | Attribute | Value | |-----------|-------| -| Version | 3.2.0 | -| Status | v3.2 shipped — Delivery Status Management complete | -| Last Updated | 2026-04-27 | +| Version | 3.3.0 | +| Status | v3.3 shipped - UI Filters complete | +| Last Updated | 2026-04-28 | ## Requirements @@ -112,6 +112,7 @@ Sprzedawca moĹĽe obsĹ‚ugiwać zamĂłwienia ze wszystkich kanałów - [x] Alert o kliencie z historia zwrotow: badge w liscie zamowien (kolumna buyer) + czerwony banner u gory szczegolow zamowienia; matching OR po email/phone/name; `
` z lista zwroconych zamowien — Phase 106 - [x] Idempotentna jednorazowa wysylka e-mail per zamowienie: tabela deduplikacji `automation_email_once_deliveries` (UNIQUE KEY rule_id+action_id+order_id), checkbox "Wyslij tylko raz" w konfiguracji akcji, markSent() tylko po sukcesie — Phase 107 - [x] Delivery Status Management: tabela `delivery_statuses` z CRUD panelem `/settings/delivery-statuses`, `DeliveryStatus::setRepository()` z DB fallbackiem, integracja DB-driven w dropdownach automatyzacji (warunek shipment_status + akcja update_shipment_status), osobna podstrona formularza CRUD (BREAKING: drop backward compat dla starych grupowych kluczy automatyzacji) — Phase 108 +- [x] Checkbox dropdown multi-select filters: `/statistics/orders` korzysta z progresywnie ulepszanych selectow multiple z checkboxami, opcja "Wszystkie" i zachowanym kontraktem GET — Phase 109 ### Deferred @@ -120,7 +121,7 @@ Sprzedawca moĹĽe obsĹ‚ugiwać zamĂłwienia ze wszystkich kanałów ### Active (In Progress) -- [ ] (brak — milestone v3.0 zakonczony, oczekiwanie na kolejny) +- [ ] (brak — v3.3 zakonczony, oczekiwanie na kolejny milestone) ### Planned (Next) @@ -228,6 +229,6 @@ Quick Reference: --- *PROJECT.md — Updated when requirements or context change* -*Last updated: 2026-04-27 after v3.2 Delivery Status Management milestone completion (Phase 108)* +*Last updated: 2026-04-28 after v3.3 UI Filters milestone completion (Phase 109)* diff --git a/.paul/ROADMAP.md b/.paul/ROADMAP.md index 6e82873..4ed4ae2 100644 --- a/.paul/ROADMAP.md +++ b/.paul/ROADMAP.md @@ -6,7 +6,7 @@ orderPRO to narzedzie do wielokanalowego zarzadzania sprzedaza. Projekt przechod ## Current Milestone -Brak aktywnego milestone — v3.2 zamkniety. Nastepny milestone do zaplanowania. +Brak aktywnego milestone - v3.3 zamkniety. Nastepny milestone do zaplanowania. ## Next Milestone @@ -19,6 +19,19 @@ Kandydaci w kolejce: ## Completed Milestones +
+v3.3 UI Filters - 2026-04-28 (1 phase, 1 plan) + +Usprawnienie wielokrotnego wyboru w filtrach: natywne selecty multiple na `/statistics/orders` zostaly zastapione kompaktowym dropdownem z checkboxami, bez zmiany kontraktu GET i backendu statystyk. + +| Phase | Name | Plans | Status | +|-------|------|-------|--------| +| 109 | Checkbox Multiselect Filters | 1/1 | Complete | + +Archive: `.paul/phases/109-checkbox-multiselect-filters/` + +
+
v3.2 Delivery Status Management - 2026-04-27 (1 phase, 2 plans) diff --git a/.paul/STATE.md b/.paul/STATE.md index 5bf6b33..57fd7d4 100644 --- a/.paul/STATE.md +++ b/.paul/STATE.md @@ -2,46 +2,45 @@ ## Project Reference -See: .paul/PROJECT.md (updated 2026-04-27) +See: .paul/PROJECT.md (updated 2026-04-28) **Core value:** Sprzedawca moze obslugiwac zamowienia ze wszystkich kanalow sprzedazy i nadawac przesylki bez przelaczania sie miedzy platformami. -**Current focus:** Brak aktywnego milestone — v3.2 zamkniety +**Current focus:** Brak aktywnego milestone - v3.3 zamkniety ## Current Position -Milestone: v3.2 — COMPLETE (Delivery Status Management) -Phase: 108 of 108 — COMPLETE -Plan: 108-01 — COMPLETE / 108-02 — COMPLETE -Version: 3.2.0 -Status: v3.2 shipped — gotowy do nastepnego milestone +Milestone: v3.3 - COMPLETE (UI Filters) +Phase: 109 of 109 - COMPLETE +Plan: 109-01 - COMPLETE +Version: 3.3.0 +Status: v3.3 shipped - gotowy do nastepnego milestone -Last activity: 2026-04-27 — TRANSITION Phase 108 / v3.2 milestone complete +Last activity: 2026-04-28 - UNIFY Phase 109 / v3.3 milestone complete Progress: -- Milestone v3.2: [##########] 100% (1/1 phases, 2/2 plans) +- Milestone v3.3: [##########] 100% (1/1 phases, 1/1 plans) ## Loop Position Current loop state: ``` -v3.2 milestone: - Phase 108 (Delivery Status Management): - Plan 108-01: PLAN ✓ APPLY ✓ UNIFY ✓ - Plan 108-02: PLAN ✓ APPLY ✓ UNIFY ✓ - → Phase 108 closed -→ v3.2 milestone closed +v3.3 milestone: + Phase 109 (Checkbox Multiselect Filters): + Plan 109-01: PLAN done APPLY done UNIFY done + -> Phase 109 closed +-> v3.3 milestone closed ``` ## Session Continuity -Last session: 2026-04-27 -Stopped at: v3.2 milestone closed -Next action: /paul:milestone — wybor i zaplanowanie nastepnego milestone -Resume file: .paul/ROADMAP.md +Last session: 2026-04-28 +Stopped at: v3.3 milestone closed +Next action: /paul:milestone - wybor i zaplanowanie nastepnego milestone +Resume file: .paul/phases/109-checkbox-multiselect-filters/109-01-SUMMARY.md ## Git State -Last commit: 0063402 — feat(108): delivery status management +Last commit: feat(109): checkbox multiselect filters Branch: main Feature branches merged: none diff --git a/.paul/changelog/2026-04-28.md b/.paul/changelog/2026-04-28.md new file mode 100644 index 0000000..27e6202 --- /dev/null +++ b/.paul/changelog/2026-04-28.md @@ -0,0 +1,23 @@ +# 2026-04-28 + +## Co zrobiono + +- [Phase 109, Plan 01] Wdrozono checkbox dropdown multi-select filters na `/statistics/orders`. +- Zachowano kontrakt GET `channels[]` i `status_groups[]` przez synchronizacje z natywnym `` controls after `DOMContentLoaded`. +- Keeps the original select in the form, synchronizes option `selected` state, and preserves native GET/POST names such as `channels[]` and `status_groups[]`. +- Used by `/statistics/orders` filters to display a compact trigger, checkbox dropdown, "Wszystkie" bulk toggle, and selected count. +- Progressive enhancement: if JavaScript fails, the native multi-select remains visible. + ## Key Data Flows ### Order Lifecycle @@ -124,3 +134,28 @@ tests/ Unit/ PHPUnit tests (7+ service test files) bootstrap.php PSR-4 autoloader for tests ``` + +## Phase 108 — Delivery Status Management + +### DeliveryStatusRepository (`src/Modules/Shipments/DeliveryStatusRepository.php`) +- CRUD dla tabeli `delivery_statuses` +- Per-request static cache (`private static ?array $cache`) +- Blokuje edycję/usunięcie statusów systemowych (`is_system=1`) +- Blokuje usunięcie statusów używanych w `delivery_status_mappings` lub `shipment_packages` + +### DeliveryStatusesController (`src/Modules/Settings/DeliveryStatusesController.php`) +- Panel `/settings/delivery-statuses` +- Dwie zakładki via `?tab=` param: `statuses` (CRUD) i `mapping` (embed mapowania) +- Wstrzykuje `DeliveryStatusRepository` i `DeliveryStatusMappingRepository` + +### DeliveryStatus::setRepository() (dynamic loading) +- Wywoływane raz w `routes/web.php` po bootstrap +- `label()`, `getAllOptions()`, `getAllStatuses()`, `getColor()` ładują z DB gdy repo ustawione +- Fallback na hardcoded stałe gdy repo niedostępne + +### AutomationController + AutomationService (Phase 108 Plan 02) +- `AutomationController::buildShipmentStatusOptions()` — buduje listę opcji `[key => ['label' => ...]]` z `DeliveryStatus::getAllOptions()` (DB-driven) +- Walidacja `shipment_status` warunku i `update_shipment_status` akcji w `parseConditionValue()`/`parseActionConfig()` używa `DeliveryStatus::getAllStatuses()` +- `AutomationService::evaluateShipmentStatusCondition()` — bezpośrednie porównanie kluczy DB (usunięto mapping grupowy `SHIPMENT_STATUS_OPTION_MAP`) +- `AutomationService::resolveStatusFromActionKey()` — bezpośredni klucz statusu z DB jako target +- BREAKING: stare reguły z grupowymi kluczami (`registered`, `courier_pickup`, `dropped_at_point`, `unclaimed`, `picked_up_return`) nie matchują się — operator musi je odtworzyć przy użyciu nowych kluczy DB diff --git a/.paul/codebase/tech_changelog.md b/.paul/codebase/tech_changelog.md new file mode 100644 index 0000000..ab7500c --- /dev/null +++ b/.paul/codebase/tech_changelog.md @@ -0,0 +1,44 @@ +# Technical Changelog + +## 2026-04-28 - Phase 109 Plan 01: Checkbox Multiselect Filters + +**Co zrobiono:** +- `public/assets/js/modules/checkbox-multiselect.js` - nowy vanilla JS enhancer dla natywnych `