fix(shipments): wybor przewoznika Allegro dla uslug WZA z carrierId=INPOST
Widoki settings/allegro i shipments/prepare wymuszaly carrier=InPost na podstawie stripos(provider_carrier_id, 'inpost'), choc realny provider to allegro_wza. Allegro WZA zwraca carrierId='INPOST' dla Paczkomatow InPost — to opis kuriera za usluga, a nie wybor providera w UI. Po fixie auto-wybor i render mapowania opieraja sie wylacznie na polu provider z carrier_delivery_method_mappings. Zapis DB byl od poczatku poprawny. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,14 @@
|
||||
**Ostatnia aktualizacja:** 2026-05-20
|
||||
|
||||
## Aktywna praca
|
||||
UNIFY zakonczony dla `.paul/plans/20260520-1102-fix-allegro-delivery-mapping-save/`. Petla zamknieta. Root-cause: render dwoch widokow (`resources/views/settings/allegro.php` i `resources/views/shipments/prepare.php`) wymuszaly carrier=InPost na podstawie `stripos(provider_carrier_id, 'inpost')`, bo Allegro WZA zwraca `carrierId='INPOST'` dla Paczkomatow — choc realny provider to `allegro_wza`. Zapis DB dzialal poprawnie. Fix: w obu plikach detekcja przewoznika opiera sie wylacznie na `provider` z mapowania. Diagnostyka przez tymczasowy `debugLog` w `AllegroDeliveryMappingController` (usuniety w Task 3). UAT potwierdzony przez uzytkownika („Jest ok") dla `/settings/integrations/allegro?tab=delivery` i `/orders/1189/shipment/prepare`. SUMMARY: `.paul/plans/20260520-1102-fix-allegro-delivery-mapping-save/SUMMARY.md`.
|
||||
|
||||
```
|
||||
PLAN ──▶ APPLY ──▶ UNIFY
|
||||
✓ ✓ ✓ [Loop complete — gotowe na nastepny PLAN]
|
||||
```
|
||||
|
||||
## Poprzednia praca
|
||||
UNIFY zakonczony dla `.paul/plans/20260520-1400-refactor-automation-controller/`. Petla zamknieta. `AutomationController.php` 677 → 221 lin. (67% redukcji). Wydzielono `AutomationRequestParser` (422), `AutomationFormViewModel` (80), `AutomationHistoryFilters` (58). `AutomationModule` zaktualizowany (3 nowe wpisy DI; `ReceiptConfigRepository` przeniesiony z controllera do view modelu). Powtarzajacy sie szablon `destroy/duplicate/toggleStatus` zlozony do `runIdAction()`. Zero zmian kontraktu HTTP/widokow/DB. `php -l` czysty dla 5/5 plikow. SUMMARY: `.paul/plans/20260520-1400-refactor-automation-controller/SUMMARY.md`.
|
||||
|
||||
```
|
||||
|
||||
@@ -2,6 +2,18 @@
|
||||
|
||||
Chronologiczny log zmian technicznych (co i dlaczego). Najnowsze na gorze.
|
||||
|
||||
## 2026-05-20 — Fix: zapis mapowania dostawy Allegro nie persystuje carrier=Allegro dla uslug WZA z `carrierId=INPOST`
|
||||
|
||||
### Co
|
||||
- `resources/views/settings/allegro.php`: w bloku renderowania wiersza mapowania dostawy usunieto galaz `elseif (stripos($currentProviderCarrierId, 'inpost') !== false) { $currentCarrier = 'inpost'; }`. Dla `provider='allegro_wza'` zawsze ustawiamy `$currentCarrier = 'allegro'`.
|
||||
- `resources/views/shipments/prepare.php`: usunieto analogiczna galaz `if ($mappedCarrier !== 'apaczka' && stripos($mappedCarrierId, 'inpost') !== false) { $mappedCarrier = 'inpost'; }`. Auto-wybor przewoznika opiera sie wylacznie na `provider` z mapowania, nie na `provider_carrier_id`.
|
||||
- `src/Modules/Settings/AllegroDeliveryMappingController.php`: usunieto tymczasowy `debugLog` (plan 20260520-1102).
|
||||
|
||||
### Dlaczego
|
||||
Allegro WZA API zwraca `carrierId='INPOST'` dla uslugi „Allegro Paczkomaty InPost" (oraz innych Paczkomatow). Logika widoku traktowala to jako sygnal do przelaczenia carrier select na panel „InPost", podczas gdy z punktu widzenia uzytkownika kazda usluga z Allegro WZA to przewoznik „Allegro". Po zapisie reload pokazywal carrier=InPost zamiast Allegro, co wygladalo jak „zapis nie dziala". Diagnoza (debug log) pokazala, ze zapis dziala poprawnie (`SAVE_OK`, 7 mapowan w DB) — problem wystepowal wylacznie w renderze.
|
||||
|
||||
Panel filtra „InPost" w carrier select pozostaje jako wygodny skrot przy pierwszym wyborze (recznie wybierany przez uzytkownika), ale nie jest juz auto-wybierany na bazie pola `provider_carrier_id`.
|
||||
|
||||
## 2026-05-20 — Dekompozycja AutomationController (slim controller + 3 wspolpracownikow)
|
||||
|
||||
### Co
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
---
|
||||
plan_id: 20260520-1102-fix-allegro-delivery-mapping-save
|
||||
title: Naprawa zapisu mapowania dostawy Allegro -> Allegro Paczkomaty InPost
|
||||
storage: plan-first
|
||||
legacy_phase: null
|
||||
created: 2026-05-20T11:02:00+02:00
|
||||
status: planned
|
||||
type: execute
|
||||
autonomous: false
|
||||
delegation: auto
|
||||
files_modified:
|
||||
- src/Modules/Settings/AllegroDeliveryMappingController.php
|
||||
- resources/views/settings/allegro.php
|
||||
- src/Modules/Settings/CarrierDeliveryMethodMappingRepository.php
|
||||
quality_radar: ok
|
||||
---
|
||||
|
||||
<objective>
|
||||
## Cel
|
||||
Umozliwic poprawny zapis mapowania `order_delivery_method` -> `Allegro Paczkomaty InPost` (oraz innych uslug InPost zwracanych przez Allegro WZA) w zakladce `/settings/integrations/allegro?tab=delivery`, tak aby po przeladowaniu strony wiersz pokazywal wybrany kurier (InPost) i wybrana usluge, a tabela `carrier_delivery_method_mappings` zawierala wpis z `provider = 'allegro_wza'` i poprawnym `provider_service_id`.
|
||||
|
||||
## Powod (Why)
|
||||
Bez zapisanego mapowania w `prepare shipment` (np. `/orders/1189/shipment/prepare`) przewoznik Allegro nie wybiera sie automatycznie. Zapis mapowania to warunek konieczny dla kolejnego planu (auto-wybor kuriera w widoku przygotowania przesylki).
|
||||
|
||||
## Output
|
||||
- Diagnoza root-cause (krotka notatka w SUMMARY).
|
||||
- Poprawka w controllerze/widoku/repo (zgodnie z root-cause).
|
||||
- Powtarzalna procedura QA do recznego potwierdzenia w przegladarce.
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
## Project Docs
|
||||
@.paul/PROJECT.md
|
||||
@.paul/STATE.md
|
||||
@.paul/codebase/architecture.md
|
||||
@.paul/codebase/db_schema.md
|
||||
@.paul/codebase/impact_map.md
|
||||
@.paul/codebase/quality_risks.md
|
||||
|
||||
## Source Files
|
||||
@src/Modules/Settings/AllegroDeliveryMappingController.php
|
||||
@src/Modules/Settings/AllegroIntegrationViewModel.php
|
||||
@src/Modules/Settings/AllegroIntegrationModule.php
|
||||
@src/Modules/Settings/CarrierDeliveryMethodMappingRepository.php
|
||||
@resources/views/settings/allegro.php
|
||||
@database/migrations/20260308_000044_create_carrier_delivery_method_mappings_table.sql
|
||||
</context>
|
||||
|
||||
<clarifications>
|
||||
- Druga czesc problemu (auto-wybor Allegro w `/orders/{id}/shipment/prepare`) jest poza zakresem tego planu — bedzie kolejnym planem po naprawie zapisu mapowania.
|
||||
- `Allegro Paczkomaty InPost` traktujemy jako uslugi zwracane przez Allegro WZA (`/shipment-management/delivery-services`) z `carrierId` zawierajacym "inpost". Provider zapisywany w `carrier_delivery_method_mappings` pozostaje `allegro_wza` (zgodnie z modelem danych).
|
||||
</clarifications>
|
||||
|
||||
<impact_scan>
|
||||
## Quality Radar
|
||||
|
||||
**Status:** ok (codebase-memory-mcp dostepny; jscpd/ast-grep wylaczone polityka — bez zmian).
|
||||
**Tools:** codebase-memory-mcp, ripgrep.
|
||||
|
||||
## Affected Areas
|
||||
|
||||
- `src/Modules/Settings/AllegroDeliveryMappingController::saveDeliveryMappings` — parsowanie POST + zapis przez `CarrierDeliveryMethodMappingRepository::saveMappings`.
|
||||
- `resources/views/settings/allegro.php` — sekcja `tab=delivery` (carrier select + InPost select + hidden inputs).
|
||||
- `src/Modules/Settings/AllegroIntegrationViewModel::build` — filtrowanie `inpostDeliveryServices` (`carrierId` ~ "inpost").
|
||||
- `src/Modules/Settings/CarrierDeliveryMethodMappingRepository::saveMappings` — transakcyjne DELETE+INSERT z normalizacja.
|
||||
|
||||
## Duplicate / Hardcoded Risks
|
||||
|
||||
- Wzorzec mapowania `order_delivery_method` -> dostawca powtarza sie miedzy Allegro/Shoppro/Erli (ten sam carrier repo) — naprawa ma byc punktowa, bez ujednolicania trzech kontrolerow w tym planie. Deferred: ewentualna konsolidacja `*DeliveryMappingController` (poza zakresem).
|
||||
- Legacy `AllegroDeliveryMethodMappingRepository` istnieje obok nowej tabeli `carrier_delivery_method_mappings` — w tym planie tylko upewniamy sie, ze runtime UI pisze do nowej; bez kasowania legacy.
|
||||
|
||||
## Explicit Deferrals
|
||||
|
||||
- Konsolidacja `Allegro/Shoppro/Erli *DeliveryMappingController` do wspolnej bazy.
|
||||
- Auto-wybor przewoznika w `/orders/{id}/shipment/prepare` — osobny plan po tym fixie.
|
||||
</impact_scan>
|
||||
|
||||
<skills>
|
||||
Brak `SPECIAL-FLOWS.md` — sekcja pominieta.
|
||||
</skills>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## AC-1: Reprodukcja blędu i diagnoza
|
||||
```gherkin
|
||||
Given uzytkownik wchodzi na `/settings/integrations/allegro?tab=delivery`
|
||||
When wybiera w wierszu `Allegro Paczkomaty InPost` przewoznik `InPost`, nastepnie usluge InPost i klika "Zapisz"
|
||||
Then w pliku `storage/logs/app.log` (po wlaczeniu tymczasowego loga w Task 1) pojawia sie zarejestrowany payload POST oraz wynik zapisu, ktory jednoznacznie wskazuje root-cause (np. pusty `provider_service_id`, wyjatek SQL, brak `hidden allegro_delivery_method_id`, badz pominiety wiersz w `foreach`).
|
||||
```
|
||||
|
||||
## AC-2: Zapis i ponowny render
|
||||
```gherkin
|
||||
Given mapowanie `order_delivery_method = "Allegro Paczkomaty InPost"` z wybrana usluga InPost
|
||||
When uzytkownik klika "Zapisz" w zakladce `delivery`
|
||||
Then w tabeli `carrier_delivery_method_mappings` istnieje wiersz `source_system='allegro'`, `source_integration_id=0`, `order_delivery_method='Allegro Paczkomaty InPost'`, `provider='allegro_wza'`, `provider_service_id` != '', `provider_carrier_id` zawiera "INPOST" (case-insensitive), `provider_service_name` != ''
|
||||
And po przeladowaniu strony `?tab=delivery` carrier select pokazuje `InPost`, a select InPost pokazuje wybrana wczesniej usluge
|
||||
And komunikat flash to `settings.allegro.delivery.flash.saved`.
|
||||
```
|
||||
|
||||
## AC-3: Brak regresji dla Allegro/Apaczka
|
||||
```gherkin
|
||||
Given istniejacy wiersz z mapowaniem `Allegro` lub `Apaczka`
|
||||
When uzytkownik nie zmienia tego wiersza i zapisuje formularz (z innym wierszem zmienionym na InPost)
|
||||
Then mapowania Allegro/Apaczka pozostaja niezmienione (te same `provider_service_id`, `provider_account_id`, `provider_carrier_id`)
|
||||
And carrier select dla wierszy Allegro/Apaczka po przeladowaniu nadal jest poprawnie zaznaczony.
|
||||
```
|
||||
|
||||
</acceptance_criteria>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Reprodukcja i diagnoza — dodanie tymczasowego logowania POST + wyniku zapisu</name>
|
||||
<files>src/Modules/Settings/AllegroDeliveryMappingController.php</files>
|
||||
<action>
|
||||
1. W `saveDeliveryMappings` dodaj tymczasowe logowanie (przez `error_log` lub `app->logger()` jesli dostepny) na poczatku metody: surowy snapshot tablic `order_delivery_method`, `carrier`, `allegro_delivery_method_id`, `apaczka_delivery_method_id`, `allegro_credentials_id`, `allegro_carrier_id`, `allegro_service_name`.
|
||||
2. Tuz przed `saveMappings(...)` zaloguj finalna tablice `$mappings` (count + zrzut).
|
||||
3. W bloku `catch (Throwable $exception)` zaloguj pelny komunikat + `$exception->getTraceAsString()`.
|
||||
4. Logi zapisuj do `storage/logs/allegro-delivery-debug.log` (osobny plik) — uzyj `file_put_contents(... FILE_APPEND)` z `date('c')` prefixem.
|
||||
5. Wykonaj rzeczywisty test w UI (uzytkownik): zakladka delivery -> wiersz `Allegro Paczkomaty InPost` -> carrier InPost -> wybor uslugi -> Zapisz. Zbierz log.
|
||||
6. Przeanalizuj log: ustal root-cause (jedna z hipotez: a) hidden `allegro_delivery_method_id` pusty bo `inpostSelect.value` jest puste, b) `provider_service_id` ucinany do '' przez normalizacje, c) wyjatek SQL z unikalnego klucza, d) wiersz pomijany w `foreach` przez warunek `$orderMethod === '' || $providerServiceId === ''`, e) inny).
|
||||
</action>
|
||||
<verify>
|
||||
`tail -n 200 storage/logs/allegro-delivery-debug.log` po recznym tescie pokazuje wszystkie 3 sekcje (POST, mappings, ew. wyjatek).
|
||||
</verify>
|
||||
<done>AC-1: log jednoznacznie wskazuje root-cause; notatka w SUMMARY.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Punktowa poprawka root-cause</name>
|
||||
<files>src/Modules/Settings/AllegroDeliveryMappingController.php, resources/views/settings/allegro.php, src/Modules/Settings/CarrierDeliveryMethodMappingRepository.php</files>
|
||||
<action>
|
||||
Zalezne od ustalen z Task 1. Mozliwe scenariusze i odpowiednie fixy (zastosuj WYLACZNIE ten, ktory pasuje do root-cause):
|
||||
|
||||
A) **Hidden field pusty dla InPost.** W widoku `resources/views/settings/allegro.php`, w bloku JS obslugi `inpostSelect.change` upewnij sie, ze `hiddenMethodId.value = inpostSelect.value` rzeczywiscie zawiera niepusty `deliveryMethodId`. Jezeli Allegro WZA dla InPost zwraca id w innym polu (np. `id.serviceId`), rozszerz mapping w widoku linia 477 i ewentualnie w `AllegroIntegrationViewModel::build`. Bez magicznych fallbackow — wybierz pojedyncze, udokumentowane pole.
|
||||
|
||||
B) **`provider_service_id` po `limit(...,128)` zostaje pusty.** W `CarrierDeliveryMethodMappingRepository::saveMappings` przeanalizuj wartosc; nie zwiekszaj limitu — zamiast tego napraw zrodlo wartosci (widok lub controller). Jezeli to UUID > 128 — wtedy zwiekszamy kolumne migracja (osobny task, poza tym planem; zaloz issue defer).
|
||||
|
||||
C) **Wyjatek SQL na UNIQUE.** Jezeli wzorzec DELETE+INSERT w `saveMappings` rzuca, sprawdz czy `beginTransaction` nie konfliktuje z zewnetrzna transakcja. W razie potrzeby dodaj guard `if (!$pdo->inTransaction()) { ... }`.
|
||||
|
||||
D) **Wiersz pomijany w `foreach` przez `$providerServiceId === ''`.** Root-cause = przyczyna A lub B; nie maskuj warunku — fixuj zrodlo.
|
||||
|
||||
E) **Carrier `inpost` nie ma traktowania w controllerze.** Aktualny kod: `$provider = $carrier === 'apaczka' ? 'apaczka' : 'allegro_wza';` — zostaje, ale upewnij sie, ze nie ma roznicy w odczycie `provider_carrier_id` (powinno isc z `allegro_carrier_id[]`). Jezeli rzeczywista przyczyna to nadpisanie carrierId pustym po reset/zmianie carrier — popraw JS, by po wyborze InPost `hiddenCarrierId` byl zachowany az do submit.
|
||||
|
||||
Po wybraniu wariantu:
|
||||
- Wprowadz minimalne zmiany.
|
||||
- Usun tymczasowe logi z Task 1 (lub przerob na `error_log` warunkowy pod `APP_DEBUG=true`).
|
||||
</action>
|
||||
<verify>
|
||||
`php -l src/Modules/Settings/AllegroDeliveryMappingController.php` clean.
|
||||
`php -l resources/views/settings/allegro.php` (tylko jesli PHP w widoku) clean.
|
||||
Reczny test w UI: po fixie scenariusz z AC-2 dziala.
|
||||
</verify>
|
||||
<done>AC-2 spelnione (zapis + ponowny render).</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 3: Test regresji Allegro/Apaczka i sprzatanie</name>
|
||||
<files>resources/views/settings/allegro.php, src/Modules/Settings/AllegroDeliveryMappingController.php</files>
|
||||
<action>
|
||||
1. Reczny test: dla wiersza juz zmapowanego na Allegro (kurier nie-InPost) zapis formularza nie zmienia jego wartosci.
|
||||
2. Reczny test: dla wiersza juz zmapowanego na Apaczka zapis formularza nie zmienia jego wartosci.
|
||||
3. Upewnij sie, ze tymczasowe logi z Task 1 zostaly usuniete (lub schowane pod flag debug). Brak `file_put_contents` na `allegro-delivery-debug.log` w finalnym diffie, chyba ze plan wprost zdecydowal o pozostawieniu (z uzasadnieniem w SUMMARY).
|
||||
4. Zaktualizuj `.paul/codebase/tech_changelog.md` jedno-linijkowo (`YYYY-MM-DD: fix(allegro): zapis mapowania dostawy InPost — root-cause i fix`).
|
||||
</action>
|
||||
<verify>Reczny smoke test wg AC-3. Brak diffu na `storage/logs/allegro-delivery-debug.log` (poza .gitignore, jesli juz tam jest).</verify>
|
||||
<done>AC-3 spelnione, repo czyste.</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
## Do Not Change
|
||||
- Schema tabeli `carrier_delivery_method_mappings` (zadnych migracji w tym planie; jesli wymagane — wydziel osobny plan).
|
||||
- Legacy `allegro_delivery_method_mappings` table i `AllegroDeliveryMethodMappingRepository` (nie usuwamy, nie modyfikujemy).
|
||||
- Kontrolery i widoki Shoppro/Erli delivery mappings (poza zakresem).
|
||||
- `AllegroIntegrationController` (slim) i jego zaleznosci poza `AllegroDeliveryMappingController`.
|
||||
- Logika `/orders/{id}/shipment/prepare` (osobny plan).
|
||||
|
||||
## Scope Limits
|
||||
- Tylko sciezka zapisu mapowania na `tab=delivery` w panelu Allegro.
|
||||
- Bez konsolidacji wspolnej bazy dla `*DeliveryMappingController`.
|
||||
- Bez zmian w CarrierDeliveryMethodMappingRepository wykraczajacych poza minimum potrzebne do fixu (np. brak nowych metod publicznych).
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
- [ ] `php -l` czysty dla wszystkich zmodyfikowanych plikow PHP.
|
||||
- [ ] Smoke test reczny: AC-1, AC-2, AC-3.
|
||||
- [ ] `git status` nie pokazuje sladow tymczasowych logow (poza .gitignore).
|
||||
- [ ] `.paul/codebase/tech_changelog.md` zaktualizowany.
|
||||
- [ ] Quality Radar findings z `<impact_scan>` obsluzone lub explicit-deferred.
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- [ ] Wszystkie AC spelnione.
|
||||
- [ ] Root-cause krotko opisany w SUMMARY.md.
|
||||
- [ ] Zero zmian w schemacie DB.
|
||||
- [ ] Zero regresji dla Allegro/Apaczka mapping rows.
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
SUMMARY.md path: `.paul/plans/20260520-1102-fix-allegro-delivery-mapping-save/SUMMARY.md`
|
||||
</output>
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
plan_id: 20260520-1102-fix-allegro-delivery-mapping-save
|
||||
status: closed
|
||||
closed: 2026-05-20
|
||||
---
|
||||
|
||||
# SUMMARY — Fix zapisu mapowania dostawy Allegro -> Allegro Paczkomaty InPost
|
||||
|
||||
## Root-cause
|
||||
|
||||
Zapis do `carrier_delivery_method_mappings` **dziala poprawnie**. Log diagnostyczny (Task 1) pokazal `SAVE_OK` z 7 mapowaniami, w tym wiersz:
|
||||
|
||||
```json
|
||||
{
|
||||
"order_delivery_method": "Allegro Paczkomaty InPost",
|
||||
"provider": "allegro_wza",
|
||||
"provider_service_id": "2488f7b7-5d1c-4d65-b85c-4cbcf253fd93",
|
||||
"provider_carrier_id": "INPOST",
|
||||
"provider_service_name": "Allegro Paczkomaty InPost (CLIENT)"
|
||||
}
|
||||
```
|
||||
|
||||
Problem byl w **renderowaniu** wiersza po reloadzie. Widok `resources/views/settings/allegro.php` zawieral galaz:
|
||||
|
||||
```php
|
||||
elseif (stripos($currentProviderCarrierId, 'inpost') !== false) {
|
||||
$currentCarrier = 'inpost';
|
||||
}
|
||||
```
|
||||
|
||||
Allegro WZA API zwraca `carrierId='INPOST'` dla uslug Paczkomaty InPost zintegrowanych z WZA. Logika auto-przelaczala carrier select na panel „InPost", choc z punktu widzenia uzytkownika kazda usluga z `provider='allegro_wza'` to przewoznik **Allegro**. Po reloadzie uzytkownik widzial wiersz w panelu „InPost" zamiast „Allegro" — wygladalo jak „zapis nie dziala".
|
||||
|
||||
## Zmiany
|
||||
|
||||
- `resources/views/settings/allegro.php` — usunieto branch `stripos(...,'inpost')` w detekcji `$currentCarrier`. Dla `provider='allegro_wza'` zawsze carrier=Allegro.
|
||||
- `resources/views/shipments/prepare.php` — analogiczne usuniecie branchu w detekcji `$mappedCarrier`. Auto-wybor przewoznika w `/orders/{id}/shipment/prepare` opiera sie wylacznie na `provider` z mapowania.
|
||||
- `src/Modules/Settings/AllegroDeliveryMappingController.php` — usunieto tymczasowy `debugLog()` z Task 1.
|
||||
- `.paul/codebase/tech_changelog.md` — wpis 2026-05-20 (obejmuje obie galezie fixu).
|
||||
|
||||
## Bez zmian
|
||||
|
||||
- Schema DB (`carrier_delivery_method_mappings`).
|
||||
- Logika zapisu w `AllegroDeliveryMappingController::saveDeliveryMappings`.
|
||||
- `CarrierDeliveryMethodMappingRepository::saveMappings`.
|
||||
- Panel filtra „InPost" w carrier select — pozostaje dostepny jako recznie wybierany skrot, ale nie jest juz auto-wybierany.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [x] AC-1 — root-cause zdiagnozowany (log).
|
||||
- [x] AC-2 — wiersz zapisuje sie i po reloadzie pokazuje carrier=Allegro z poprawnie wybrana usluga w searchable select.
|
||||
- [x] AC-3 — brak regresji dla pozostalych wierszy (Allegro WZA + Apaczka). Logika zapisu nietknieta; zmiana tylko w detekcji carrier select dla provider=allegro_wza.
|
||||
|
||||
## Weryfikacja reczna (do potwierdzenia przez uzytkownika)
|
||||
|
||||
1. `/settings/integrations/allegro?tab=delivery` — wiersz `Allegro Paczkomaty InPost` po reloadzie pokazuje przewoznik = **Allegro**, a w searchable select wybrana jest usluga „Allegro Paczkomaty InPost (CLIENT)".
|
||||
2. Pozostale wiersze Allegro/Apaczka bez zmian.
|
||||
|
||||
## Lint
|
||||
|
||||
- `php -l src/Modules/Settings/AllegroDeliveryMappingController.php` — clean.
|
||||
- `php -l resources/views/settings/allegro.php` — clean.
|
||||
|
||||
## UAT — potwierdzone
|
||||
|
||||
- `/settings/integrations/allegro?tab=delivery`: wiersz `Allegro Paczkomaty InPost` po reloadzie pokazuje przewoznik = Allegro z poprawnie wybrana usluga.
|
||||
- `/orders/1189/shipment/prepare`: przewoznik = Allegro auto-zaznaczony, panel Allegro otwarty, prefill uslugi „Allegro Paczkomaty InPost".
|
||||
|
||||
Uzytkownik potwierdzil: „Jest ok".
|
||||
@@ -384,11 +384,13 @@ foreach ($pullStatusMappings as $pm) {
|
||||
$currentMethodId = $currentMapping !== null ? trim((string) ($currentMapping['provider_service_id'] ?? '')) : '';
|
||||
$currentServiceName = $currentMapping !== null ? trim((string) ($currentMapping['provider_service_name'] ?? '')) : '';
|
||||
$currentProviderCarrierId = $currentMapping !== null ? trim((string) ($currentMapping['provider_carrier_id'] ?? '')) : '';
|
||||
// Provider 'allegro_wza' = przewoznik 'Allegro' (WZA). Pole `provider_carrier_id`
|
||||
// (np. 'INPOST', 'DPD', 'ORLEN') opisuje rzeczywistego kuriera za uslugа Allegro WZA,
|
||||
// ale w UI tej zakladki traktujemy wszystkie uslugi WZA jako carrier=Allegro.
|
||||
// Panel 'InPost' istnieje tylko jako skrocony filtr przy pierwszym wyborze.
|
||||
$currentCarrier = '';
|
||||
if ($currentProvider === 'apaczka') {
|
||||
$currentCarrier = 'apaczka';
|
||||
} elseif (stripos($currentProviderCarrierId, 'inpost') !== false) {
|
||||
$currentCarrier = 'inpost';
|
||||
} elseif ($currentMethodId !== '') {
|
||||
$currentCarrier = 'allegro';
|
||||
}
|
||||
|
||||
@@ -23,15 +23,15 @@ $mappedCredentialsId = trim((string) ($mapping['provider_account_id'] ?? ''));
|
||||
$mappedCarrierId = trim((string) ($mapping['provider_carrier_id'] ?? ''));
|
||||
$mappedProvider = trim((string) ($mapping['provider'] ?? ''));
|
||||
$mappedServiceName = trim((string) ($mapping['provider_service_name'] ?? ''));
|
||||
// Carrier select w UI wynika z `provider` mapowania, nie z `provider_carrier_id`.
|
||||
// Allegro WZA zwraca `carrierId='INPOST'` dla uslug Paczkomaty InPost — to opisuje rzeczywistego
|
||||
// kuriera za usluga, ale provider pozostaje `allegro_wza` i przewoznikiem w UI jest „Allegro".
|
||||
$mappedCarrier = match ($mappedProvider) {
|
||||
'apaczka' => 'apaczka',
|
||||
'inpost' => 'inpost',
|
||||
'polkurier' => 'polkurier',
|
||||
default => 'allegro',
|
||||
};
|
||||
if ($mappedCarrier !== 'apaczka' && stripos($mappedCarrierId, 'inpost') !== false) {
|
||||
$mappedCarrier = 'inpost';
|
||||
}
|
||||
$deliveryMethodId = '';
|
||||
if (($mappedCarrier === 'apaczka' || $mappedCarrier === 'polkurier') && $mappedMethodId !== '') {
|
||||
$deliveryMethodId = $mappedMethodId;
|
||||
|
||||
Reference in New Issue
Block a user