Files
orderPRO/.paul/phases/108-delivery-status-management/108-02-SUMMARY.md
Jacek Pyziak 0063402897 feat(108): delivery status management
Phase 108 complete (v3.2 milestone):

Plan 108-01 — Delivery Status DB & CRUD:
- Tabela delivery_statuses z seedem 11 statusow systemowych
- DeliveryStatusRepository (CRUD + per-request static cache)
- DeliveryStatus::setRepository() — DB fallback dla static final class
- Panel /settings/delivery-statuses (zakladki Statusy + Mapowanie)
- Sidebar przebudowany: Statusy zamowien + Statusy przesylek

Plan 108-02 — Automation Dropdowns z DB + UI Refactor:
- Dropdowny automatyzacji ladowane z DB (warunek shipment_status + akcja update_shipment_status)
- Walidacja przez DeliveryStatus::getAllStatuses()
- Osobna podstrona formularza CRUD (delivery-status-form.php)
- Lista uproszczona: rename Terminal -> Koncowy, usunieta kolumna Typ
- BREAKING: drop backward compat dla starych grupowych kluczy automatyzacji
- Bug fix: path params w DeliveryStatusesController via \$request->input('id')

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 22:10:24 +02:00

8.2 KiB

phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, patterns-established, duration, started, completed
phase plan subsystem tags requires provides affects tech-stack key-files key-decisions patterns-established duration started completed
108-delivery-status-management 02 automation, settings
delivery-status
automation
dropdown
php
db-driven
ui-refactor
phase provides
108-01-delivery-status-management DeliveryStatusRepository, DeliveryStatus::setRepository(), getAllOptions(), getAllStatuses()
Automation dropdowns dla shipment_status (warunek + akcja) załadowane z DB
Walidacja shipment_status / update_shipment_status przeciw kluczom z DB
Osobna podstrona formularza dla CRUD delivery statuses (`/settings/delivery-statuses/new`, `/{id}/edit`)
Lista statusów uproszczona
rename "Terminal" → "Końcowy", usunięta kolumna "Typ"
delivery-status-consumers
automation-rules-existing
added patterns
Path params w controllerach przez `$request->input('id')`, nie jako argumenty metody
Form-as-separate-page pattern dla CRUD (zamiast inline edit row)
created modified
resources/views/settings/delivery-status-form.php
src/Modules/Automation/AutomationController.php
src/Modules/Automation/AutomationService.php
src/Modules/Settings/DeliveryStatusesController.php
resources/views/settings/delivery-statuses.php
routes/web.php
.paul/docs/ARCHITECTURE.md
.paul/docs/TECH_CHANGELOG.md
BREAKING: Drop backward compat dla starych grupowych kluczy automatyzacji (registered, courier_pickup, etc.) — kolizja semantyczna picked_up by silently dawała wrong matches
Path params w DeliveryStatusesController via $request->input('id') — naprawia bug pre-existing z Plan 01 (update/destroy też miały błędną sygnaturę)
CRUD delivery statuses przeniesiony na osobną podstronę — UX lepszy niż inline edit row
Walidacja submitted status keys przez DeliveryStatus::getAllStatuses() (zamiast hardcoded array_keys konstanty)
Form view jako osobna podstrona z disabled key field przy edycji (immutable po utworzeniu)
~50min 2026-04-27T01:00:00Z 2026-04-27T02:00:00Z

Phase 108 Plan 02: Automation Dropdowns z DB Summary

Domknięcie integracji DB-driven statusów: dropdowny automatyzacji ładują się z delivery_statuses, plus refaktor UI listy statusów (osobna podstrona dla CRUD).

Performance

Metric Value
Duration ~50 min
Tasks 1 planowane + 2 user-requested ad-hoc
Files created 1
Files modified 7

Acceptance Criteria Results

Criterion Status Notes
AC-1: Dropdown statusów z DB Pass AutomationController::buildShipmentStatusOptions() z DeliveryStatus::getAllOptions()
AC-2: Istniejące reguły działają bez błędów Pass* *BREAKING: stare grupowe klucze nie matchują (decyzja użytkownika "poprawię ręcznie"); brak wyjątków, ciche no-match

Accomplishments

  • AutomationController — usunięto stałą SHIPMENT_STATUS_OPTIONS (8 grupowych kluczy); dropdown buduje się z DB przez DeliveryStatus::getAllOptions()
  • AutomationService — usunięto stałą SHIPMENT_STATUS_OPTION_MAP; ewaluacja evaluateShipmentStatusCondition porównuje klucze bezpośrednio; resolveStatusFromActionKey używa kluczy DB jako target
  • Walidacja w parseConditionValue('shipment_status') i parseActionConfig('update_shipment_status') przez DeliveryStatus::getAllStatuses()
  • Ad-hoc UI refactor (user request): osobna podstrona formularza CRUD (delivery-status-form.php) zamiast inline edit row na liście; przycisk "+ Dodaj status" zamiast formy na dole strony
  • Ad-hoc UI changes: rename column "Terminal" → "Końcowy", usunięta kolumna "Typ" (badge "systemowy" — informacja zbędna gdy brak akcji edycji)
  • Bug fix (pre-existing): sygnatury update/destroy/edit w DeliveryStatusesController używały path param jako 2. argument metody — router projektu przekazuje params przez $request->input('id'). Naprawione wszystkie trzy.

Files Created/Modified

File Change Purpose
src/Modules/Automation/AutomationController.php Modified Usunięta stała SHIPMENT_STATUS_OPTIONS; nowa metoda buildShipmentStatusOptions(); walidacja przez DeliveryStatus
src/Modules/Automation/AutomationService.php Modified Usunięta stała SHIPMENT_STATUS_OPTION_MAP; bezpośrednie porównanie kluczy w ewaluacji
src/Modules/Settings/DeliveryStatusesController.php Modified +create(), edit(), renderForm(); fix path params w update/destroy
resources/views/settings/delivery-status-form.php Created Osobna podstrona formularza CRUD statusów
resources/views/settings/delivery-statuses.php Modified Lista uproszczona: rename Terminal→Końcowy, usunięte Typ + inline edit + bottom add form, przycisk "+ Dodaj status"
routes/web.php Modified +2 GET routes: /new, /{id}/edit
.paul/docs/ARCHITECTURE.md Modified Sekcja Phase 108 Plan 02
.paul/docs/TECH_CHANGELOG.md Modified Wpis Phase 108 Plan 02 (BREAKING)

Decisions Made

Decyzja Uzasadnienie Wpływ
Drop backward compat (option A) Kolizja semantyczna picked_up: stary grupowy klucz mapował na delivered, nowy klucz DB to "Odebrana przez kuriera" — odwrotne końce cyklu BREAKING dla istniejących reguł; user: "poprawię ręcznie jak coś"
Form jako osobna podstrona zamiast inline Inline edit row na liście "źle wygląda" (user feedback) Lepszy UX, czytelniejszy formularz z grid 2-col
Usunięcie kolumny "Typ" Badge "systemowy" zbędny — brak przycisku Edytuj/Usuń przy systemowych już to komunikuje Lista 6 kolumn zamiast 7
Path params via $request->input('id') Konwencja projektu (router nie injectuje argumentów do handlerów) Naprawiono pre-existing bug w update/destroy z Plan 01

Deviations from Plan

Summary

Type Count Impact
Files w plan, ale bez zmian 3 AutomationRepository.php, form.php, automation-form.js — analiza wykazała brak potrzeby modyfikacji
Scope additions (user request) 3 Rename column, hide column, separate form page
Bug fix poza scope 1 Path params w update/destroy (pre-existing z Plan 01)
Deferred 1 sonar-scanner dla Phase 105/106/107/108 — punkt deferred z Plan 01, niezmieniony

Total impact: Plan zakończony plus dodatkowe ulepszenia UX zgłoszone przez użytkownika podczas weryfikacji Plan 01. Bug fix path params eliminuje crash przy edycji.

Auto-fixed Issues

1. [Routing] Path params jako argumenty metody zamiast $request->input()

  • Found during: Test ścieżki /settings/delivery-statuses/{id}/edit (user runtime error)
  • Issue: "Too few arguments to function ... edit(), 1 passed ... and exactly 2 expected"
  • Fix: Zmieniono sygnatury edit(), update(), destroy() na single Request $request; $id czytany przez $request->input('id', 0)
  • Files: src/Modules/Settings/DeliveryStatusesController.php
  • Verification: php -l OK; konwencja zgodna z ReceiptController

Deferred Items

  • sonar-scanner skill (required) — Phase 105, 106, 107, 108 (już deferred z poprzednich planów)

Issues Encountered

Issue Resolution
Kolizja semantyczna klucza picked_up (stary group → delivered vs nowy DB → "Odebrana przez kuriera") Advisor consult przed kodowaniem; user wybrał opcję A (drop backward compat)
Pre-existing bug z path params w update/destroy Zauważony dopiero przy nowym edit() — naprawiony razem

Next Phase Readiness

Ready:

  • Pełna integracja DB-driven statusów: dropdowny + walidacja + ewaluacja
  • CRUD UI ergonomiczny: lista + osobna podstrona formularza
  • Phase 108 — wszystkie 2 plans zamknięte

Concerns:

  • Migracja 20260427_000103_create_delivery_statuses_table.sql — wymaga php bin/migrate.php na środowisku produkcyjnym (XAMPP offline podczas APPLY 108-01)
  • Stare reguły automatyzacji z grupowymi kluczami (jeśli istnieją) — wymagają ręcznego odtworzenia z nowymi kluczami DB
  • sonar-scanner gap dla Phase 105/106/107/108 — odłożony

Blockers: None


Phase: 108-delivery-status-management, Plan: 02 Completed: 2026-04-27