6.1 KiB
6.1 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous
| phase | plan | type | wave | depends_on | files_modified | autonomous | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 77-cod-amount-fix | 01 | execute | 1 |
|
true |
Purpose
Zamówienia shopPRO z płatnością za pobraniem nie mają auto-wypełnionej kwoty COD w formularzu przesyłki, ponieważ pole external_payment_type_id zawiera wartość z shopPRO API (np. "cod", "pobranie"), a nie Allegro-specyficzne "CASH_ON_DELIVERY".
Output
- Centralna metoda
StringHelper::isCodPayment()zastępuje wszystkie hardcoded sprawdzenia - ShopproOrderMapper normalizuje typ płatności do
CASH_ON_DELIVERYprzy imporcie - Kwota pobrania auto-wypełnia się poprawnie dla zamówień z każdego źródła
Source Files
@src/Core/Support/StringHelper.php @src/Modules/Settings/ShopproOrderMapper.php @resources/views/shipments/prepare.php @resources/views/orders/show.php @src/Modules/Orders/OrdersController.php
No specialized flows configured — optional skills only.<acceptance_criteria>
AC-1: COD auto-fill dla zamówień shopPRO
Given zamówienie shopPRO z payment_method "cod" lub "pobranie" lub "za pobraniem"
When użytkownik wchodzi na /orders/{id}/shipment/prepare
Then pole "Pobranie" zawiera kwotę total_with_tax zamówienia
And widoczny jest badge "ZA POBRANIEM"
AC-2: COD auto-fill dla zamówień Allegro (regresja)
Given zamówienie Allegro z external_payment_type_id "CASH_ON_DELIVERY"
When użytkownik wchodzi na /orders/{id}/shipment/prepare
Then pole "Pobranie" zawiera kwotę total_with_tax zamówienia (bez zmian w zachowaniu)
AC-3: Detekcja COD w widoku szczegółów zamówienia
Given zamówienie z dowolnym wariantem nazwy COD
When użytkownik przegląda szczegóły zamówienia
Then badge "Za pobraniem" wyświetla się poprawnie
</acceptance_criteria>
Task 1: Centralna metoda isCodPayment w StringHelper + normalizacja w ShopproOrderMapper src/Core/Support/StringHelper.php, src/Modules/Settings/ShopproOrderMapper.php 1. W `StringHelper` dodaj statyczną metodę `isCodPayment(string $value): bool`: - Normalizuj wartość: `strtoupper(trim($value))` - Sprawdź czy pasuje do znanego zbioru: `CASH_ON_DELIVERY`, `COD`, `POBRANIE`, `ZA POBRANIEM` - Zwróć true/false2. W `ShopproOrderMapper::mapOrderAggregate()` (linia 139):
- Po odczytaniu `payment_method` ze ścieżek `['payment_method', 'payment.method', 'payments.method']`
- Jeśli odczytana wartość jest rozpoznawana jako COD (przez `StringHelper::isCodPayment()`), znormalizuj na `'CASH_ON_DELIVERY'`
- Dzięki temu nowe importy będą miały ujednolicony format
Nie zmieniaj kontraktu ShopproOrderMapper dla pozostałych pól.
Przegląd kodu: metoda isCodPayment obsługuje min. 4 warianty; ShopproOrderMapper normalizuje COD.
AC-1 i AC-2 spełnione od strony danych — nowe importy mają ujednolicony format
Task 2: Zamiana hardcoded sprawdzeń na StringHelper::isCodPayment
resources/views/shipments/prepare.php, resources/views/orders/show.php, src/Modules/Orders/OrdersController.php
1. `resources/views/shipments/prepare.php` linia 41:
- Zamień: `strtoupper(trim(...)) === 'CASH_ON_DELIVERY'`
- Na: `\App\Core\Support\StringHelper::isCodPayment((string) ($orderRow['external_payment_type_id'] ?? ''))`
2. `src/Modules/Orders/OrdersController.php` linia 343:
- Zamień: `$isCod = $paymentType === 'CASH_ON_DELIVERY'`
- Na: `$isCod = StringHelper::isCodPayment($paymentType)`
- Upewnij się że `use App\Core\Support\StringHelper;` jest w importach
3. `resources/views/orders/show.php`:
- Znajdź wszystkie porównania z `'CASH_ON_DELIVERY'` (linie ~222, 228, 578, 678)
- Zamień na `\App\Core\Support\StringHelper::isCodPayment(...)`
- Zachowaj mapę wyświetlania nazw (array z 'CASH_ON_DELIVERY' => 'Za pobraniem' itp.) — dodaj warianty COD do mapy
Nie zmieniaj logiki wyświetlania ani formatowania — tylko warunek detekcji COD.
Grep po codebase: brak hardcoded `=== 'CASH_ON_DELIVERY'` w plikach PHP poza testami i DOCS.
Widok shipment prepare: zamówienie shopPRO z pobraniem ma auto-wypełnioną kwotę.
AC-1, AC-2, AC-3 spełnione — detekcja COD działa dla wszystkich źródeł zamówień
DO NOT CHANGE
- src/Modules/Settings/AllegroOrderImportService.php (Allegro import działa poprawnie)
- database/migrations/* (brak zmian schematu)
- src/Modules/Shipments/ShipmentController.php (logika tworzenia przesyłki nie wymaga zmian)
SCOPE LIMITS
- Nie aktualizujemy istniejących danych w bazie (istniejące zamówienia shopPRO z "cod" zachowają starą wartość — helper obsłuży je w runtime)
- Nie dodajemy migracji
- Nie zmieniamy API ani endpointów
<success_criteria>
- Wszystkie 2 taski ukończone
- Weryfikacja przeszła pomyślnie
- Brak błędów PHP na stronach przygotowania przesyłki i szczegółów zamówienia </success_criteria>