feat(104-apaczka-weekend-delivery): Apaczka Paczka w Weekend dla paczkomatow InPost

Phase 104 complete:
- Backend: ApaczkaShipmentService::buildOptionsPayload() mapuje weekend_delivery -> option[19] = 1 w payloadzie API Apaczka v2
- Stala OPTION_KEYS jako rozszerzalne mapowanie pole formularza -> id opcji Apaczki
- Frontend: checkbox "Dostawa w weekend (sobota)" w prepare.php widoczny tylko dla supplier=INPOST + paczkomat (door_to_point=1 lub point_to_point=1)
- JS toggle oparty na atrybutach data-supplier/data-paczkomat z resetem stanu
- 3 nowe testy jednostkowe pokrywajace mapowanie buildOptionsPayload (phpunit OK 11/11)
- Hotfix integracyjny po UAT: ShipmentController::create() nie przekazywal pola weekend_delivery z requestu do formData providera (root cause: reczna lista pol w controllerze)
- Dokumentacja zaktualizowana (DOCS/ARCHITECTURE.md, DOCS/TECH_CHANGELOG.md)

DEFER-104-01: rozwazyc test integracyjny pelnego flow controller -> service lub refactor na request->all().

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-17 09:03:44 +02:00
parent 3d61d3b2df
commit 567e888664
13 changed files with 538 additions and 12 deletions

View File

@@ -351,6 +351,7 @@
- `apaczka` ustawia jawnie `pickup.type` (`SELF`/`COURIER`) na podstawie uslugi i obecnosci `sender_point_id`; dla `COURIER` dopelnia tez `pickup.date`, `pickup.hours_from`, `pickup.hours_to`,
- dla uslug punktowych `apaczka` payload adresu zawiera aliasy identyfikatora punktu (`point`, `foreign_address_id`, `point_id`) dla nadania i odbioru,
- `ApaczkaShipmentService::buildReceiverAddress(...)` sklada dane odbiorcy z fallbackami (formularz -> delivery -> punkt odbioru z `parcel_name` -> customer), a dla przesylek punktowych dodatkowo probuje uzupelnic adres punktu przez API `points`; przy dalszych brakach dopelnia minimum techniczne, aby nie blokowac tworzenia.
- `ApaczkaShipmentService::buildOptionsPayload(array $formData): array` mapuje pola formularza (`weekend_delivery`) na klucze `option[]` w payloadzie API Apaczki (`order_send`). Klucz `19` = dostawa w sobote (InPost Paczka w Weekend); stala `OPTION_KEYS` trzyma mape pole_formularza -> id_opcji, walidacja boolean przez `filter_var(..., FILTER_VALIDATE_BOOL, FILTER_NULL_ON_FAILURE)`.
- `GET /orders/{id}/shipment/{packageId}/status`:
- `ShipmentController::checkStatus(Request): Response`,
- wybiera providera po `shipment_packages.provider` i deleguje `checkCreationStatus(...)`.

View File

@@ -993,7 +993,15 @@ Odwrocenie kierunku mapowania statusow w integracjach shopPRO i Allegro.
- wspiera `--use-remote` i `--dry-run`.
- Wykonano podmiane statusow na bazie zdalnej (`--use-remote`): zaktualizowano 30 zamowien.
## 2026-04-17 — Phase 104: Apaczka Weekend Delivery Option
Dodanie opcji "Dostawa w weekend (sobota)" dla przesylek Apaczka + InPost paczkomat.
- **Zmiana:** W formularzu przygotowania przesylki dodano checkbox "Dostawa w weekend (sobota)" widoczny dla uslug Apaczki o `supplier=INPOST` i fladze paczkomatowej (`door_to_point=1` lub `point_to_point=1`).
- **Mapping:** `ApaczkaShipmentService::buildOptionsPayload()` mapuje pole `weekend_delivery` na `option[19] = 1` w payloadzie API Apaczki (`order_send`). Stala `OPTION_KEYS = ['weekend_delivery' => 19]` trzyma mape pole -> id opcji.
- **Testy:** `tests/Unit/ApaczkaShipmentServiceTest.php` rozszerzony o 3 testy jednostkowe `buildOptionsPayload` (weekend enabled / disabled / pusty formularz).
- **DB:** Brak zmian w schemacie. Walidacja okna czasowego "Paczka w Weekend" pozostaje po stronie API Apaczki.
- **Pliki:** `src/Modules/Shipments/ApaczkaShipmentService.php`, `resources/views/shipments/prepare.php`, `tests/Unit/ApaczkaShipmentServiceTest.php`