Files
orderPRO/.paul/phases/29-delivery-status-mapping-ui/29-01-SUMMARY.md
Jacek Pyziak 325a941c42 feat(29-delivery-status-mapping-ui): konfiguracja mapowania statusów dostawy per provider
Phase 29 complete (v1.3):
- Tabela delivery_status_mappings z DB overrides
- DeliveryStatus: normalizeWithOverrides(), descriptionWithOverrides(), getDefaultMappings()
- UI ustawień: tabela mapowań per provider (InPost/Apaczka/Allegro), bulk save, reset, resetAll
- 5 endpointów w routes/web.php, link w menu bocznym

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 23:55:42 +01:00

130 lines
5.0 KiB
Markdown

---
phase: 29-delivery-status-mapping-ui
plan: 01
subsystem: ui, settings
tags: [delivery-status, mapping, override, shipment-tracking]
requires:
- phase: 28-shipment-tracking-ui
provides: DeliveryStatus class with hardcoded provider mappings
provides:
- UI for configuring delivery status mappings per provider
- DB-backed overrides for normalized status and description
- DeliveryStatus override methods (normalizeWithOverrides, descriptionWithOverrides)
affects: [shipment-tracking-handler integration]
tech-stack:
added: []
patterns: [DB override with hardcoded fallback]
key-files:
created:
- database/migrations/20260323_000070_create_delivery_status_mappings_table.sql
- src/Modules/Shipments/DeliveryStatusMappingRepository.php
- src/Modules/Settings/DeliveryStatusMappingController.php
- resources/views/settings/delivery-status-mappings.php
- resources/scss/modules/_delivery-status-mappings.scss
modified:
- src/Modules/Shipments/DeliveryStatus.php
- routes/web.php
- resources/views/layouts/app.php
- resources/scss/app.scss
key-decisions:
- "Bulk save form + separate hidden reset form to avoid nested forms"
- "saveBulk auto-detects default vs custom: if values match defaults, deletes override"
- "resetAll added per user request (deviation from plan)"
patterns-established:
- "DB override with hardcoded fallback: check overrides map first, then fall back to const arrays"
duration: ~45min
started: 2026-03-23T22:00:00Z
completed: 2026-03-23T22:45:00Z
---
# Phase 29 Plan 01: Delivery Status Mapping UI Summary
**UI konfiguracji mapowania surowych statusów dostawy na znormalizowane — per provider, z edycją, resetem i bulk save.**
## Performance
| Metric | Value |
|--------|-------|
| Duration | ~45min |
| Tasks | 3 completed |
| Files created | 5 |
| Files modified | 4 |
## Acceptance Criteria Results
| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Lista mapowań per provider | Pass | Tabela z InPost/Apaczka/Allegro, kolumny raw/description/normalized |
| AC-2: Edycja mapowania statusu | Pass | Select z LABEL_PL, bulk save |
| AC-3: Edycja opisu statusu | Pass | Input text per wiersz |
| AC-4: Reset do domyślnych | Pass | Przycisk per wiersz + resetuj wszystkie |
| AC-5: DeliveryStatus używa custom overrides | Pass | normalizeWithOverrides() i descriptionWithOverrides() |
## Accomplishments
- Tabela `delivery_status_mappings` z UNIQUE KEY na provider+raw_status
- Pełne CRUD repozytorium z upsert i deleteAllByProvider
- DeliveryStatus rozszerzony o `getDefaultMappings()`, `normalizeWithOverrides()`, `descriptionWithOverrides()`, `ALL_STATUSES`
- Kontroler z index/save/saveBulk/reset/resetAll
- Widok z tabelą per provider, bulk save, reset per wiersz i reset all
## Files Created/Modified
| File | Change | Purpose |
|------|--------|---------|
| `database/migrations/20260323_000070_...sql` | Created | Tabela delivery_status_mappings |
| `src/Modules/Shipments/DeliveryStatusMappingRepository.php` | Created | CRUD repozytorium |
| `src/Modules/Settings/DeliveryStatusMappingController.php` | Created | Kontroler ustawień mapowań |
| `resources/views/settings/delivery-status-mappings.php` | Created | Widok tabeli mapowań |
| `resources/scss/modules/_delivery-status-mappings.scss` | Created | Style CSS dla custom rows |
| `src/Modules/Shipments/DeliveryStatus.php` | Modified | ALL_STATUSES, getDefaultMappings, *WithOverrides methods |
| `routes/web.php` | Modified | 5 nowych endpointów + controller instantiation |
| `resources/views/layouts/app.php` | Modified | Link w menu bocznym |
| `resources/scss/app.scss` | Modified | Import nowego modułu SCSS |
## Decisions Made
| Decision | Rationale | Impact |
|----------|-----------|--------|
| Bulk save z auto-detekcją defaults | Unikamy zbędnych wpisów w DB gdy wartości == domyślne | Czysta tabela overrides |
| Osobny hidden form na reset (nie nested) | HTML nie pozwala na nested forms | Fix buga z resetem |
| resetAll dodany | User request | Dodatkowy endpoint + przycisk |
## Deviations from Plan
### Summary
| Type | Count | Impact |
|------|-------|--------|
| Scope additions | 2 | Minimalne — bug fix + feature request |
1. **Bug fix: nested forms** — Reset forms były zagnieżdżone w bulk save form. Przebudowano na hidden form + JS.
2. **Scope addition: resetAll** — Dodano przycisk "Resetuj wszystkie" + endpoint + repo method na życzenie usera.
## Skill Audit
| Expected | Invoked | Notes |
|----------|---------|-------|
| sonar-scanner | ✓ | 0 nowych unikalnych issues; 3x S1192 pre-existing (duplikaty stringów w DeliveryStatus), 1x S1142 pre-existing (matchCarrierByName), 2x accessibility minor w widoku (pre-existing pattern) |
## Next Phase Readiness
**Ready:**
- UI mapowania gotowe do użytku
- DeliveryStatus override methods gotowe do integracji w ShipmentTrackingHandler
**Concerns:**
- ShipmentTrackingHandler jeszcze nie przekazuje overrides do DeliveryStatus — wymaga osobnego planu integracji
**Blockers:** None
---
*Phase: 29-delivery-status-mapping-ui, Plan: 01*
*Completed: 2026-03-23*