Files
orderPRO/.paul/changelog/2026-05-14.md
Jacek Pyziak c78ac335ee feat(128): polkurier shipment service + tracking + UI prepare
PolkurierApiClient rozszerzony do pelnego kontraktu (7 metod):
createShipment/getLabel/getStatus/cancelOrder/getAvailableCarriers/
getInpostParcelMachines/getCourierPoints. Wspolny call() parsuje
envelope {status, response}. Kontrakt zweryfikowany na oficjalnej
dokumentacji PDF v1.11.

PolkurierShipmentService (implements ShipmentProviderInterface)
orchestruje pelen flow: normalizeShipmentType (lowercase), split
ulicy, build recipient/sender/pickup, COD z bank account z
company_settings, extractOrderNumber/extractTrackingNumber
priorytetujace SDK Order entity (number, waybills[0].number).

PolkurierTrackingService (implements ShipmentTrackingInterface)
mapuje statusy O/P/A/WP/D/Z/W przez delivery_status_mappings.

UI panel polkurier w prepare.php z dynamiczna lista uslug z
available_carriers. Bez dedykowanego selektora punktu — operator
wpisuje receiver_point_id w istniejace pole w sekcji Adres odbiorcy.

Migracja 20260514_000115 seedujaca 7 wpisow delivery_status_mappings
z oficjalnej tabeli ORDER_STATUS (O/P/A/WP/D/Z/W).

Live test #114/#115 zakonczony sukcesem po 4 iteracjach
(ReferenceError -> uppercase shipmenttype -> orderno parsing ->
A4/A6 etykieta). Rozmiar etykiety A4/A6 sterowany w panelu klienta
polkurier.pl, NIE przez API.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 12:56:36 +02:00

5.4 KiB

2026-05-14

Co zrobiono

  • [Phase 127, Plan 01] polkurier.pl Integration Foundation — pojedyncza globalna konfiguracja brokera kurierskiego polkurier (login + Token API zaszyfrowany przez IntegrationSecretCipher), karta w hubie integracji obok Apaczki, realny test polaczenia przez apimetod=test_auth_api. Zweryfikowane na zywym koncie operatora (Autoryzacja: 1).
  • Task 1: Migracja DDL (polkurier_integration_settings + seed integrations.type='polkurier') + PolkurierIntegrationRepository (single-instance, mirror HostedSMS/SMSPLANET).
  • Task 2: PolkurierApiClient (POST do https://api.polkurier.pl/, JSON envelope {authorization, apimetod, data}) + PolkurierIntegrationController + widok formularza + 3 routy + i18n.
  • Task 3: Wpiecie polkuriera do IntegrationsHubController (buildPolkurierRow(), kolejnosc: po Apaczce) + aktualizacja .paul/codebase/{db_schema,architecture,tech_changelog}.md.
  • Auto-fix (live debugging): status='success' zamiast 'ok' (ResponseStatus z SDK), Content-Type: application/json bez charset suffix (polkurier strict), parser bledu z pola response envelope'a.
  • Scope deviation vs PLAN: kolumna login dodana (API wymaga login+token), kolumna environment pominieta (polkurier nie ma sandbox).

Zmienione pliki

  • database/migrations/20260514_000114_create_polkurier_integration_settings.sql
  • src/Modules/Settings/PolkurierIntegrationRepository.php
  • src/Modules/Settings/PolkurierApiClient.php
  • src/Modules/Settings/PolkurierIntegrationController.php
  • resources/views/settings/polkurier.php
  • routes/web.php
  • src/Modules/Settings/IntegrationsHubController.php
  • resources/lang/pl.php
  • .paul/codebase/db_schema.md
  • .paul/codebase/architecture.md
  • .paul/codebase/tech_changelog.md
  • .paul/STATE.md
  • .paul/ROADMAP.md
  • .paul/phases/127-polkurier-integration-foundation/127-01-PLAN.md
  • .paul/phases/127-polkurier-integration-foundation/127-01-SUMMARY.md

Co zrobiono (cd.)

  • [Phase 128, Plan 01] polkurier ShipmentService + TrackingService + UI prepare panel + delivery_status_mappings seed. polkurier zarejestrowany jako 4. provider w ShipmentProviderRegistry (obok allegro_wza/apaczka/inpost). Operator tworzy paczki z /orders/{id}/shipment/prepare, etykieta A6 generowana, cron tracking gotowy do mapowania O/P/A/WP/D/Z/W → created/confirmed/cancelled/in_transit/delivered/returned/problem.
  • Task 1: PolkurierApiClient rozszerzony z stubów Phase 127 do 7 metod (createShipment/getLabel/getStatus/cancelOrder/getAvailableCarriers/getInpostParcelMachines/getCourierPoints). Wspólny prywatny call($apimetod, $data, $login, $token) parsuje envelope {status, response}. Kontrakt zweryfikowany na oficjalnej dokumentacji PDF v1.11 (pobrana i zachowana w .paul/phases/128-polkurier-shipment-service/polkurier-api-docs.txt).
  • Task 2: PolkurierShipmentService (~520 LOC, implements ShipmentProviderInterface) + PolkurierTrackingService (~110 LOC, implements ShipmentTrackingInterface). normalizeShipmentType() mapuje legacy PACKAGE/BOX/PARCEL na lowercase zbiór polkuriera. extractOrderNumber/extractTrackingNumber priorytetują SDK Order entity (number, waybills[0].number).
  • Task 3: Wiring routes/web.php + CronHandlerFactory + ShipmentController.prepare/create (rozszerzony o service_code/pickup_* w form data). UI panel "polkurier" w prepare.php z dynamiczną listą usług + JS toggle. DeliveryStatus::trackingUrl fallback dla provider='polkurier'.
  • Task 4 (checkpoint live test #114/#115): 4 iteracje — ReferenceError w JS clearHiddenFields → uppercase shipmenttype → parsing number vs orderno → A4 vs A6 etykieta. Każda iteracja autopoprawiona w tej samej sesji APPLY.
  • Task 5: Migracja 20260514_000115_seed_polkurier_delivery_status_mappings.sql z 7 wpisami z oficjalnej tabeli ORDER_STATUS PDF v1.11 (O/P/A/WP/D/Z/W). Idempotentna ON DUPLICATE KEY UPDATE.
  • Task 6: Aktualizacja .paul/codebase/{architecture,db_schema,tech_changelog}.md z sekcją Phase 128.
  • Scope removal vs PLAN: UI selektor punktów paczkomatowych usunięty (operator zgłosił duplikat z polem "Punkt odbioru" w sekcji Adres odbiorcy). lookupPickupPoints + AJAX route + JS handler usunięte. getInpostParcelMachines/getCourierPoints zostawione jako stuby na przyszłą fazę paczkomatów UI.
  • Decyzja: rozmiar etykiety A4/A6 sterowany w panelu klienta polkurier.pl, NIE przez API (zweryfikowane w PDF v1.11). Operator zmienia preferencje konta jednorazowo.

Zmienione pliki (cd.)

  • src/Modules/Settings/PolkurierApiClient.php (rozszerzenie z stubów do 7 metod)
  • src/Modules/Shipments/PolkurierShipmentService.php (nowy plik)
  • src/Modules/Shipments/PolkurierTrackingService.php (nowy plik)
  • src/Modules/Shipments/DeliveryStatus.php (fallback URL polkurier)
  • src/Modules/Shipments/ShipmentController.php (polkurierServices + service_code/pickup_*)
  • src/Modules/Cron/CronHandlerFactory.php (rejestracja PolkurierTrackingService)
  • routes/web.php (rejestracja PolkurierShipmentService w registry)
  • resources/views/shipments/prepare.php (panel polkurier + JS)
  • database/migrations/20260514_000115_seed_polkurier_delivery_status_mappings.sql (nowy plik)
  • .paul/phases/128-polkurier-shipment-service/128-01-PLAN.md (nowy plik)
  • .paul/phases/128-polkurier-shipment-service/128-01-SUMMARY.md (nowy plik)
  • .paul/phases/128-polkurier-shipment-service/polkurier-api-docs.txt (nowy plik — referencyjna doca z PDF v1.11)