6.2 KiB
6.2 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous
| phase | plan | type | wave | depends_on | files_modified | autonomous | ||
|---|---|---|---|---|---|---|---|---|
| 76-shipment-receiver-fallback | 01 | execute | 1 |
|
true |
Purpose
Sprzedawca nie musi reczne przepisywac danych klienta do formularza przesylki — formularz automatycznie wypelnia sie danymi z adresu klienta gdy adres dostawy nie ma pelnych danych.
Output
- Poprawiona metoda
buildReceiverAddressw ShipmentController z fallbackami na dane klienta - Poprawiona metoda
buildDeliveryAddressw ShopproOrderMapper — rozroznienie label metody dostawy od nazwy odbiorcy
Source Files
@src/Modules/Shipments/ShipmentController.php @src/Modules/Settings/ShopproOrderMapper.php
Diagnostyka
Zamowienie 183 (shopPRO) — dane w order_addresses:
- customer: name="Paulina Smolinska", phone="505799865", email="paulinasmolinska2@wp.pl", street="Zamojskiego 80/46", city="Zuromin", zip="09-300"
- delivery: name="Kurier - przedplata: 0 zl", phone="505799865", email="...", street=NULL, city=NULL, zip=NULL
Problem: buildReceiverAddress uzywa delivery jako bazy, ale fallbacki dzialaja TYLKO dla name/phone/email — brak fallbacku na street/city/zip/country z customer address.
Dodatkowy problem: mapper zapisuje label metody dostawy jako name w delivery address.
<acceptance_criteria>
AC-1: Fallback danych adresowych na klienta
Given zamowienie shopPRO z adresem delivery bez street/city/zip
And adres customer ma pelne dane (name, street, city, zip)
When uzytkownik otwiera /orders/{id}/shipment/prepare
Then formularz "Adres odbiorcy" jest wypelniony danymi z adresu customer (imie, ulica, miasto, kod)
AC-2: Delivery z pelnymi danymi — bez zmian
Given zamowienie z adresem delivery zawierajacym pelne dane (street, city, zip)
When uzytkownik otwiera /orders/{id}/shipment/prepare
Then formularz uzywa danych z adresu delivery (bez zmian wzgledem obecnego zachowania)
AC-3: Nazwa odbiorcy — fallback na klienta gdy delivery name to label metody
Given zamowienie shopPRO z delivery name = "Kurier - przedplata: 0 zl"
And customer name = "Paulina Smolinska"
When uzytkownik otwiera /orders/{id}/shipment/prepare
Then pole "Imie i nazwisko" zawiera "Paulina Smolinska"
</acceptance_criteria>
Task 1: Rozszerzyc fallbacki w buildReceiverAddress src/Modules/Shipments/ShipmentController.php W metodzie `buildReceiverAddress` (linia 423) dodac fallbacki z customer na delivery dla pol adresowych: - `street_name`: jezeli w delivery jest puste/null, uzyj z customer - `street_number`: jezeli w delivery jest puste/null, uzyj z customer - `city`: jezeli w delivery jest puste/null, uzyj z customer - `zip_code`: jezeli w delivery jest puste/null, uzyj z customer - `country`: jezeli w delivery jest puste/null, uzyj z customerDodatkowo zmienic warunek fallbacku `name`:
Obecny: fallback na customer name tylko gdy pickup point LUB delivery name jest puste.
Nowy: fallback na customer name rowniez gdy delivery name wyglada jak label metody dostawy
(nie ma adresu ulicy — tzn. jezeli delivery nie ma street_name, to name tez powinno byc z customer).
Logika: jezeli delivery nie ma street_name (jest null/pusty) i customer ma name, uzyj customer name.
To pokrywa zarowno przypadek pickup point, jak i "Kurier - przedplata" bez danych adresowych.
Wzorzec fallbacku (analogicznie do istniejacych phone/email):
```php
if (trim((string) ($result['street_name'] ?? '')) === '' && trim((string) ($customer['street_name'] ?? '')) !== '') {
$result['street_name'] = $customer['street_name'];
}
```
I tak samo dla street_number, city, zip_code, country.
Dla name — zmienic warunek z:
```php
if (($this->isPickupPointDelivery($delivery) || $deliveryName === '') && $customerName !== '') {
```
na:
```php
$deliveryHasAddress = trim((string) ($delivery['street_name'] ?? '')) !== '';
if ((!$deliveryHasAddress || $this->isPickupPointDelivery($delivery) || $deliveryName === '') && $customerName !== '') {
```
Sprawdzic ze zamowienie 183 na /orders/183/shipment/prepare wyswietla dane klienta w formularzu odbiorcy.
Sprawdzic ze zamowienia z pelnym adresem delivery nadal dzialaja poprawnie.
AC-1, AC-2, AC-3 satisfied: formularz wypelnia sie danymi klienta gdy delivery nie ma danych adresowych
DO NOT CHANGE
- src/Modules/Orders/OrderImportRepository.php (logika importu)
- src/Modules/Orders/OrdersRepository.php (logika zapytan)
- resources/views/shipments/prepare.php (widok — formularz juz prawidlowo czyta z $receiver)
- database/migrations/* (schemat bazy)
SCOPE LIMITS
- Nie zmieniamy sposobu importu adresow z shopPRO (ShopproOrderMapper::buildDeliveryAddress) — problem jest w prezentacji, nie w imporcie
- Nie zmieniamy struktury tabeli order_addresses
- Fix dotyczy tylko buildReceiverAddress w ShipmentController
<success_criteria>
- Formularz odbiorcy na stronie przygotowania przesylki jest wypelniony danymi klienta gdy delivery nie ma adresu
- Istniejace zamowienia z pelnym adresem delivery dzialaja bez zmian
- Brak regresji w tworzeniu przesylek </success_criteria>