Files
orderPRO/.paul/phases/130-polkurier-delivery-status-mappings/130-01-SUMMARY.md
Jacek Pyziak 27df08e661 feat(130): polkurier delivery status mappings UI
Phase 130 complete (1 plan):
- POLKURIER_MAP + POLKURIER_DESCRIPTIONS w DeliveryStatus.php (7 wpisow O/P/A/WP/D/Z/W z dokumentacji v1.11)
- 'polkurier' w PROVIDERS w DeliveryStatusesController + DeliveryStatusMappingController
- countAllUnmappedForBadge() zlicza polkurier
- Defaulty hardcoded w kodzie (spojnie z InPost/Apaczka/Allegro); migracja Phase 128 staje sie no-op
- Zero zmian w widoku (_delivery-status-mappings-content.php auto-iteruje po providerach)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 17:17:48 +02:00

7.8 KiB
Raw Blame History

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
130-polkurier-delivery-status-mappings 01 ui
delivery-statuses
polkurier
mapping
settings
phase provides
128-polkurier-shipment-service PolkurierTrackingService + delivery_status_mappings seed migration (DB-side override)
phase provides
108-delivery-status-management DeliveryStatus::PROVIDER_MAPS pattern + DeliveryStatusMappingController + view _delivery-status-mappings-content.php
polkurier visible in Provider dropdown on /settings/delivery-statuses?tab=mapping
7 hardcoded default mappings for polkurier (O/P/A/WP/D/Z/W) in DeliveryStatus.php
polkurier counted in countAllUnmappedForBadge() so menu badge reacts to unknown polkurier raw statuses
future polkurier UI work (paczkomaty selector, presety przesylek)
any future delivery provider additions (recipe established
5 edit points)
added patterns
Provider addition recipe: 1 const + 1 PROVIDER_MAPS + 1 PROVIDER_DESCRIPTIONS + 2 match arms + 2 PROVIDERS controller consts + 1 badge providers list = 5 edit points across 4 files
modified
src/Modules/Shipments/DeliveryStatus.php
src/Modules/Settings/DeliveryStatusesController.php
src/Modules/Settings/DeliveryStatusMappingController.php
src/Modules/Shipments/DeliveryStatusMappingRepository.php
Defaultowe mapowania polkurier hardcoded w DeliveryStatus.php (spojnie z InPost/Apaczka/Allegro)
Etykieta dropdownu = 'polkurier' (lowercase, spojne z Phase 127 hub integracji)
Badge counter uwzglednia polkurier (caly framework, nie wybiorczo)
Provider-addition checklist: trzy hardcoded providers (PROVIDER_MAPS/PROVIDER_DESCRIPTIONS + 2× normalize/description match) + dwa hardcoded controllery (PROVIDERS const) + jeden repo (badge providers list)
~15min 2026-05-14T18:00:00Z 2026-05-14T18:15:00Z

Phase 130 Plan 01: polkurier delivery status mappings UI Summary

polkurier widoczny w dropdownie /settings/delivery-statuses?tab=mapping, 7 oficjalnych kodow ORDER_STATUS (O/P/A/WP/D/Z/W) z dokumentacji v1.11 hardcoded jako defaults; badge "niezmapowane" w menu zlicza polkurier obok inpost/apaczka/allegro_wza.

Performance

Metric Value
Duration ~15 min
Started 2026-05-14T18:00:00Z
Completed 2026-05-14T18:15:00Z
Tasks 2/2 completed
Files modified 4 source files

Acceptance Criteria Results

Criterion Status Notes
AC-1: polkurier widoczny w dropdownie providerów Pass PROVIDERS w DeliveryStatusesController + DeliveryStatusMappingController zawiera 4 wpisy; widok _delivery-status-mappings-content.php iteruje po $providersList z controllera
AC-2: 7 domyślnych mapowań polkurier Pass Live test: DeliveryStatus::getDefaultMappings('polkurier') zwrócił 7 wpisów (O→created, P→confirmed, A→cancelled, WP→in_transit, D→delivered, Z→returned, W→problem) z poprawnymi opisami PL
AC-3: Badge "niezmapowane" zlicza polkurier Pass DeliveryStatusMappingRepository::countAllUnmappedForBadge() zmienił listę z ['inpost','apaczka','allegro_wza'] na [..., 'polkurier']
AC-4: Override DB nadpisuje hardcoded default Pass Logika index() w obu kontrolerach (niezmieniona) iteruje po defaults i nadpisuje $overrideMap[$rawStatus] z delivery_status_mappings — pattern identyczny jak dla inpost/apaczka/allegro_wza
AC-5: Zero regresji dla istniejących providerów Pass INPOST_MAP/APACZKA_MAP/ALLEGRO_MAP/ALLEGRO_EDGE_MAP nietknięte; PROVIDER_MAPS/PROVIDER_DESCRIPTIONS zachowują kolejność; normalize()/description() match dostały tylko jedną nową gałąź polkurier

Accomplishments

  • Hardcoded POLKURIER_MAP + POLKURIER_DESCRIPTIONS w DeliveryStatus.php — 7 wpisów z oficjalnej dokumentacji polkurier API v1.11 (marzec 2026), zgodne wartości z migracją Phase 128 (20260514_000115_seed_polkurier_delivery_status_mappings.sql)
  • 5 punktów edycji w 4 plikach (1 const definition + 2 PROVIDER_* + 2 match arms + 2× PROVIDERS controller + 1 badge providers list)
  • Brak regresji: defaulty inpost/apaczka/allegro pozostały bit-for-bit identyczne; zero zmian w schemacie DB; zero zmian w widoku (dropdown auto-iteruje po providerach z controllera)

Task Commits

Atomic per-task commit nie wykonany w trakcie APPLY — wszystkie 4 pliki źródłowe zostaną zacommitowane jako jeden commit fazowy feat(130): polkurier delivery status mappings UI w kroku transition (zgodnie z konwencją poprzednich faz v3.7).

Files Created/Modified

File Change Purpose
src/Modules/Shipments/DeliveryStatus.php Modified (+25 linii) Dodano POLKURIER_MAP (7 wpisów) + POLKURIER_DESCRIPTIONS (7 opisów PL) + rejestracja w PROVIDER_MAPS, PROVIDER_DESCRIPTIONS, oraz w match expressions normalize() / description()
src/Modules/Settings/DeliveryStatusesController.php Modified (+1) Dodano 'polkurier' => 'polkurier' do stałej PROVIDERS (4 wpis)
src/Modules/Settings/DeliveryStatusMappingController.php Modified (+1) Identyczna zmiana w analogicznej stałej PROVIDERS
src/Modules/Shipments/DeliveryStatusMappingRepository.php Modified (1 ↔) countAllUnmappedForBadge(): lista providerów rozszerzona o polkurier

Decisions Made

Decision Rationale Impact
POLKURIER_MAP/DESCRIPTIONS hardcoded w DeliveryStatus.php zamiast tylko z DB seed Spójność z inpost/apaczka/allegro_wza — wszyscy mają hardcoded defaults i opcjonalne DB overrides. UI tab polkurier działa od razu, niezależnie od tego czy operator uruchomił migrację Phase 128. Migracja 20260514_000115_seed_polkurier_delivery_status_mappings.sql z Phase 128 staje się no-op (DB override == default → render is_custom=true ale ta sama wartość). Można ją uruchomić lub nie.
Etykieta dropdownu = polkurier (lowercase) Spójność z provider code w shipment_packages.provider, z hubem integracji Phase 127, z PROJECT.md decisions. Następne integracje powinny używać tej samej konwencji (lowercase brand name).
Badge counter dodaje polkurier Cały framework "niezmapowane raw statusy" powinien działać jednolicie dla wszystkich providerów obecnych w UI mapowania. Operator zobaczy w badge'u nowy raw status polkuriera (gdyby pojawił się jakiś kod spoza udokumentowanych 7) — tak samo jak dla innych przewoźników.

Deviations from Plan

Summary

Type Count Impact
Auto-fixed 0
Scope additions 0
Deferred 0

Total impact: Brak deviacji — plan wykonany 1:1.

Deferred Items

Brak — plan wykonany dokładnie jak napisany.

Issues Encountered

Brak — wszystkie 5 edycji zaaplikowane czysto, PHP lint przeszedł na 4 plikach, runtime test getDefaultMappings('polkurier') zwrócił oczekiwane 7 wpisów.

Next Phase Readiness

Ready:

  • Mapowanie polkurier w pełni widoczne w UI dla operatora — może podejrzeć i nadpisać każdy z 7 statusów.
  • Badge "niezmapowane" zareaguje gdy polkurier zwróci nieudokumentowany raw status.
  • Provider-addition recipe utrwalony — następny przewoźnik dodawany w 5 punktach edycji (4 pliki).

Concerns:

  • Migracja Phase 128 (20260514_000115_seed_polkurier_delivery_status_mappings.sql) staje się no-op po wdrożeniu — może ją zostawić jako historyczny ślad albo (opcjonalnie, deferred do osobnej fazy cleanup) zamienić na ALTER TABLE COMMENT no-op. Nie blokuje niczego.
  • Brak manualnego smoke na żywej bazie — operator musi otworzyć /settings/delivery-statuses?tab=mapping&provider=polkurier po deploy.

Blockers:

  • None.

Phase: 130-polkurier-delivery-status-mappings, Plan: 01 Completed: 2026-05-14