Files
orderPRO/DOCS/TECH_CHANGELOG.md
Jacek Pyziak 1b5e403c31 Add Allegro shipment service and related components
- Implement AllegroShipmentService for managing shipment creation and status checks.
- Create ShipmentController to handle shipment preparation and label downloading.
- Introduce ShipmentPackageRepository for database interactions related to shipment packages.
- Add methods for retrieving delivery services, creating shipments, checking creation status, and downloading labels.
- Implement address validation and token management for Allegro API integration.
2026-03-06 01:06:59 +01:00

21 KiB

Tech Changelog

2026-03-06

  • Rozszerzono zakladke Formy dostawy o wybor przewoznika (Allegro / InPost) per wiersz:
    • nowa kolumna carrier w tabeli allegro_delivery_method_mappings,
    • select przewoznika determinuje dostepne uslugi (Allegro z API, InPost statyczna lista),
    • JS przelacza panele uslug w zaleznosci od wybranego przewoznika.
  • Migracja 20260306_000036_add_carrier_to_delivery_method_mappings.sql.

2026-03-05

  • Dodano nowa zakladke Ustawienia > Integracja InPost:
    • route GET /settings/integrations/inpost i POST /settings/integrations/inpost/save,
    • widok konfiguracji z polami: token API (szyfrowany), ID organizacji, srodowisko (sandbox/production),
    • domyslny sposob nadania (POP/paczkomat/kurier), punkt nadania,
    • domyslny rozmiar paczki (A/B/C), wymiary przesylek kurierskich,
    • typ etykiety (PDF/ZPL/EPL), paczka weekendowa, auto-ubezpieczenie, multi-paczki.
  • Dodano klasy:
    • App\Modules\Settings\InpostIntegrationController,
    • App\Modules\Settings\InpostIntegrationRepository (szyfrowanie AES-256-CBC + deszyfrowanie tokenu).
  • Dodano migracje 20260305_000035_create_inpost_integration_settings_table.sql.
  • Rozszerzono nawigacje Ustawienia o link Integracja InPost.
  • Import Allegro pobiera przesylki z dedykowanego endpointu GET /order/checkout-forms/{id}/shipments zamiast szukac ich w payloadzie checkout form (naprawa zerowej liczby przesylek).
  • Dodano metode AllegroApiClient::getCheckoutFormShipments(...).
  • Usunieto duplikat ID zamowienia Allegro w naglowku szczegolow zamowienia (wyswietlane bylo source_order_id i external_order_id z ta sama wartoscia).
  • Dodano nazwe integracji (np. "Allegro") przed ID zamowienia w naglowku szczegolow.
  • Dodano nowa zakladke Ustawienia > Integracja Apaczka:
    • route GET /settings/integrations/apaczka i POST /settings/integrations/apaczka/save,
    • widok konfiguracji z polem klucza API (szyfrowany AES-256-CBC jak w integracji Allegro).
  • Dodano klasy:
    • App\Modules\Settings\ApaczkaIntegrationController,
    • App\Modules\Settings\ApaczkaIntegrationRepository.
  • Dodano migracje 20260305_000029_create_apaczka_integration_settings_table.sql:
    • tabela apaczka_integration_settings na konfiguracje klucza API (zaszyfrowany).
  • Rozszerzono nawigacje Ustawienia o link Integracja Apaczka.
  • Dodano reczna zmiane statusu zamowienia z widoku szczegolow:
    • nowa route POST /orders/{id}/status,
    • nowa metoda OrdersController::updateStatus(...),
    • dropdown ze wszystkimi aktywnymi statusami (pogrupowane wg grup) w naglowku szczegolow zamowienia,
    • zmiana rejestrowana w order_status_history i order_activity_log (actor_type: user),
    • flash messages (sukces/blad) po redirect,
    • bez zmian schematu.
  • Import zamowienia z Allegro (reczny i auto-sync) rejestruje zdarzenie import w order_activity_log:
    • AllegroOrderImportService rozszerzony o zaleznosc OrdersRepository,
    • po kazdym upsert zamowienia wpisywany jest log z informacja o nowym imporcie lub re-imporcie,
    • actor_type: import, actor_name: Allegro,
    • bez zmian schematu.
  • Dodano uniwersalny log aktywnosci zamowien:
    • nowa tabela order_activity_log (migracja 20260305_000030_create_order_activity_log_table.sql),
    • nowe metody w OrdersRepository: recordActivity(), recordStatusChange(), updateOrderStatus(),
    • zakladka Historia zmian w szczegolow zamowienia wyswietla tabele z logiem aktywnosci (data, typ, opis, wykonawca),
    • typy zdarzen: zmiana statusu, platnosc, faktura, przesylka, wiadomosc, dokument, import, notatka,
    • kolorowe badge'e typow zdarzen,
    • historia statusow w zakladce Szczegoly pokazuje teraz nazwy statusow zamiast surowych kodow.

2026-03-04

  • Poprawiono kolumne Data zamowienia na liscie zamowien:
    • wartosc jest liczona fallbackiem orders.ordered_at -> orders.source_created_at -> orders.source_updated_at -> orders.fetched_at,
    • domyslne sortowanie listy i filtry zakresu dat korzystaja z tej samej daty efektywnej, co eliminuje puste wartosci przy rekordach bez ordered_at.
  • Import zamowienia Allegro zapisuje teraz forme wysylki:
    • delivery.method.name (fallback delivery.method.id) trafia do orders.external_carrier_id,
    • techniczne delivery.method.id trafia do orders.external_carrier_account_id.
  • Dopracowano mapowanie dostawy dla zamowien Allegro:
    • dla dostawy do punktu odbioru adres Dane wysylki jest budowany z delivery.pickupPoint (nazwa punktu + adres punktu),
    • terminy z delivery.time.dispatch sa zapisywane do orders.send_date_min / orders.send_date_max.
  • Rozszerzono UI Ustawienia > Integracje > Allegro o zakladke Ustawienia:
    • dodano opcje konfiguracji interwalu pobierania zamowien (minuty),
    • nowy endpoint zapisu POST /settings/integrations/allegro/settings/save,
    • zapis aktualizuje harmonogram joba allegro_orders_import w cron_schedules.
  • Rozszerzono zakladke Ustawienia integracji Allegro:
    • dodano kierunek synchronizacji statusow (Allegro -> orderPRO, orderPRO -> Allegro),
    • dodano interwal synchronizacji statusow (minuty),
    • zapis do app_settings (allegro_status_sync_direction, allegro_status_sync_interval_minutes) pod przyszly cron synchronizacji statusow.
  • Dodano cron synchronizacji statusow Allegro:
    • nowy job type allegro_status_sync z harmonogramem domyslnym co 900s,
    • nowy handler App\Modules\Cron\AllegroStatusSyncHandler,
    • nowy serwis App\Modules\Settings\AllegroStatusSyncService (obsluga kierunku sync z ustawien integracji).
  • Dodano migracje 20260304_000028_add_allegro_status_sync_schedule.sql:
    • seed cron_schedules dla allegro_status_sync,
    • seed domyslnych ustawien app_settings dla kierunku i interwalu synchronizacji statusow.
  • Dodano automatyczny import zamowien Allegro przez cron:
    • nowy job type allegro_orders_import z harmonogramem co 300s (priorytet 20, max_attempts 3),
    • nowy handler App\Modules\Cron\AllegroOrdersImportHandler,
    • nowy serwis App\Modules\Settings\AllegroOrdersSyncService (stronicowanie checkout forms, deduplikacja/idempotentny import, limity batcha),
    • nowy repo App\Modules\Settings\AllegroOrderSyncStateRepository utrzymujacy kursor i status wykonania w integration_order_sync_state.
  • Podlaczono handler allegro_orders_import do runnera crona:
    • bin/cron.php (CLI worker),
    • App\Core\Application::maybeRunCronOnWeb (tryb cron-on-web).
  • Dodano migracje 20260304_000027_add_allegro_orders_import_schedule.sql:
    • seed harmonogramu allegro_orders_import,
    • uzupelnienie kompatybilnosci tabeli integration_order_sync_state o kolumny kursora sync.
  • Dodano obsluge miniatur produktow dla importu Allegro i widokow zamowien:
    • import pojedynczego zamowienia Allegro zapisuje URL obrazka pozycji (lineItems.offer.image*) do order_items.media_url,
    • lista i szczegoly zamowienia rozwiazuja miniature priorytetowo: order_items.media_url -> glowny obraz powiazanego produktu orderPRO (product_channel_map + sales_channels=allegro + product_images).
    • dodano bezpieczny fallback zgodnosci: jesli wymagane tabele/kolumny mapowania produktu nie istnieja w aktualnym schemacie DB, UI korzysta tylko z order_items.media_url (bez bledu 404 na szczegolach zamowienia).
  • Rozszerzono import pojedynczego zamowienia Allegro o fallback pobrania obrazka po offerId:
    • gdy checkout-form lineItem nie zawiera obrazka, importer pobiera dane oferty przez GET /sale/product-offers/{offerId} i zapisuje URL miniatury do order_items.media_url,
    • obslugiwane sa rowniez URL w formacie //... (normalizacja do https://...).
  • Dodano diagnostyke importu obrazkow Allegro:
    • po imporcie pojedynczego zamowienia UI pokazuje podsumowanie obrazki: X/Y i ostrzezenie z przyczynami brakow,
    • diagnostyka rozroznia m.in. brak obrazka w checkout-form, brak obrazka w API oferty, brak offerId oraz bledy HTTP API ofert (np. 403).
  • Rozszerzono zakres scope zadany w OAuth Allegro:
    • autoryzacja prosi teraz o allegro:api:orders:read oraz allegro:api:sale:offers:read,
    • po zmianie scope wymagane jest ponowne polaczenie OAuth (Polacz ponownie), aby nowe tokeny mialy dostep do API ofert.
  • Poprawiono odczyt statusow zamowien w UI listy/szczegolow:
    • status efektywny jest liczony dynamicznie z mapowaniem allegro_order_status_mappings (nie tylko przy imporcie),
    • panel statusow, filtr statusu i etykieta statusu w tabeli korzystaja z tego samego statusu po mapowaniu.
  • UI mapowania statusow Allegro zmieniono na zapis zbiorczy:
    • jeden przycisk Zapisz mapowania dla wszystkich selectow w tabeli,
    • nowy endpoint POST /settings/integrations/allegro/statuses/save-bulk.
  • Dodano automatyczne pobieranie statusow Allegro do mapowania:
    • endpoint POST /settings/integrations/allegro/statuses/sync,
    • przycisk Pobierz statusy z Allegro w zakladce Ustawienia > Integracje > Allegro > Statusy,
    • nowa klasa App\Modules\Settings\AllegroStatusDiscoveryService (statusy z API checkout-forms).
  • Dodano migracje 20260304_000026_make_allegro_status_mapping_nullable.sql:
    • allegro_order_status_mappings.orderpro_status_code jest teraz nullable (statusy moga byc najpierw odkryte, potem mapowane).
  • Zmieniono podejscie do statusow Allegro:
    • usunieto fallbackowe tlumaczenia statusow z kodu listy zamowien,
    • dodano zakladke Statusy w Ustawienia > Integracje > Allegro z recznym mapowaniem status Allegro -> status orderPRO.
  • Dodano migracje 20260304_000025_create_allegro_order_status_mappings_table.sql.
  • Dodano App\Modules\Settings\AllegroStatusMappingRepository.
  • Import pojedynczego zamowienia Allegro mapuje teraz status przez allegro_order_status_mappings (jesli istnieje wpis), zamiast fallbackowej translacji.
  • Poprawiono prezentacje statusow na liscie zamowien:
    • filtr statusu pokazuje etykiety biznesowe zamiast surowych kodow (external_status_id),
    • kody bez mapowania sa tylko formatowane technicznie do czytelnej postaci (do_odbioru -> Do odbioru).
  • Dodano reczny import pojedynczego zamowienia Allegro z poziomu Ustawienia > Integracje > Allegro:
    • endpoint POST /settings/integrations/allegro/import-single,
    • formularz z polem checkout_form_id w widoku integracji Allegro.
  • Dodano klasy importu Allegro:
    • App\Modules\Settings\AllegroApiClient (request GET /order/checkout-forms/{id}),
    • App\Modules\Settings\AllegroOrderImportService (refresh tokenu + mapowanie payloadu),
    • App\Modules\Orders\OrderImportRepository (upsert aggregate do tabel zamowien).
  • Import pojedynczego zamowienia dziala idempotentnie po kluczu biznesowym (source=allegro, source_order_id) i nadpisuje kolekcje 1:N (adresy/pozycje/platnosci/wysylki/notatki/historia) aktualnym snapshotem z API.
  • Dodano nowy modul crona oparty o tabele cron_schedules + cron_jobs:
    • App\Modules\Cron\CronRepository,
    • App\Modules\Cron\CronRunner.
  • Dodano pierwszy handler crona:
    • App\Modules\Cron\AllegroTokenRefreshHandler dla joba allegro_token_refresh.
  • Dodano odswiezanie tokenu OAuth w App\Modules\Settings\AllegroOAuthClient::refreshAccessToken(...).
  • Rozszerzono App\Modules\Settings\AllegroIntegrationRepository o odczyt danych refresh tokenu.
  • Odtworzono CLI worker bin/cron.php (uruchomienie jobow wg harmonogramu i priorytetu).
  • Dodano migracje 20260304_000024_add_allegro_token_refresh_schedule.sql:
    • harmonogram allegro_token_refresh (interval_seconds=3600, priority=10, max_attempts=3, enabled=1).
  • Dodano zakladke Ustawienia > Cron:
    • GET /settings/cron,
    • POST /settings/cron,
    • kontrola opcji cron_run_on_web i cron_web_limit,
    • podglad harmonogramow i kolejki/historii jobow.
  • Podlaczono wykonanie crona podczas requestow HTTP:
    • App\Core\Application::maybeRunCronOnWeb(Request) jest uruchamiane w Application::run(),
    • aktywowane ustawieniem cron_run_on_web i ograniczane lockiem DB + throttlingiem sesyjnym.
  • Dodano nowa zakladke Ustawienia > Integracje > Allegro:
    • route i widok konfiguracji,
    • sekcja z gotowym redirect_uri do rejestracji aplikacji Allegro.
  • Dodano endpointy Allegro OAuth:
    • GET /settings/integrations/allegro,
    • POST /settings/integrations/allegro/save,
    • POST /settings/integrations/allegro/oauth/start,
    • GET /settings/integrations/allegro/oauth/callback.
  • Dodano klasy:
    • App\Modules\Settings\AllegroIntegrationController,
    • App\Modules\Settings\AllegroIntegrationRepository,
    • App\Modules\Settings\AllegroOAuthClient.
  • Dodano migracje 20260304_000023_create_allegro_integration_settings_table.sql:
    • tabela allegro_integration_settings na konfiguracje OAuth2 i tokeny (client_secret, access_token, refresh_token trzymane jako zaszyfrowane).
  • Dodano walidacje i obsluge flow Authorization Code:
    • generowanie state i walidacja callbacku,
    • wymiana code na tokeny przez endpoint tokenowy Allegro (sandbox/production).
  • Rozszerzono nawigacje Ustawienia o link Integracje Allegro.
  • Dodano style SCSS dla bloku prezentacji callback URL i przebudowano asset CSS (public/assets/css/app.css).

2026-03-02

  • Dodano zakladke Ustawienia > Statusy do zarzadzania:
    • grupami statusow (z kolorem na poziomie grupy),
    • statusami przypisanymi do grup.
  • Dodano migracje 20260302_000022_create_order_status_groups_and_statuses_tables.sql:
    • tabela order_status_groups,
    • tabela order_statuses z FK order_statuses_group_fk i kasowaniem kaskadowym.
  • Dodano App\Modules\Settings\OrderStatusRepository (CRUD grup/statusow i walidacja unikalnosci kodow).
  • Rozszerzono App\Modules\Settings\SettingsController o endpointy:
    • statuses,
    • createStatusGroup, updateStatusGroup, deleteStatusGroup,
    • createStatus, updateStatus, deleteStatus.
  • Rozszerzono routing o trasy /settings/statuses* i /settings/status-groups*.
  • Sidebar ustawien ma nowy link Statusy.
  • Dodano widok resources/views/settings/statuses.php oraz style SCSS dla formularzy/akcji tego widoku.
  • Potwierdzenia usuwania w nowym widoku realizowane sa przez window.OrderProAlerts.confirm(...).
  • Przebudowano UI Ustawienia > Statusy:
    • 2 taby (Statusy, Grupy statusow),
    • sortowanie realizowane przez drag-and-drop z automatycznym zapisem kolejnosci po upuszczeniu.
  • Skondensowano UI zakladki Ustawienia > Statusy:
    • elementy listy statusow i grup maja bardziej kompaktowy, jednoliniowy uklad,
    • zmniejszono paddingi/gapy i wysokosci kontrolek, aby zwiekszyc ilosc danych widocznych bez scrolla.
  • Wprowadzono globalna preferencje kompaktowego UI w AGENTS.md.
  • Poprawiono generowanie code dla statusow/grup: polskie znaki sa transliterowane do ASCII (np. Nieopłacone -> nieoplacone), zamiast zamiany na _.
  • Dodano skrypt serwisowy bin/fix_status_codes.php:
    • przelicza kody grup/statusow na podstawie aktualnych nazw z transliteracja PL->ASCII,
    • zapewnia unikalnosc kodow (_2, _3 przy konfliktach),
    • wspiera --dry-run i --use-remote.
  • Wykonano naprawe kodow na bazie zdalnej (--use-remote): zaktualizowano 2 grupy i 1 status.
  • Przygotowano draft generycznego schematu tabel zamowien (Apilo tylko jako przyklad pol API):
    • dokumentacja: DOCS/ORDERS_SCHEMA_DRAFT.md,
    • draft SQL (nieuruchamiany automatycznie): database/drafts/20260302_orders_schema_v1.sql.
  • Wdrozono generyczny schema zamowien na bazie docelowej przez bin/deploy_and_seed_orders.php.
  • Zasiano dane testowe:
    • orders: 30,
    • order_items: 90,
    • order_status_history: 123,
    • pozostale kolekcje (adresy/platnosci/wysylki/dokumenty/notatki/tagi) proporcjonalnie.
  • Dodano endpointy zapisu kolejnosci:
    • POST /settings/status-groups/reorder,
    • POST /settings/statuses/reorder.
  • Zmieniono obsluge pola code:
    • code jest automatycznie generowany przy tworzeniu z nazwy,
    • po utworzeniu jest tylko do odczytu i nie podlega edycji z formularza.
  • Reset projektu do trybu users-only.
  • Zarchiwizowano moduly poza Auth i Users do archive/2026-03-02_users-only-reset/.
  • Uproszczono routing i layout do obslugi logowania i zarzadzania uzytkownikami.
  • Ustalono nowy standard dokumentacji technicznej w plikach root:
    • DB_SCHEMA.md
    • ARCHITECTURE.md
    • TECH_CHANGELOG.md
  • Przywrocono sekcje Ustawienia w nawigacji jako grupe z podkategoriami:
    • Uzytkownicy (/users)
    • Baza danych (/settings/database)
  • Dodano modul App\Modules\Settings z kontrolerem SettingsController (metody database, migrate).
  • Przywrocono reczne uruchamianie migracji z UI:
    • GET /settings/database (status migracji + lista pending plikow),
    • POST /settings/database/migrate (wykonanie pending migracji + log ostatniego uruchomienia).
  • Zmieniono tlumaczenie settings.database.title na Baza danych oraz dodano navigation.database.
  • Poprawiono redirect po logowaniu (AuthController): /dashboard -> /settings/users.
  • Usunieto wewnetrzny pasek zakladek (settings-nav) z podstron ustawien.
  • Podstrona uzytkownikow jest adresowana jako GET/POST /settings/users (z zachowaniem tras kompatybilnosci /users).
  • Usunieto z podstron ustawien blok naglowkowy Ustawienia + opis, aby zwiekszyc obszar roboczy.
  • Rozszerzono bin/deploy_and_seed_orders.php o parametr --profile=default|realistic.
  • Dodano realistyczny profil seedowania:
    • wazone losowanie statusow i metod platnosci,
    • spojne mapowanie external_status_id -> payment_status i total_paid,
    • bardziej realne reguly tworzenia wpisow order_payments, order_shipments, order_documents,
    • historia statusow oparta na logicznych sciezkach przejsc (zamiast losowych skokow).
  • Wykonano ponowne wdrozenie draftu i seed z profilem realistycznym:
    • komenda: C:\xampp\php\php.exe bin/deploy_and_seed_orders.php --use-remote --count=30 --profile=realistic,
    • wynik: orders=30, order_items=94, order_status_history=81.
  • Dodano glowna sekcje panelu Zamowienia z podzakladka Lista zamowien.
  • Wdrozone endpointy:
    • GET /orders (redirect do /orders/list),
    • GET /orders/list (widok listy).
  • Dodano modul aplikacyjny:
    • App\Modules\Orders\OrdersController,
    • App\Modules\Orders\OrdersRepository.
  • Widok listy zamowien opiera sie o aktualna baze (orders, order_addresses, order_items, order_shipments, order_documents) i udostepnia:
    • filtry (fraza, zrodlo, status, status platnosci, zakres dat),
    • sortowanie i paginacje,
    • kompaktowe komorki (referencje, klient, status+platnosc, pozycje, kwoty, wysylka, daty),
    • skrócone statystyki (wszystkie, oplacone, wyslane).
  • Rozszerzono liste zamowien o podglad produktow w zamowieniu:
    • nazwa produktu,
    • miniatura (z order_items.media_url, fallback bez obrazu),
    • ilosc sztuk per pozycja,
    • licznik dodatkowych pozycji poza limitem podgladu.
  • Miniatury produktow na liscie zamowien zostaly powiekszone o 100% (uklad bardziej czytelny).
  • Dodano modal podgladu zdjecia po kliknieciu miniatury produktu na liscie zamowien.
  • Status w kolumnie statusow jest prezentowany jako nazwa biznesowa (np. Nowe, W realizacji) bez technicznego kodu.
  • Dodano skrypt serwisowy bin/fill_order_item_images.php do uzupelniania pustych order_items.media_url losowymi URL (picsum.photos) i wykonano go na bazie zdalnej (--use-remote, zaktualizowano 94 rekordy).
  • Rozszerzono sidebar o grupe Zamowienia z podlinkiem Lista zamowien.
  • Dodano widok szczegolow zamowienia:
    • endpoint GET /orders/{id},
    • link do szczegolow po kliknieciu numeru zamowienia na liscie,
    • uklad sekcji inspirowany widokiem Apilo: pozycje, dane zamowienia, platnosc/wysylka, adresy, notatki, historia.
  • Dopracowano widok GET /orders/{id} do ukladu bardziej zblizonego do Apilo:
    • lewy panel statusow z licznikami,
    • prawa kolumna szczegolow z paskiem akcji i tabami sekcji,
    • aktywne wyroznienie biezacego statusu zamowienia.
  • Dodano taki sam lewy panel statusow na GET /orders/list:
    • grupy statusow z licznikami,
    • klikniecie statusu filtruje liste zamowien po status,
    • kolorowe liczniki per status (info/warn/success/danger).
  • Poprawiono zrodlo panelu statusow (lista + szczegoly):
    • podzial na grupy i nazwy statusow sa pobierane dynamicznie z order_status_groups + order_statuses,
    • kolory pochodza z order_status_groups.color_hex,
    • dla statusow nieprzypisanych do konfiguracji dodawana jest sekcja Pozostale.
  • Ujednolicono render panelu statusow jako jeden widget widoku:
    • nowy komponent resources/views/components/order-status-panel.php,
    • komponent jest wspolnie uzywany przez orders/list.php i orders/show.php,
    • statusy w szczegolach zamowienia sa klikalne (przejscie do listy z odpowiednim filtrem).
  • Dodano klikalne taby w orders/show.php:
    • przelaczanie sekcji bez przeladowania strony (JS),
    • aktywny panel Szczegoly zamowienia,
    • pozostale panele (Historia zmian, Przesylki, Platnosci, Dokumenty) zawieraja tymczasowe puste boksy.
  • Zmieniono seed zamowien (bin/deploy_and_seed_orders.php):
    • external_status_id jest losowany z aktywnych statusow z tabeli order_statuses (zgodnie z konfiguracja w Ustawienia > Statusy),
    • dodano fallback do listy domyslnej, jesli tabela jest pusta/niedostepna,
    • profil realistic ma fallback reguly finansowej dla niestandardowych statusow.
  • Dodano skrypt serwisowy bin/randomize_order_statuses.php:
    • losowo podmienia orders.external_status_id dla juz istniejacych zamowien na aktywne statusy z order_statuses,
    • aktualizuje tez is_canceled_by_buyer dla statusu cancelled,
    • wspiera --use-remote i --dry-run.
  • Wykonano podmiane statusow na bazie zdalnej (--use-remote): zaktualizowano 30 zamowien.