update
This commit is contained in:
155
.paul/phases/76-shipment-receiver-fallback/76-01-PLAN.md
Normal file
155
.paul/phases/76-shipment-receiver-fallback/76-01-PLAN.md
Normal file
@@ -0,0 +1,155 @@
|
||||
---
|
||||
phase: 76-shipment-receiver-fallback
|
||||
plan: 01
|
||||
type: execute
|
||||
wave: 1
|
||||
depends_on: []
|
||||
files_modified:
|
||||
- src/Modules/Shipments/ShipmentController.php
|
||||
- src/Modules/Settings/ShopproOrderMapper.php
|
||||
autonomous: true
|
||||
---
|
||||
|
||||
<objective>
|
||||
## Goal
|
||||
Naprawic puste dane odbiorcy na stronie przygotowania przesylki (`/orders/{id}/shipment/prepare`) dla zamowien shopPRO, gdzie adres dostawy zawiera tylko nazwe metody dostawy bez danych adresowych.
|
||||
|
||||
## 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 `buildReceiverAddress` w ShipmentController z fallbackami na dane klienta
|
||||
- Poprawiona metoda `buildDeliveryAddress` w ShopproOrderMapper — rozroznienie label metody dostawy od nazwy odbiorcy
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
## Project Context
|
||||
@.paul/PROJECT.md
|
||||
@.paul/ROADMAP.md
|
||||
@.paul/STATE.md
|
||||
|
||||
## 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.
|
||||
</context>
|
||||
|
||||
<skills>
|
||||
No specialized flows configured
|
||||
</skills>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## AC-1: Fallback danych adresowych na klienta
|
||||
```gherkin
|
||||
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
|
||||
```gherkin
|
||||
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
|
||||
```gherkin
|
||||
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>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Rozszerzyc fallbacki w buildReceiverAddress</name>
|
||||
<files>src/Modules/Shipments/ShipmentController.php</files>
|
||||
<action>
|
||||
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 customer
|
||||
|
||||
Dodatkowo 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 !== '') {
|
||||
```
|
||||
</action>
|
||||
<verify>
|
||||
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.
|
||||
</verify>
|
||||
<done>AC-1, AC-2, AC-3 satisfied: formularz wypelnia sie danymi klienta gdy delivery nie ma danych adresowych</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
|
||||
## 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
|
||||
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
Before declaring plan complete:
|
||||
- [ ] Zamowienie 183: formularz na /orders/183/shipment/prepare wypelnia sie danymi klienta
|
||||
- [ ] Zamowienie z pelnym adresem delivery: formularz uzywa danych delivery
|
||||
- [ ] Zamowienie z pickup point (paczkomat): formularz uzywa name klienta i adres punktu
|
||||
- [ ] Brak bledow PHP
|
||||
- [ ] Docs zaktualizowane (ARCHITECTURE.md, TECH_CHANGELOG.md)
|
||||
</verification>
|
||||
|
||||
<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>
|
||||
|
||||
<output>
|
||||
After completion, create `.paul/phases/76-shipment-receiver-fallback/76-01-SUMMARY.md`
|
||||
</output>
|
||||
112
.paul/phases/76-shipment-receiver-fallback/76-01-SUMMARY.md
Normal file
112
.paul/phases/76-shipment-receiver-fallback/76-01-SUMMARY.md
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
phase: 76-shipment-receiver-fallback
|
||||
plan: 01
|
||||
subsystem: shipments
|
||||
tags: [address-fallback, shoppro, receiver-data]
|
||||
|
||||
requires:
|
||||
- phase: none
|
||||
provides: none
|
||||
provides:
|
||||
- Fallback danych odbiorcy z customer na delivery w formularzu przesylki
|
||||
affects: []
|
||||
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns: [address-field-fallback-loop]
|
||||
|
||||
key-files:
|
||||
created: []
|
||||
modified:
|
||||
- src/Modules/Shipments/ShipmentController.php
|
||||
|
||||
key-decisions:
|
||||
- "Fix w buildReceiverAddress zamiast w mapperze — problem prezentacyjny, nie importowy"
|
||||
- "Foreach loop zamiast osobnych if-ow — czystszy kod, latwiejsze rozszerzenie"
|
||||
|
||||
patterns-established:
|
||||
- "buildReceiverAddress fallback: delivery -> customer dla wszystkich pol adresowych"
|
||||
|
||||
duration: 10min
|
||||
started: 2026-04-07T00:00:00Z
|
||||
completed: 2026-04-07T00:10:00Z
|
||||
---
|
||||
|
||||
# Phase 76 Plan 01: Shipment Receiver Fallback Summary
|
||||
|
||||
**Fallback danych odbiorcy z customer address gdy delivery address nie ma danych adresowych (ulica/miasto/kod)**
|
||||
|
||||
## Performance
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Duration | ~10min |
|
||||
| Tasks | 1 completed |
|
||||
| Files modified | 3 (code + docs) |
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status | Notes |
|
||||
|-----------|--------|-------|
|
||||
| AC-1: Fallback danych adresowych na klienta | Pass | Loop fallback na 7 pol (phone, email, street_name, street_number, city, zip_code, country) |
|
||||
| AC-2: Delivery z pelnymi danymi — bez zmian | Pass | Fallback uruchamia sie tylko gdy pole jest puste |
|
||||
| AC-3: Nazwa odbiorcy — fallback gdy delivery nie ma ulicy | Pass | Warunek `!$deliveryHasAddress` pokrywa przypadek label metody dostawy |
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Formularz odbiorcy na `/orders/{id}/shipment/prepare` automatycznie wypelnia sie danymi klienta gdy delivery nie ma danych adresowych
|
||||
- Uproszczono kod — foreach loop zamiast powtarzajacych sie if-ow dla phone/email, rozszerzony o street/city/zip/country
|
||||
- Dodano warunek name fallback: gdy delivery nie ma ulicy, name tez jest pobierane z customer (pokrywa "Kurier - przedplata" jako delivery name)
|
||||
|
||||
## Files Created/Modified
|
||||
|
||||
| File | Change | Purpose |
|
||||
|------|--------|---------|
|
||||
| `src/Modules/Shipments/ShipmentController.php` | Modified | Rozszerzono `buildReceiverAddress` o fallbacki pol adresowych z customer |
|
||||
| `DOCS/ARCHITECTURE.md` | Modified | Opis nowej logiki fallbacku w sekcji przeplywu tworzenia przesylki |
|
||||
| `DOCS/TECH_CHANGELOG.md` | Modified | Wpis Phase 76 z opisem problemu i rozwiazania |
|
||||
|
||||
## Decisions Made
|
||||
|
||||
| Decision | Rationale | Impact |
|
||||
|----------|-----------|--------|
|
||||
| Fix w buildReceiverAddress, nie w mapperze | Problem jest prezentacyjny — dane w DB sa poprawne (customer ma pelne dane), mapper robi co moze z danymi API shopPRO | Brak zmian w logice importu |
|
||||
| Foreach loop zamiast osobnych if-ow | Uproszczenie kodu, latwiejsze dodanie nowych pol w przyszlosci | Zamieniono 2 osobne if-y na 1 loop pokrywajacy 7 pol |
|
||||
| ShopproOrderMapper.php bez zmian | Plan przewidywal potencjalna modyfikacje, ale fix w kontrolerze wystarczyl | Mniej zmian, mniejsze ryzyko regresji importu |
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Summary
|
||||
|
||||
| Type | Count | Impact |
|
||||
|------|-------|--------|
|
||||
| Scope reduction | 1 | Pozytywny — mniej zmian |
|
||||
|
||||
**Total impact:** Mniejszy zakres niz planowany — ShopproOrderMapper nie wymaga zmian
|
||||
|
||||
### Details
|
||||
|
||||
**1. ShopproOrderMapper.php bez zmian**
|
||||
- **Plan:** files_modified zawieral ShopproOrderMapper.php
|
||||
- **Rzeczywistosc:** Fix w buildReceiverAddress wystarczyl, mapper nie wymaga modyfikacji
|
||||
- **Impact:** Pozytywny — mniej kodu do zmiany, zero ryzyka regresji importu
|
||||
|
||||
## Issues Encountered
|
||||
|
||||
None
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
**Ready:**
|
||||
- Formularz przesylki dziala poprawnie dla zamowien shopPRO z niekompletnymi adresami delivery
|
||||
- Logika jest generyczna — dziala dla kazdego zrodla zamowien
|
||||
|
||||
**Concerns:**
|
||||
- None
|
||||
|
||||
**Blockers:**
|
||||
- None
|
||||
|
||||
---
|
||||
*Phase: 76-shipment-receiver-fallback, Plan: 01*
|
||||
*Completed: 2026-04-07*
|
||||
Reference in New Issue
Block a user