- 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.
21 KiB
21 KiB
Tech Changelog
2026-03-06
- 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.