158 lines
6.1 KiB
Markdown
158 lines
6.1 KiB
Markdown
---
|
|
phase: 77-cod-amount-fix
|
|
plan: 01
|
|
type: execute
|
|
wave: 1
|
|
depends_on: []
|
|
files_modified:
|
|
- 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
|
|
autonomous: true
|
|
---
|
|
|
|
<objective>
|
|
## Goal
|
|
Naprawić automatyczne uzupełnianie kwoty pobrania (COD) przy generowaniu przesyłki dla zamówień spoza Allegro (shopPRO).
|
|
|
|
## 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_DELIVERY` przy imporcie
|
|
- Kwota pobrania auto-wypełnia się poprawnie dla zamówień z każdego źródła
|
|
</objective>
|
|
|
|
<context>
|
|
## Project Context
|
|
@.paul/PROJECT.md
|
|
@.paul/ROADMAP.md
|
|
@.paul/STATE.md
|
|
|
|
## 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
|
|
</context>
|
|
|
|
<skills>
|
|
No specialized flows configured — optional skills only.
|
|
</skills>
|
|
|
|
<acceptance_criteria>
|
|
|
|
## AC-1: COD auto-fill dla zamówień shopPRO
|
|
```gherkin
|
|
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)
|
|
```gherkin
|
|
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
|
|
```gherkin
|
|
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>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto">
|
|
<name>Task 1: Centralna metoda isCodPayment w StringHelper + normalizacja w ShopproOrderMapper</name>
|
|
<files>src/Core/Support/StringHelper.php, src/Modules/Settings/ShopproOrderMapper.php</files>
|
|
<action>
|
|
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/false
|
|
|
|
2. 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.
|
|
</action>
|
|
<verify>
|
|
Przegląd kodu: metoda isCodPayment obsługuje min. 4 warianty; ShopproOrderMapper normalizuje COD.
|
|
</verify>
|
|
<done>AC-1 i AC-2 spełnione od strony danych — nowe importy mają ujednolicony format</done>
|
|
</task>
|
|
|
|
<task type="auto">
|
|
<name>Task 2: Zamiana hardcoded sprawdzeń na StringHelper::isCodPayment</name>
|
|
<files>resources/views/shipments/prepare.php, resources/views/orders/show.php, src/Modules/Orders/OrdersController.php</files>
|
|
<action>
|
|
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.
|
|
</action>
|
|
<verify>
|
|
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ę.
|
|
</verify>
|
|
<done>AC-1, AC-2, AC-3 spełnione — detekcja COD działa dla wszystkich źródeł zamówień</done>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<boundaries>
|
|
|
|
## 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
|
|
|
|
</boundaries>
|
|
|
|
<verification>
|
|
Before declaring plan complete:
|
|
- [ ] `StringHelper::isCodPayment()` rozpoznaje: CASH_ON_DELIVERY, COD, POBRANIE, ZA POBRANIEM
|
|
- [ ] ShopproOrderMapper normalizuje COD na 'CASH_ON_DELIVERY' przy nowych importach
|
|
- [ ] Brak hardcoded `=== 'CASH_ON_DELIVERY'` w prepare.php, show.php, OrdersController.php
|
|
- [ ] Formularz przesyłki auto-wypełnia kwotę COD dla zamówień shopPRO
|
|
- [ ] Brak regresji: zamówienia Allegro nadal działają poprawnie
|
|
</verification>
|
|
|
|
<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>
|
|
|
|
<output>
|
|
After completion, create `.paul/phases/77-cod-amount-fix/77-01-SUMMARY.md`
|
|
</output>
|