3 migrations (email_mailboxes, email_templates, email_logs), full CRUD for SMTP mailboxes with encrypted passwords (IntegrationSecretCipher), native SMTP connection test via stream_socket_client, sidebar navigation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
46 KiB
46 KiB
Tech Changelog
2026-03-15 (Phase 13 — DB + Skrzynki pocztowe)
- Dodano 3 migracje email:
000054_create_email_mailboxes_table,000055_create_email_templates_table,000056_create_email_logs_table. - Nowe klasy:
EmailMailboxController(index, save, delete, toggleStatus, testConnection),EmailMailboxRepository(listAll, findById, save, delete, toggleStatus, listActive). - Test polaczenia SMTP przez natywny
stream_socket_clientz pelnym handshake (EHLO → STARTTLS → AUTH LOGIN) — bez zewnetrznych bibliotek. - Hasla SMTP szyfrowane przez
IntegrationSecretCipher(AES-256-CBC + HMAC-SHA256). - Widok
settings/email-mailboxes.php— lista skrzynek + formularz CRUD + AJAX test polaczenia. - Nawigacja: link "Skrzynki pocztowe" w sidebar Settings.
- 5 nowych route'ow: GET/POST
/settings/email-mailboxes/*.
2026-03-14
- Zoptymalizowano zapytanie listy zamowien (
OrdersRepository::buildListSql()):- 4 correlated subqueries (items_count, items_qty, shipments_count, documents_count) zastapiono aggregating LEFT JOINami — eliminuje N+1 na kazdym wierszu listy.
OrdersRepository::canResolveMappedMedia()— zamiana instance property nastatic—information_schemaodpytywany co najwyzej raz na cykl PHP zamiast raz per instancja.- Dodano migracje
20260314_000048_add_orders_performance_indexes.sql— indeksy naorders:source,external_status_id,ordered_at, composite(source, external_status_id). - Dodano SSL verification (
CURLOPT_SSL_VERIFYPEER => true,CURLOPT_SSL_VERIFYHOST => 2,CURLOPT_CAINFO) do 4 klas ApiClient: AllegroApiClient (3 metody), AllegroOAuthClient, ShopproApiClient, ApaczkaApiClient. Fallback:$_ENV['CURL_CA_BUNDLE_PATH']→ XAMPP cacert.pem → system CA bundle. - Cron web throttle (
isWebCronThrottled()) przeniesiony z$_SESSIONdoapp_settings(kluczcron_web_last_run_at) — eliminuje wielokrotne uruchamianie crona przy wielu aktywnych sesjach. - Deduplikacja migracji
000014→000014b(kolizja zcreate_product_integration_translations). AllegroStatusSyncService::sync()zwracaok:falsedla kierunkuorderpro_to_allegro(wczesniej false-positiveok:true). Opcja UI oznaczona jakodisabledz(wkrotce).- Lista zamowien: source wyswietlany przed ID z prefixem
ID:;sourceLabel()mapuje shoppro→shopPRO, allegro→Allegro. - Statusy zamowien na liscie kolorowane kolorem grupy z konfiguracji (
statusColorMap()→ inlinebackground-color). - Ciemniejsze obramowanie pol formularzy:
--c-borderzmieniony z#e2e8f0na#b0bec5. - Hotfix SSL:
getCaBundlePath()zwracanullgdy zaden CA bundle nie znaleziony —CURLOPT_CAINFOustawiany warunkowo, cURL uzywa systemowego CA na serwerze.
2026-03-08
- Poprawiono date podjazdu kuriera w payloadzie Apaczka:
pickup.datedla trybuCOURIERjest normalizowane tak, aby nie wypadal w niedziele (niedziela -> poniedzialek),pickup.hours_tojest ograniczane do16:00(wg limitu API), a okno godzinowe jest korygowane do poprawnej relacjihours_from < hours_to,- eliminuje blad API
Field PickupLocation->MaxPickupDate cannot be set to Sunday.
- Dodano pole firmy
sender_contact_person(osoba kontaktowa nadawcy):- nowa migracja
20260308_000046_extend_company_settings_contact_person.sql, - UI
Ustawienia > Dane firmyma nowe poleOsoba kontaktowa nadawcy, ApaczkaShipmentServicewysylacontact_persondla nadawcy z ustawien firmy.
- nowa migracja
- Uzupelniono kontakt odbiorcy w payloadzie Apaczka:
ApaczkaShipmentServicewysylareceiver.contact_person(fallback na dane odbiorcy/klienta z zamowienia),- eliminuje blad API:
Osoba kontaktowa nadawcy/odbiorcy: Pole jest wymagane.
- Dla tworzenia przesylek Apaczka dodano jawne pole
pickup.typew payloadzieorder_send:- gdy podano
sender_point_idustawiane jestSELF, - gdy brak punktu nadania i usluga dopuszcza odbior kurierem ustawiane jest
COURIER.
- gdy podano
- Poprawiono obsluge punktow nadania/odbioru w payloadzie Apaczka:
- adres
senderireceiverwysyla teraz komplet aliasow punktu (point,foreign_address_id,point_id), - rozszerzono diagnostyke dla bledu API
Niepoprawny sposob nadania przesylkio wskazowke dot.sender_point_id/ doboru uslugi.
- adres
- Wzmocniono fallback adresu odbiorcy dla przesylek punktowych Apaczka (Orlen/InPost):
ApaczkaShipmentServiceprobuje teraz dodatkowo uzupelnic adres punktu (street,postal_code,city) przez APIpointsna podstawiereceiver_point_id,- jezeli zamowienie punktowe dalej nie ma kompletu danych adresowych, serwis uzupelnia techniczne minimum (
line1,city,postal_code) zamiast blokowac tworzenie przesylki bledem walidacji lokalnej.
- Ujednolicono i wzmocniono naglowki sekcji UI (
h2/h3/h4.section-title) w widokach:- naglowki sekcyjne maja teraz wyrazniejszy styl (akcent lewy, delikatne tlo, obramowanie),
- zmiana jest globalna (SCSS), obejmuje m.in.
Zamowienia > Przygotuj przesylkeoraz pozostale ekrany korzystajace zsection-title.
- Poprawiono fallback danych odbiorcy dla przesylek punktowych Apaczka (w tym Orlen Paczka):
ApaczkaShipmentService::buildReceiverAddress(...)uzupelnia brakujace pola z wielu zrodel w kolejnosci:- dane z formularza,
- adres
deliveryz zamowienia, - dane punktu z
parcel_name(ulica,kod,miasto), - dane klienta (
name,phone,email,country),
- adres ulicy sklada teraz
street_name + street_number, - naprawiono fallback
receiver_point_id(uzywadelivery.parcel_external_id, usunieto bledne odwolanie do niezdefiniowanej zmiennej).
- Poprawiono obsluge usunietych/nieosiagalnych etykiet Apaczka:
- gdy API zwraca
Label is not available for this order, rekord paczki jest oznaczany jakoerrori zapisywany jesterror_message, - dzieki temu przycisk etykiety nie jest ponownie pokazywany dla tego rekordu.
- gdy API zwraca
- Ujednolicono flow etykiet w
Zamowienia > Przygotuj przesylke(dla wszystkich providerow):- po statusie
createdetykieta jest generowana automatycznie przez cykliczne sprawdzanie statusu (backend probujedownloadLabel), - UI nie pokazuje juz przycisku
Generuj etykiete; do czasu gotowosci widoczny jest stanGenerowanie etykiety..., - przycisk
Pobierzpojawia sie dopiero po zapisaniu pliku etykiety (label_path).
- po statusie
- Uzgodniono payload
order_sendApaczka z dokumentacja API v2:ApaczkaShipmentServicewysyla teraz struktureaddress.sender/receiver+shipment[](dimension1/2/3,weightw kg),codjest przekazywany jako obiekt (amount,currency), a wartosc ubezpieczenia przezshipment_value+shipment_currency,- punkty sa przekazywane jako
foreign_address_id(z aliasami diagnostycznymi), - naprawilo to blad wyceny dla zamowienia testowego
#21(utworzenie przesylki zakonczone sukcesem).
- Dodano techniczny skrypt diagnostyczny
tools/apaczka_probe_order.php:- wykonuje automatyczne proby
order_senddla wskazanego zamowienia (bez klikania w UI), - testuje kombinacje uslug i wariantow pol punktu, raportujac sukces/blad per proba.
- wykonuje automatyczne proby
- Rozszerzono payload punktow w tworzeniu przesylki Apaczka:
- oprocz
pointprzekazywane sa teraz aliasyforeign_address_idipoint_id(dla odbiorcy i nadawcy), - cel: kompatybilnosc z wariantami API wymagajacymi innej nazwy pola punktu.
- oprocz
- Korekta walidacji punktu odbioru Apaczka:
- usunieto twarde blokowanie tworzenia przesylki na podstawie prefiksu punktu (
POP-), - informacja o prefiksie punktu pozostaje tylko jako sugestia diagnostyczna.
- usunieto twarde blokowanie tworzenia przesylki na podstawie prefiksu punktu (
- Poprawiono prefill danych odbiorcy na ekranie
Zamowienia > Przygotuj przesylke:ShipmentControllerdla dostaw do punktu (parcel_external_id/parcel_name) ustawiareceiver_namena dane klienta (address_type=customer),- eliminuje przypadek podstawiania nazwy punktu/metody dostawy w polu
Imie i nazwisko.
- Poprawiono diagnostyke bledow tworzenia przesylki Apaczka:
ApaczkaShipmentServiceprzekazuje terazreceiver_point_iddo payloadureceiver.point(orazsender_point_iddosender.point),- dodano walidacje wymagan uslugi na podstawie
service_structure(np. wymagany punkt odbioru/nadania), - dla bledu API
Brak wyceny dla podanych parametrów zamówieniakomunikat zawiera rozszerzona diagnostyke (service_id/nazwa/supplier, punkt odbioru/nadania, gabaryt/waga) i hint o niedopasowaniu uslugi do typu punktu.
- Poprawiono import danych faktury z shopPRO:
ShopproOrdersSyncServicewykrywa fakture nie tylko pois_invoice/invoice.required, ale takze po danych firmowych (firm_name/firm_nip),ShopproOrdersSyncService::mapAddresses(...)zapisuje adresinvoice(firma, NIP, adres) na podstawie polinvoice/billing*/firm_*,- widok
orders/showwyswietla terazcompany_nameicompany_tax_numberdla adresu faktury.
- Fix prewyboru uslugi Apaczka na ekranie
Zamowienia > Przygotuj przesylke:- widok
resources/views/shipments/prepare.phpodczytuje ID uslugi Apaczka z fallbackiemservice_id -> id, - naprawia przypadek, gdy przewoznik (
Apaczka) byl wybierany poprawnie, ale usluga dostawy pozostawala pusta mimo mapowania.
- widok
- Poprawiono diagnostyke mapowania form dostawy na ekranie
Zamowienia > Przygotuj przesylke:ShipmentControllerzwraca teraz komunikat diagnostyczny, gdy brak mapowania metody dostawy,- komunikat rozroznia brak mapowan dla instancji
shopPRO(source_integration_id) od braku mapowania konkretnej metody, - widok
resources/views/shipments/prepare.phpwyswietla ten komunikat bezposrednio pod informacja o metodzie z zamowienia.
- Poprawiono UX wyszukiwania w selectach mapowania form dostawy (zakladki
Formy dostawy):resources/views/settings/allegro.phpprzeszlo z przebudowy opcji<select>na tryb bezpieczny (focus first matchbez modyfikacji listy opcji),- eliminuje przypadki „znikajacych” opcji i problem z wyborem uslugi po zmianie przewoznika na
Apaczka, - ujednolicono zachowanie z
resources/views/settings/shoppro.php.
- Poprawiono inicjalizacje stanu mapowania przewoznika (
allegro.php,shoppro.php):- dla niezamapowanych form domyslny przewoznik to teraz pusty wybor (zamiast
allegro), - panel uslugi (
Allegro/InPost/Apaczka/pusty) jest synchronizowany na starcie z realna wartoscia selecta przewoznika (showPanel(carrierSelect.value)), - usunieto pozostaly po refaktorze odwolanie do nieistniejacej zmiennej
$currentAllegroId(zastapione$currentMethodId).
- dla niezamapowanych form domyslny przewoznik to teraz pusty wybor (zamiast
- Dodano architekture provider-agnostic dla wysylek:
- nowy kontrakt
ShipmentProviderInterface, - nowy rejestr
ShipmentProviderRegistry, ShipmentControllerwybiera providera dynamicznie (allegro_wza/apaczka) przy tworzeniu przesylki, sprawdzaniu statusu i pobieraniu etykiety.
- nowy kontrakt
- Dodano integracje API Apaczka v2:
- nowy klient
App\Modules\Settings\ApaczkaApiClient(service_structure,order_send,order_details,waybill,points), - nowy serwis wysylkowy
App\Modules\Shipments\ApaczkaShipmentService, - rozszerzone
Ustawienia > Integracje > Apaczkao polaApp ID,App Secretoraz test polaczenia (POST /settings/integrations/apaczka/test). - poprawiono format podpisu/requestu zgodnie z API v2 (
app_id:route:request_json:expires, endpointy URL zamiast polamethod), co naprawia blad testu polaczenia (brak JSON).
- nowy klient
- Dodano wspolny model mapowania form dostawy dla wielu providerow:
- nowa tabela
carrier_delivery_method_mappings(migracja20260308_000044_create_carrier_delivery_method_mappings_table.sql), - nowy repo
CarrierDeliveryMethodMappingRepository, - backfill danych z tabel legacy (
allegro_delivery_method_mappings,shoppro_delivery_method_mappings), - zakladki
Formy dostawyw Allegro i shopPRO obsluguja mapowanie naallegro_wzaiapaczka.
- nowa tabela
- Dodano migracje
20260308_000045_extend_apaczka_credentials.sql:- rozszerzenie
apaczka_integration_settingsoapp_idiapp_secret_encrypted, - migracja danych legacy sekretu z
api_key_encrypted.
- rozszerzenie
- Dodano zakladke
Formy dostawydla integracjishopPRO(analogicznie do Allegro):- nowy endpoint
POST /settings/integrations/shoppro/delivery/save, - mapowanie per instancja: forma dostawy shopPRO -> usluga dostawy Allegro/InPost WZA,
- UI z wyborem przewoznika (
allegro/inpost) i wyszukiwaniem uslug Allegro.
- nowy endpoint
- Dodano
ShopproDeliveryMethodMappingRepositoryi tabele mapowan perintegration_id. - Dodano migracje
20260308_000043_create_shoppro_delivery_method_mappings_table.sql. - Dodano synchronizacje platnosci shopPRO oparta o flage
paid:- nowy job cron
shoppro_payment_status_sync, - nowy handler
App\Modules\Cron\ShopproPaymentStatusSyncHandler, - nowy serwis
App\Modules\Settings\ShopproPaymentStatusSyncService, - runner podlaczony w
App\Core\Application::maybeRunCronOnWeb(...)orazbin/cron.php.
- nowy job cron
- Rozszerzono
Ustawienia > Integracje > shopPRO > Ustawienia:- dodano interwal sprawdzania platnosci (minuty) dla joba
shoppro_payment_status_sync, - dodano wybor statusow orderPRO, dla ktorych cron ma sprawdzac oplacenie zamowien,
- zapis konfiguracji listy statusow per instancja trafia do
integrations.payment_sync_status_codes_json.
- dodano interwal sprawdzania platnosci (minuty) dla joba
- Import zamowien shopPRO zapisuje status platnosci numerycznie (
orders.payment_status) na podstawie flagipaid, co unifikuje filtry/statystyki platnosci z Allegro. - Dodano migracje
20260308_000042_ensure_shoppro_payment_sync_schedule_and_columns.sql:- uzupelnienie kolumny
integrations.payment_sync_status_codes_json, - seed/naprawa harmonogramu
shoppro_payment_status_sync(domyslnie 600s, priorytet 105).
- uzupelnienie kolumny
- Fix danych wysylki dla zamowien shopPRO (np.
OP000000016):ShopproOrdersSyncServicemapujeinpost_paczkomat/orlen_pointdo adresudelivery(punkt, ulica, kod, miasto),- zapisuje
parcel_external_idiparcel_namedla punktu odbioru, deliverydziedziczy telefon i e-mail klienta, gdy API nie zwraca osobnych danych odbiorcy,- etykieta metody dostawy (
external_carrier_id) zawiera koszt transportu (transport_cost), np.Paczkomaty InPost - przedpłata: 13.5 zł.
- Fix importu shopPRO dla listy zamowien (
Kwoty+ miniatury):ShopproOrdersSyncServicemapuje kwoty zamowienia zsummaryipaid(fallback), ceny pozycji zprice_brutto,- poprawiono laczenie payloadow
orders/listiorders/get|details(zachowanie kluczowych pol z listy), - dodano fallback miniatur pozycji przez API
products/getpoproduct_id, - dodano dodatkowy fallback miniatur po
parent_product_id(warianty), gdy obraz nie istnieje na produkcie potomnym.
OrdersRepository:- resolver miniatur pozycji uwzglednia kod kanalu zgodny ze zrodlem zamowienia (
o.source) zamiast stalegoallegro.
- resolver miniatur pozycji uwzglednia kod kanalu zgodny ze zrodlem zamowienia (
- Korekta layoutu sekcji
Ustawieniadla integracjishopPRO:- wyrownano pola w siatce (
integration-settings-group__grid) przezalign-items: start, - wymuszono spojna wysokosc kontrolek (
.form-control), w tym poladate, - przebudowano CSS (
public/assets/css/app.css) dla rownego przebiegu linii i pol w obu kolumnach.
- wyrownano pola w siatce (
- Fix UX przycisku
Nowa integracjawUstawienia > Integracje > shopPRO:- przycisk otwiera teraz tryb wymuszonego tworzenia (
?new=1), ShopproIntegrationsController::index(...)nie auto-wybiera wtedy pierwszej istniejacej integracji,- formularz tworzenia otwiera sie zawsze jako pusty.
- przycisk otwiera teraz tryb wymuszonego tworzenia (
- Poprawiono prezentacje dostawy na szczegolach zamowienia (
orders/show):Platnosc i wysylkasanitizuje nazwe przewoznika (usuwa tagi HTML typu<b>...</b>),Dane wysylkipokazujaparcel_nameiparcel_external_id(np. punkt/paczkomat Allegro),- gdy brak adresu
delivery, sekcjaDane wysylkipokazuje fallback z metody dostawy (external_carrier_id).
- Poprawiono import shopPRO dla formy dostawy:
ShopproOrdersSyncServicesanitizujeexternal_carrier_idiorder_shipments.carrier_provider_id(usuwanie HTML + dekodowanie encji),- rozszerzono fallbacki mapowania przewoznika (
transport,transport_description,transport_id).
- Fix mapowania formy dostawy z shopPRO:
ShopproOrdersSyncServicemapuje terazorders.external_carrier_idz fallbackiem na polatransportitransport_description,orders.external_carrier_account_idmapowane ztransport_id,order_shipments.carrier_provider_idrozszerzone o fallbacktransport/transport_description.
- Fix importu adresow shopPRO na realnym payloadzie zamowien (
client_name,client_surname,client_email,client_phone):ShopproOrdersSyncService::mapAddresses(...)mapuje teraz pola klienta w formacie flat (bez zagniezdzenia),- usunieto przypadek tworzenia pustego adresu
deliverytylko na bazie fallbacku e-mail, - po wymuszonym re-sync zamowienia #13 dane zamawiajacego zapisaly sie jako
Jacek Pyziak,pyziak84@gmail.com,530755774.
- Poprawiono mapowanie danych adresowych w imporcie zamowien
shopPRO:ShopproOrdersSyncService::mapAddresses(...)obsluguje rozszerzony zestaw aliasow pol klienta i dostawy (buyer/customer/client,billing_address,shipping_address,delivery_address,receiver, wariantyfirst_name/last_name,postcodeitd.),- adres dostawy jest zapisywany takze wtedy, gdy brak pelnej nazwy, ale istnieja inne dane adresowe,
- rozszerzono mapowanie
orders.customer_loginiorders.external_carrier_ido dodatkowe fallbacki z payloadu shopPRO.
- Poprawiono UX zakladki
UstawieniaintegracjishopPRO:- ustawienia sa pogrupowane w sekcje
Pobieranie zamowienorazSynchronizacja statusow, - dodano naglowki sekcji i opisy kontekstu, aby pola nie zlewaly sie wizualnie,
- dodano dedykowane style SCSS (
integration-settings-group*) i przebudowanopublic/assets/css/app.css.
- ustawienia sa pogrupowane w sekcje
- Dodano cron synchronizacji statusow
shopPRO:- nowy handler
App\Modules\Cron\ShopproStatusSyncHandler, - nowy serwis
App\Modules\Settings\ShopproStatusSyncService, - nowy job
shoppro_order_status_syncpodlaczony do runnera wApp\Core\Application::maybeRunCronOnWeb(...)ibin/cron.php.
- nowy handler
- Rozszerzono
Ustawienia > Integracje > shopPRO > Ustawienia:- dodano wybor kierunku synchronizacji statusow (
shopPRO -> orderPRO,orderPRO -> shopPRO), - dodano pole interwalu synchronizacji statusow (minuty),
- zapis aktualizuje
integrations.order_status_sync_directioni harmonogramcron_schedulesdlashoppro_order_status_sync.
- dodano wybor kierunku synchronizacji statusow (
- Dodano migracje
20260308_000041_ensure_shoppro_status_sync_schedule_and_direction.sql:- seed/naprawa harmonogramu
shoppro_order_status_sync(domyslnie 900s, priorytet 100), - uzupelnienie kolumny
integrations.order_status_sync_directionjesli brak.
- seed/naprawa harmonogramu
- Rozszerzono
ShopproOrdersSyncServiceo opcje uruchomienia filtrowanego pointegration_idi z pominięciem flagiorders_fetch_enabled(wykorzystane przez cron synchronizacji statusow). - Dodano cron importu zamowien z
shopPRO:- nowy handler
App\Modules\Cron\ShopproOrdersImportHandler, - nowy serwis
App\Modules\Settings\ShopproOrdersSyncService, - nowy klient API
App\Modules\Settings\ShopproApiClient, - job
shoppro_orders_importjest podlaczony do wykonania zarowno wApp\Core\Application::maybeRunCronOnWeb(...), jak i wbin/cron.php.
- nowy handler
- Rozszerzono
Ustawienia > Integracje > shopPRO > Ustawienia:- dodano pole interwalu pobierania zamowien (minuty),
- zapis aktualizuje harmonogram
cron_schedulesdla jobashoppro_orders_import.
- Dodano migracje
20260308_000040_ensure_shoppro_orders_import_schedule.sql:- seed/naprawa harmonogramu
shoppro_orders_import(domyslnie 300s, priorytet 90).
- seed/naprawa harmonogramu
- Zadanie #13 z
DOCS/todo.md: dodano stronicowanie historii wUstawienia > Cron:CronSettingsControllerpobierapast_pagez query i przekazuje metadane paginacji do widoku,CronRepositoryrozszerzono ocountPastJobs()orazlistPastJobs(limit, offset),- widok
settings/cron.phprenderuje kontrolki paginacji dla sekcjiHistoria jobow (przeszle).
- Rozpoczeto ujednolicanie modelu integracji na baze
integrations:- dodano klasy wspolne
App\Modules\Settings\IntegrationsRepositoryorazApp\Modules\Settings\IntegrationSecretCipher, - ograniczono duplikacje szyfrowania sekretow integracji (wspolny cipher dla repozytoriow integracji).
- dodano klasy wspolne
- Migracja
20260308_000037_unify_integrations_base_links.sql:- dodaje
integration_iddoallegro_integration_settings,apaczka_integration_settings,inpost_integration_settings, - podpina relacje 1:1 FK do
integrations, - seeduje bazowe rekordy providerow (
allegro,apaczka,inpost) i backfilluje powiazania.
- dodaje
ApaczkaIntegrationRepository:- klucz API zapisuje/odczytuje z
integrations.api_key_encrypted(type=apaczka).
- klucz API zapisuje/odczytuje z
InpostIntegrationRepository:- token API zapisuje/odczytuje z
integrations.api_key_encrypted(type=inpost), - ustawienia specyficzne przewoznika pozostaja w
inpost_integration_settings.
- token API zapisuje/odczytuje z
AllegroIntegrationRepository:- zapewnia powiazanie aktywnego srodowiska OAuth z rekordem bazowym
integrations, - dodana metoda
getActiveIntegrationId()pod spojnosc domeny zamowien/sync.
- zapewnia powiazanie aktywnego srodowiska OAuth z rekordem bazowym
AllegroOrderImportServiceiAllegroOrdersSyncService:- przestaly uzywac stalej/
nulldlaintegration_id, - korzystaja z aktywnego
integration_idAllegro, co eliminuje sztywne zalozenieintegration_id=1.
- przestaly uzywac stalej/
- Dodano wspolny ekran
Ustawienia > Integracje:- nowa route
GET /settings/integrations, - nowa klasa
App\Modules\Settings\IntegrationsHubController, - nawigacja boczna prowadzi do jednego huba integracji.
- nowa route
- Hub integracji zawiera tabele podsumowania oraz akcje per instancja:
- przycisk
Ustawieniaw kazdym wierszu prowadzi do dedykowanego ekranu zaawansowanego providera.
- przycisk
- Fix UI: rozciaganie przyciskow w formularzach (
.form-actions) przy ukladzie grid:- ustawiono
align-items: flex-startorazalign-self: flex-startdla.form-actions .btn, - eliminuje pionowe rozciaganie przyciskow do wysokosci sasiednich pol formularza.
- ustawiono
- Dodano wieloinstancyjna konfiguracje integracji
shopPRO:- nowe endpointy:
GET /settings/integrations/shoppro,POST /settings/integrations/shoppro/save,POST /settings/integrations/shoppro/test, - nowa klasa
App\Modules\Settings\ShopproIntegrationsController, - nowy widok
resources/views/settings/shoppro.php(lista instancji, formularz dodawania/edycji, test polaczenia), - hub integracji (
/settings/integrations) zawiera wierszshopPROz przejsciem do ekranu ustawien, - dodano pomocnicze style
.table-row-actionsdla kompaktowych akcji w tabelach.
- nowe endpointy:
- Ekran
shopPROrozbudowano o zakladki analogiczne do Allegro:Integracja,Statusy,Ustawienia,Formy dostawy,Ustawieniazawiera polaPobieraj zamowieniaiData startu pobierania,- zapis/odczyt tych pol jest realizowany przez tabele bazowa
integrations(orders_fetch_enabled,orders_fetch_start_date).
- Wdrozone mapowanie statusow shopPRO (zakladka
Statusy):- nowe endpointy:
POST /settings/integrations/shoppro/statuses/syncorazPOST /settings/integrations/shoppro/statuses/save, - dodana klasa
App\Modules\Settings\ShopproStatusMappingRepository, - synchronizacja statusow pobiera slownik
dictionaries/statusesz API shopPRO, - zapis mapowan trafia do
order_status_mappingsperintegration_id(wieloinstancyjnie).
- nowe endpointy:
- Poprawiono parser statusow shopPRO:
- obsluguje odpowiedzi zagniezdzone w
data, - obsluguje rowniez format mapy
kod => nazwaoraz dodatkowe aliasy pol (status_code,status_name,symbol,slug).
- obsluguje odpowiedzi zagniezdzone w
- Dodano migracje naprawcza
20260308_000038_ensure_order_status_mappings_table.sql:- tworzy
order_status_mappingsjesli tabela nie istnieje (scenariusz niepelnej historii migracji na srodowisku).
- tworzy
- Dodano migracje naprawcza
20260308_000039_ensure_integrations_fetch_columns.sql:- uzupelnia w
integrationsbrakujace kolumnyorders_fetch_enablediorders_fetch_start_datedla srodowisk, gdzie tabelaintegrationszostala odtworzona pozniej niz pierwotne migracje shopPRO.
- uzupelnia w
- Poprawiono UX ekranu
shopPRO:- przy istniejacych instancjach automatycznie wybierana jest pierwsza integracja (bez koniecznosci wracania do zakladki
Integracja), - dodano przełącznik instancji nad zakladkami (
Wybrana integracja) dostepny globalnie dlaStatusy/Ustawienia/Formy dostawy.
- przy istniejacych instancjach automatycznie wybierana jest pierwsza integracja (bez koniecznosci wracania do zakladki
2026-03-06
- Fix: synchronizacja statusow Allegro nie aktualizowala zamowien.
- Przyczyna: Allegro API nie zmienia
updatedAtprzy zmianiefulfillment.status. Cursor-based sync (AllegroOrdersSyncService) pomijal takie zamowienia. - Rozwiazanie:
AllegroStatusSyncServiceprzepisany na podejscie direct-query: odpytuje baze o zamowienia Allegro w nie-finalnych statusach i re-importuje je przezAllegroOrderImportService::importSingleOrder(). AllegroStatusSyncServicenie zalezy juz odAllegroOrdersSyncService.- Dodano
ensureDefaultSchedulesExist()wAllegroIntegrationController, aby harmonogramy cron byly tworzone automatycznie.
- Przyczyna: Allegro API nie zmienia
- Rozszerzono zakladke
Formy dostawyo wybor przewoznika (Allegro / InPost) per wiersz:- nowa kolumna
carrierw tabeliallegro_delivery_method_mappings, - select przewoznika determinuje dostepne uslugi (Allegro z API, InPost statyczna lista),
- JS przelacza panele uslug w zaleznosci od wybranego przewoznika.
- nowa kolumna
- Migracja
20260306_000036_add_carrier_to_delivery_method_mappings.sql.
2026-03-05
- Dodano nowa zakladke
Ustawienia > Integracja InPost:- route
GET /settings/integrations/inpostiPOST /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.
- route
- 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
Ustawieniao linkIntegracja InPost. - Import Allegro pobiera przesylki z dedykowanego endpointu
GET /order/checkout-forms/{id}/shipmentszamiast 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_idiexternal_order_idz ta sama wartoscia). - Dodano nazwe integracji (np. "Allegro") przed ID zamowienia w naglowku szczegolow.
- Dodano nowa zakladke
Ustawienia > Integracja Apaczka:- route
GET /settings/integrations/apaczkaiPOST /settings/integrations/apaczka/save, - widok konfiguracji z polem klucza API (szyfrowany AES-256-CBC jak w integracji Allegro).
- route
- Dodano klasy:
App\Modules\Settings\ApaczkaIntegrationController,App\Modules\Settings\ApaczkaIntegrationRepository.
- Dodano migracje
20260305_000029_create_apaczka_integration_settings_table.sql:- tabela
apaczka_integration_settingsna konfiguracje klucza API (zaszyfrowany).
- tabela
- Rozszerzono nawigacje
Ustawieniao linkIntegracja 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_historyiorder_activity_log(actor_type:user), - flash messages (sukces/blad) po redirect,
- bez zmian schematu.
- nowa route
- Import zamowienia z Allegro (reczny i auto-sync) rejestruje zdarzenie
importworder_activity_log:AllegroOrderImportServicerozszerzony o zaleznoscOrdersRepository,- 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(migracja20260305_000030_create_order_activity_log_table.sql), - nowe metody w
OrdersRepository:recordActivity(),recordStatusChange(),updateOrderStatus(), - zakladka
Historia zmianw 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
Szczegolypokazuje teraz nazwy statusow zamiast surowych kodow.
- nowa tabela
2026-03-04
- Poprawiono kolumne
Data zamowieniana 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.
- wartosc jest liczona fallbackiem
- Import zamowienia Allegro zapisuje teraz forme wysylki:
delivery.method.name(fallbackdelivery.method.id) trafia doorders.external_carrier_id,- techniczne
delivery.method.idtrafia doorders.external_carrier_account_id.
- Dopracowano mapowanie dostawy dla zamowien Allegro:
- dla dostawy do punktu odbioru adres
Dane wysylkijest budowany zdelivery.pickupPoint(nazwa punktu + adres punktu), - terminy z
delivery.time.dispatchsa zapisywane doorders.send_date_min/orders.send_date_max.
- dla dostawy do punktu odbioru adres
- Rozszerzono UI
Ustawienia > Integracje > Allegroo zakladkeUstawienia:- dodano opcje konfiguracji interwalu pobierania zamowien (minuty),
- nowy endpoint zapisu
POST /settings/integrations/allegro/settings/save, - zapis aktualizuje harmonogram joba
allegro_orders_importwcron_schedules.
- Rozszerzono zakladke
Ustawieniaintegracji 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
- Dodano cron synchronizacji statusow Allegro:
- nowy job type
allegro_status_syncz harmonogramem domyslnym co 900s, - nowy handler
App\Modules\Cron\AllegroStatusSyncHandler, - nowy serwis
App\Modules\Settings\AllegroStatusSyncService(obsluga kierunku sync z ustawien integracji).
- nowy job type
- Dodano migracje
20260304_000028_add_allegro_status_sync_schedule.sql:- seed
cron_schedulesdlaallegro_status_sync, - seed domyslnych ustawien
app_settingsdla kierunku i interwalu synchronizacji statusow.
- seed
- Dodano automatyczny import zamowien Allegro przez cron:
- nowy job type
allegro_orders_importz 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\AllegroOrderSyncStateRepositoryutrzymujacy kursor i status wykonania wintegration_order_sync_state.
- nowy job type
- Podlaczono handler
allegro_orders_importdo 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_stateo kolumny kursora sync.
- seed harmonogramu
- Dodano obsluge miniatur produktow dla importu Allegro i widokow zamowien:
- import pojedynczego zamowienia Allegro zapisuje URL obrazka pozycji (
lineItems.offer.image*) doorder_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).
- import pojedynczego zamowienia Allegro zapisuje URL obrazka pozycji (
- Rozszerzono import pojedynczego zamowienia Allegro o fallback pobrania obrazka po
offerId:- gdy
checkout-form lineItemnie zawiera obrazka, importer pobiera dane oferty przezGET /sale/product-offers/{offerId}i zapisuje URL miniatury doorder_items.media_url, - obslugiwane sa rowniez URL w formacie
//...(normalizacja dohttps://...).
- gdy
- Dodano diagnostyke importu obrazkow Allegro:
- po imporcie pojedynczego zamowienia UI pokazuje podsumowanie
obrazki: X/Yi ostrzezenie z przyczynami brakow, - diagnostyka rozroznia m.in. brak obrazka w checkout-form, brak obrazka w API oferty, brak
offerIdoraz bledy HTTP API ofert (np.403).
- po imporcie pojedynczego zamowienia UI pokazuje podsumowanie
- Rozszerzono zakres scope zadany w OAuth Allegro:
- autoryzacja prosi teraz o
allegro:api:orders:readorazallegro:api:sale:offers:read, - po zmianie scope wymagane jest ponowne polaczenie OAuth (
Polacz ponownie), aby nowe tokeny mialy dostep do API ofert.
- autoryzacja prosi teraz o
- 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.
- status efektywny jest liczony dynamicznie z mapowaniem
- UI mapowania statusow Allegro zmieniono na zapis zbiorczy:
- jeden przycisk
Zapisz mapowaniadla wszystkich selectow w tabeli, - nowy endpoint
POST /settings/integrations/allegro/statuses/save-bulk.
- jeden przycisk
- Dodano automatyczne pobieranie statusow Allegro do mapowania:
- endpoint
POST /settings/integrations/allegro/statuses/sync, - przycisk
Pobierz statusy z Allegrow zakladceUstawienia > Integracje > Allegro > Statusy, - nowa klasa
App\Modules\Settings\AllegroStatusDiscoveryService(statusy z APIcheckout-forms).
- endpoint
- Dodano migracje
20260304_000026_make_allegro_status_mapping_nullable.sql:allegro_order_status_mappings.orderpro_status_codejest teraz nullable (statusy moga byc najpierw odkryte, potem mapowane).
- Zmieniono podejscie do statusow Allegro:
- usunieto fallbackowe tlumaczenia statusow z kodu listy zamowien,
- dodano zakladke
StatusywUstawienia > Integracje > Allegroz recznym mapowaniemstatus 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).
- filtr statusu pokazuje etykiety biznesowe zamiast surowych kodow (
- Dodano reczny import pojedynczego zamowienia Allegro z poziomu
Ustawienia > Integracje > Allegro:- endpoint
POST /settings/integrations/allegro/import-single, - formularz z polem
checkout_form_idw widoku integracji Allegro.
- endpoint
- Dodano klasy importu Allegro:
App\Modules\Settings\AllegroApiClient(requestGET /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\AllegroTokenRefreshHandlerdla jobaallegro_token_refresh.
- Dodano odswiezanie tokenu OAuth w
App\Modules\Settings\AllegroOAuthClient::refreshAccessToken(...). - Rozszerzono
App\Modules\Settings\AllegroIntegrationRepositoryo 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).
- harmonogram
- Dodano zakladke
Ustawienia > Cron:GET /settings/cron,POST /settings/cron,- kontrola opcji
cron_run_on_webicron_web_limit, - podglad harmonogramow i kolejki/historii jobow.
- Podlaczono wykonanie crona podczas requestow HTTP:
App\Core\Application::maybeRunCronOnWeb(Request)jest uruchamiane wApplication::run(),- aktywowane ustawieniem
cron_run_on_webi ograniczane lockiem DB + throttlingiem sesyjnym.
- Dodano nowa zakladke
Ustawienia > Integracje > Allegro:- route i widok konfiguracji,
- sekcja z gotowym
redirect_urido 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_settingsna konfiguracje OAuth2 i tokeny (client_secret,access_token,refresh_tokentrzymane jako zaszyfrowane).
- tabela
- Dodano walidacje i obsluge flow Authorization Code:
- generowanie
statei walidacja callbacku, - wymiana
codena tokeny przez endpoint tokenowy Allegro (sandbox/production).
- generowanie
- Rozszerzono nawigacje
Ustawieniao linkIntegracje Allegro. - Dodano style SCSS dla bloku prezentacji callback URL i przebudowano asset CSS (
public/assets/css/app.css).
2026-03-02
- Dodano zakladke
Ustawienia > Statusydo 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_statusesz FKorder_statuses_group_fki kasowaniem kaskadowym.
- tabela
- Dodano
App\Modules\Settings\OrderStatusRepository(CRUD grup/statusow i walidacja unikalnosci kodow). - Rozszerzono
App\Modules\Settings\SettingsControllero 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.phporaz 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.
- 2 taby (
- 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
codedla 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,_3przy konfliktach), - wspiera
--dry-runi--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.
- dokumentacja:
- 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:codejest 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
AuthiUsersdoarchive/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.mdARCHITECTURE.mdTECH_CHANGELOG.md
- Przywrocono sekcje
Ustawieniaw nawigacji jako grupe z podkategoriami:Uzytkownicy(/users)Baza danych(/settings/database)
- Dodano modul
App\Modules\Settingsz kontroleremSettingsController(metodydatabase,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.titlenaBaza danychoraz dodanonavigation.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.phpo parametr--profile=default|realistic. - Dodano realistyczny profil seedowania:
- wazone losowanie statusow i metod platnosci,
- spojne mapowanie
external_status_id->payment_statusitotal_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.
- komenda:
- Dodano glowna sekcje panelu
Zamowieniaz podzakladkaLista 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.phpdo uzupelniania pustychorder_items.media_urllosowymi URL (picsum.photos) i wykonano go na bazie zdalnej (--use-remote, zaktualizowano 94 rekordy). - Rozszerzono sidebar o grupe
Zamowieniaz podlinkiemLista 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.
- endpoint
- 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.
- podzial na grupy i nazwy statusow sa pobierane dynamicznie z
- Ujednolicono render panelu statusow jako jeden widget widoku:
- nowy komponent
resources/views/components/order-status-panel.php, - komponent jest wspolnie uzywany przez
orders/list.phpiorders/show.php, - statusy w szczegolach zamowienia sa klikalne (przejscie do listy z odpowiednim filtrem).
- nowy komponent
- 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_idjest losowany z aktywnych statusow z tabeliorder_statuses(zgodnie z konfiguracja wUstawienia > Statusy),- dodano fallback do listy domyslnej, jesli tabela jest pusta/niedostepna,
- profil
realisticma fallback reguly finansowej dla niestandardowych statusow.
- Dodano skrypt serwisowy
bin/randomize_order_statuses.php:- losowo podmienia
orders.external_status_iddla juz istniejacych zamowien na aktywne statusy zorder_statuses, - aktualizuje tez
is_canceled_by_buyerdla statusucancelled, - wspiera
--use-remotei--dry-run.
- losowo podmienia
- Wykonano podmiane statusow na bazie zdalnej (
--use-remote): zaktualizowano 30 zamowien.