feat(30-button-primary-color): separate CTA color from section headings
Phase 30 complete:\n- split semantic tokens for actions vs informational headings\n- update primary/outline button styles and rebuild CSS assets\n- update TODO/docs and close PAUL loop with SUMMARY
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
## Status
|
||||
- Projekt po resecie do trybu `users-only`.
|
||||
- UI korzysta z globalnego standardu naglowkow sekcji (`h2/h3/h4.section-title`) definiowanego centralnie w `resources/scss/app.scss` i buildowanego do `public/assets/css/app.css`.
|
||||
- Kolory akcji UI (przyciski `btn--primary` i warianty `btn--outline-primary`) sa odseparowane od koloru naglowkow (`section-title`) przez dedykowane tokeny `--c-action-primary` i `--c-action-primary-dark` w `resources/scss/shared/_ui-components.scss`.
|
||||
|
||||
## Moduly aktywne
|
||||
- `App\Modules\Auth`
|
||||
|
||||
@@ -1,44 +1,51 @@
|
||||
# Tech Changelog
|
||||
# Tech Changelog
|
||||
|
||||
## 2026-03-23 (Phase 26 — Manual Tracking Number, Plan 01)
|
||||
- Nowa metoda `ShipmentPackageRepository::createManual(int, string, ?string): int` — INSERT do `shipment_packages` z `provider='manual'`, `status='created'`.
|
||||
- Nowa metoda `ShipmentController::createManual(Request): Response` — endpoint `POST /orders/{id}/shipment/manual`, walidacja CSRF + tracking_number, activity log `shipment_manual`.
|
||||
## 2026-03-25 (Phase 30 - Button Primary Color Distinction, Plan 01)
|
||||
- Rozdzielono palete kolorow naglowkow i przyciskow akcji w warstwie SCSS:
|
||||
- `resources/scss/shared/_ui-components.scss` ma nowe tokeny `--c-action-primary`, `--c-action-primary-dark`, `--focus-ring-action`,
|
||||
- `btn--primary` i `btn:focus-visible` korzystaja z tokenow akcji, bez zmiany koloru `section-title` opartego o `--c-primary`.
|
||||
- `resources/scss/modules/_printing.scss`: `btn--outline-primary` zostal przepiety z twardego niebieskiego (`#4a90d9`) na token `--c-action-primary`.
|
||||
- Przebudowano assety frontendowe komenda `npm run build:css`, co zaktualizowalo `public/assets/css/app.css`.
|
||||
|
||||
## 2026-03-23 (Phase 26 — Manual Tracking Number, Plan 01)
|
||||
- Nowa metoda `ShipmentPackageRepository::createManual(int, string, ?string): int` — INSERT do `shipment_packages` z `provider='manual'`, `status='created'`.
|
||||
- Nowa metoda `ShipmentController::createManual(Request): Response` — endpoint `POST /orders/{id}/shipment/manual`, walidacja CSRF + tracking_number, activity log `shipment_manual`.
|
||||
- Nowa route w `routes/web.php`: `POST /orders/{id}/shipment/manual`.
|
||||
- `resources/views/orders/show.php` — formularz inline do dodawania recznego numeru przesylki w zakladce Przesylki; zmienione wyswietlanie przesylek manualnych (status "Dodana recznie", przewoznik z carrier_id, brak etykiety).
|
||||
- `resources/scss/app.scss` — nowa klasa `.manual-tracking-form` (flex, gap 8px).
|
||||
- `resources/views/orders/show.php` — formularz inline do dodawania recznego numeru przesylki w zakladce Przesylki; zmienione wyswietlanie przesylek manualnych (status "Dodana recznie", przewoznik z carrier_id, brak etykiety).
|
||||
- `resources/scss/app.scss` — nowa klasa `.manual-tracking-form` (flex, gap 8px).
|
||||
|
||||
## 2026-03-22 (Phase 21 — Order Source Display, Plan 01)
|
||||
- `OrdersRepository::buildListSql()` — LEFT JOIN `integrations ig ON ig.id = o.integration_id`, nowa kolumna `ig.name AS integration_name`.
|
||||
- `OrdersRepository::findDetails()` — analogiczny LEFT JOIN dla strony szczegolow zamowienia.
|
||||
- `OrdersRepository::transformOrderRow()` — nowe pole `integration_name`.
|
||||
- `OrdersController::toTableRow()` — wyswietla `integration_name` gdy niepuste, fallback na `sourceLabel()` (Allegro/Erli/default).
|
||||
- `resources/views/orders/show.php` — naglowek zamowienia: dwa osobne spany (nazwa integracji + "ID: identyfikator") zamiast jednego.
|
||||
## 2026-03-22 (Phase 21 — Order Source Display, Plan 01)
|
||||
- `OrdersRepository::buildListSql()` — LEFT JOIN `integrations ig ON ig.id = o.integration_id`, nowa kolumna `ig.name AS integration_name`.
|
||||
- `OrdersRepository::findDetails()` — analogiczny LEFT JOIN dla strony szczegolow zamowienia.
|
||||
- `OrdersRepository::transformOrderRow()` — nowe pole `integration_name`.
|
||||
- `OrdersController::toTableRow()` — wyswietla `integration_name` gdy niepuste, fallback na `sourceLabel()` (Allegro/Erli/default).
|
||||
- `resources/views/orders/show.php` — naglowek zamowienia: dwa osobne spany (nazwa integracji + "ID: identyfikator") zamiast jednego.
|
||||
|
||||
## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 02: Watcher/Executor)
|
||||
- Nowa klasa `App\Modules\Automation\AutomationService` — trigger + ewaluacja warunkow (AND) + wykonanie akcji.
|
||||
## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 02: Watcher/Executor)
|
||||
- Nowa klasa `App\Modules\Automation\AutomationService` — trigger + ewaluacja warunkow (AND) + wykonanie akcji.
|
||||
- Flow: `ReceiptController::store()` -> `AutomationService::trigger('receipt.created', orderId)` -> sprawdzenie warunkow (integration_id) -> `EmailSendingService::send()`.
|
||||
- Rozszerzenie `EmailSendingService::send()` o opcjonalne parametry `$recipientEmailOverride` i `$recipientNameOverride` (kompatybilnosc wsteczna).
|
||||
- 3 tryby odbiorcy: 'client' (kupujacy), 'company' (e-mail firmy z company_settings), 'client_and_company' (oba).
|
||||
- Trigger w try/catch — blad automatyzacji nie blokuje sukcesu tworzenia paragonu.
|
||||
- Trigger w try/catch — blad automatyzacji nie blokuje sukcesu tworzenia paragonu.
|
||||
- Activity log: automation_email_sent / automation_email_failed z actor_type='system'.
|
||||
|
||||
## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 01: DB + CRUD)
|
||||
## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 01: DB + CRUD)
|
||||
- Nowe tabele: `automation_rules`, `automation_conditions`, `automation_actions` (migracja 000057).
|
||||
- Nowy modul `App\Modules\Automation` z 2 klasami:
|
||||
- `AutomationController` — CRUD regul automatyzacji (index, create, store, edit, update, destroy, toggleStatus).
|
||||
- `AutomationRepository` — operacje DB z transakcjami (create/update atomowe z conditions+actions), findActiveByEvent dla watchera.
|
||||
- `AutomationController` — CRUD regul automatyzacji (index, create, store, edit, update, destroy, toggleStatus).
|
||||
- `AutomationRepository` — operacje DB z transakcjami (create/update atomowe z conditions+actions), findActiveByEvent dla watchera.
|
||||
- 7 nowych route'ow: `/settings/automation/*`.
|
||||
- Widoki: `resources/views/automation/index.php` (lista regul), `resources/views/automation/form.php` (formularz z dynamicznymi warunkami/akcjami).
|
||||
- Nowy JS: `public/assets/js/modules/automation-form.js` (dodawanie/usuwanie wierszy warunkow i akcji).
|
||||
- Nowy SCSS: `resources/scss/modules/_automation.scss` (style formularza dynamicznego).
|
||||
- Menu nawigacji: dodany link "Zadania automatyczne" w sekcji Ustawienia.
|
||||
|
||||
## 2026-03-17 (Phase 15 — Wysylka e-mail z zamowien)
|
||||
## 2026-03-17 (Phase 15 — Wysylka e-mail z zamowien)
|
||||
- Nowa zaleznosc: `phpmailer/phpmailer` v7.0.2 (SMTP transport).
|
||||
- Nowy modul `App\Modules\Email` z 3 klasami:
|
||||
- `EmailSendingService` — wysylka e-mail (send, preview), logowanie do email_logs, resolwer skrzynki (mailboxId → template → default).
|
||||
- `VariableResolver` — zamiana `{{grupa.zmienna}}` na dane zamowienia/kupujacego/adresu/firmy.
|
||||
- `AttachmentGenerator` — generowanie PDF paragonu (dompdf) jako zalacznik in-memory (addStringAttachment).
|
||||
- `EmailSendingService` — wysylka e-mail (send, preview), logowanie do email_logs, resolwer skrzynki (mailboxId → template → default).
|
||||
- `VariableResolver` — zamiana `{{grupa.zmienna}}` na dane zamowienia/kupujacego/adresu/firmy.
|
||||
- `AttachmentGenerator` — generowanie PDF paragonu (dompdf) jako zalacznik in-memory (addStringAttachment).
|
||||
- `OrdersController`: nowe metody `sendEmail()`, `emailPreview()`, `loadEmailLogs()`.
|
||||
- Nowe route'y: `POST /orders/{id}/send-email`, `POST /orders/{id}/email-preview`.
|
||||
- Widok `orders/show.php`: przycisk "Wyslij e-mail" + modal (wybor szablonu/skrzynki, podglad, wysylka AJAX).
|
||||
@@ -46,28 +53,28 @@
|
||||
- Nowy partial: `resources/views/orders/partials/email-send-modal.php`.
|
||||
- Nowy SCSS: `resources/scss/modules/_email-send.scss` (modal overlay, podglad, style).
|
||||
|
||||
## 2026-03-15 (Phase 13 — DB + Skrzynki pocztowe)
|
||||
## 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_client` z pelnym handshake (EHLO → STARTTLS → AUTH LOGIN) — bez zewnetrznych bibliotek.
|
||||
- Test polaczenia SMTP przez natywny `stream_socket_client` z 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.
|
||||
- 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 na `static` — `information_schema` odpytywany co najwyzej raz na cykl PHP zamiast raz per instancja.
|
||||
- Dodano migracje `20260314_000048_add_orders_performance_indexes.sql` — indeksy na `orders`: `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 `$_SESSION` do `app_settings` (klucz `cron_web_last_run_at`) — eliminuje wielokrotne uruchamianie crona przy wielu aktywnych sesjach.
|
||||
- Deduplikacja migracji `000014` → `000014b` (kolizja z `create_product_integration_translations`).
|
||||
- 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 na `static` — `information_schema` odpytywany co najwyzej raz na cykl PHP zamiast raz per instancja.
|
||||
- Dodano migracje `20260314_000048_add_orders_performance_indexes.sql` — indeksy na `orders`: `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 `$_SESSION` do `app_settings` (klucz `cron_web_last_run_at`) — eliminuje wielokrotne uruchamianie crona przy wielu aktywnych sesjach.
|
||||
- Deduplikacja migracji `000014` → `000014b` (kolizja z `create_product_integration_translations`).
|
||||
- `AllegroStatusSyncService::sync()` zwraca `ok:false` dla kierunku `orderpro_to_allegro` (wczesniej false-positive `ok:true`). Opcja UI oznaczona jako `disabled` z `(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()` → inline `background-color`).
|
||||
- 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()` → inline `background-color`).
|
||||
- Ciemniejsze obramowanie pol formularzy: `--c-border` zmieniony z `#e2e8f0` na `#b0bec5`.
|
||||
- Hotfix SSL: `getCaBundlePath()` zwraca `null` gdy zaden CA bundle nie znaleziony — `CURLOPT_CAINFO` ustawiany warunkowo, cURL uzywa systemowego CA na serwerze.
|
||||
- Hotfix SSL: `getCaBundlePath()` zwraca `null` gdy zaden CA bundle nie znaleziony — `CURLOPT_CAINFO` ustawiany warunkowo, cURL uzywa systemowego CA na serwerze.
|
||||
|
||||
## 2026-03-08
|
||||
- Poprawiono date podjazdu kuriera w payloadzie Apaczka:
|
||||
@@ -128,7 +135,7 @@
|
||||
- Poprawiono diagnostyke bledow tworzenia przesylki Apaczka:
|
||||
- `ApaczkaShipmentService` przekazuje teraz `receiver_point_id` do payloadu `receiver.point` (oraz `sender_point_id` do `sender.point`),
|
||||
- dodano walidacje wymagan uslugi na podstawie `service_structure` (np. wymagany punkt odbioru/nadania),
|
||||
- dla bledu API `Brak wyceny dla podanych parametrów zamówienia` komunikat zawiera rozszerzona diagnostyke (service_id/nazwa/supplier, punkt odbioru/nadania, gabaryt/waga) i hint o niedopasowaniu uslugi do typu punktu.
|
||||
- dla bledu API `Brak wyceny dla podanych parametrĂłw zamĂłwienia` komunikat 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:
|
||||
- `ShopproOrdersSyncService` wykrywa fakture nie tylko po `is_invoice`/`invoice.required`, ale takze po danych firmowych (`firm_name`/`firm_nip`),
|
||||
- `ShopproOrdersSyncService::mapAddresses(...)` zapisuje adres `invoice` (firma, NIP, adres) na podstawie pol `invoice`/`billing*`/`firm_*`,
|
||||
@@ -142,7 +149,7 @@
|
||||
- widok `resources/views/shipments/prepare.php` wyswietla ten komunikat bezposrednio pod informacja o metodzie z zamowienia.
|
||||
- Poprawiono UX wyszukiwania w selectach mapowania form dostawy (zakladki `Formy dostawy`):
|
||||
- `resources/views/settings/allegro.php` przeszlo z przebudowy opcji `<select>` na tryb bezpieczny (`focus first match` bez modyfikacji listy opcji),
|
||||
- eliminuje przypadki „znikajacych” opcji i problem z wyborem uslugi po zmianie przewoznika na `Apaczka`,
|
||||
- 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`),
|
||||
@@ -188,7 +195,7 @@
|
||||
- `ShopproOrdersSyncService` mapuje `inpost_paczkomat`/`orlen_point` do adresu `delivery` (punkt, ulica, kod, miasto),
|
||||
- zapisuje `parcel_external_id` i `parcel_name` dla punktu odbioru,
|
||||
- `delivery` dziedziczy 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ł`.
|
||||
- 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):
|
||||
- `ShopproOrdersSyncService` mapuje kwoty zamowienia z `summary` i `paid` (fallback), ceny pozycji z `price_brutto`,
|
||||
- poprawiono laczenie payloadow `orders/list` i `orders/get|details` (zachowanie kluczowych pol z listy),
|
||||
@@ -238,7 +245,7 @@
|
||||
- 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_direction` jesli brak.
|
||||
- Rozszerzono `ShopproOrdersSyncService` o opcje uruchomienia filtrowanego po `integration_id` i z pominięciem flagi `orders_fetch_enabled` (wykorzystane przez cron synchronizacji statusow).
|
||||
- Rozszerzono `ShopproOrdersSyncService` o opcje uruchomienia filtrowanego po `integration_id` i z pominięciem flagi `orders_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`,
|
||||
@@ -305,7 +312,7 @@
|
||||
dla srodowisk, gdzie tabela `integrations` zostala odtworzona pozniej niz pierwotne migracje shopPRO.
|
||||
- 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 dla `Statusy/Ustawienia/Formy dostawy`.
|
||||
- dodano przełącznik instancji nad zakladkami (`Wybrana integracja`) dostepny globalnie dla `Statusy/Ustawienia/Formy dostawy`.
|
||||
|
||||
## 2026-03-06
|
||||
- Fix: synchronizacja statusow Allegro nie aktualizowala zamowien.
|
||||
@@ -508,7 +515,7 @@
|
||||
- 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 `_`.
|
||||
(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),
|
||||
@@ -568,7 +575,7 @@
|
||||
- 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`).
|
||||
- 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),
|
||||
@@ -613,3 +620,4 @@
|
||||
- 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.
|
||||
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
|
||||
37. [x] Nie działa zapisywanie numer REGON
|
||||
38. [x] Customowe przyciski paczek
|
||||
39. [] Zamian głównego koloru przycisków z niebieskiego na inny (bo się z nagłówkami myli)
|
||||
39. [x] Zmiana głównego koloru przycisków z niebieskiego na inny (bo się z nagłówkami myli)
|
||||
40. [] Usunąć przycisk "Drukuj etykiety" z widoku https://orderpro.projectpro.pl/orders/list razem z mechanizmem, który to obsługuje
|
||||
41. [] Jaki jest sens tylu logów z importu allegro np w tym zamówieniu https://orderpro.projectpro.pl/orders/29, skąd taka ilość, co jest pobierane i sprawdzane?
|
||||
42. [] Nowy zdarzenie w zadaniach automatyczny -> zmiana statusu przesyłki, oraz nowe waruneki dla zdarzenia "zmiana statusu przesyłki": przesyłka zarejestrowana, przesyłka do odbioru, przesyłka nadana w punkcie, przesyłka odebrana, przesyłka anulowana, przesyłka nieodebrana, przesyłka odebrana (zwrot), chyba że takich statusów się nie da to trzeba sprawdzić jakie się da.
|
||||
43. [] Usuwanie wpisu z kolejki druku etykiet
|
||||
43. [] Usuwanie wpisu z kolejki druku etykiet
|
||||
|
||||
Reference in New Issue
Block a user