update
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# ARCHITECTURE
|
||||
|
||||
## Zakres
|
||||
- Dokument opisuje aktualna architekture kodu (stan repo: 2026-04-18).
|
||||
- Dokument opisuje aktualna architekture kodu (stan repo: 2026-04-19).
|
||||
- Zrodlem prawdy sa: `src/`, `routes/web.php`, `database/migrations/`.
|
||||
|
||||
## Warstwy systemu
|
||||
@@ -21,6 +21,7 @@
|
||||
- `Automation`: reguly event-condition-action, historia wykonan.
|
||||
- `Settings`: konfiguracja statusow, integracji, cron, skrzynek, szablonow, drukowania, mapowan projektow.
|
||||
- `Printing`: API kolejkowania wydruku i klucze API dla klienta desktop.
|
||||
- `Statistics`: raporty i agregacje dzienne zamowien z filtrowaniem po datach, kanalach i grupach statusow.
|
||||
- `Cron`: synchronizacje integracji i zadania utrzymaniowe.
|
||||
- `Info`: endpoint diagnostyczny `/info`.
|
||||
|
||||
@@ -35,6 +36,8 @@
|
||||
- `App\Modules\Printing\PrintApiController`: endpointy kolejki wydruku (session/api-key).
|
||||
- `App\Modules\Automation\AutomationService`: trigger eventow, ewaluacja warunkow, wykonanie akcji.
|
||||
- `App\Modules\Settings\ProjectMappingController`: CRUD mapowania produkt -> skrypt generacji projektu.
|
||||
- `App\Modules\Statistics\OrdersStatisticsController`: endpoint `/statistics/orders`, walidacja filtrow i przygotowanie modelu tabeli.
|
||||
- `App\Modules\Statistics\OrdersStatisticsRepository`: agregacje SQL dzienne (`COUNT`, `SUM total_net`, `SUM total_with_tax`) i mapowanie filtrow kanal/status-group.
|
||||
|
||||
## Integracje zewnetrzne
|
||||
- Allegro: OAuth, import zamowien, sync statusow push/pull, mapowania statusow i dostaw.
|
||||
@@ -47,6 +50,18 @@
|
||||
- Controller waliduje dane i CSRF, wywoluje Repository/Service.
|
||||
- Response: HTML (widoki) albo JSON (endpointy AJAX/API).
|
||||
|
||||
### Przeplyw Statystyk Zamowien
|
||||
- Route: `GET /statistics/orders` (wymaga sesji uzytkownika).
|
||||
- Controller:
|
||||
- parsuje `date_from`, `date_to`, `channels[]`, `status_groups[]`,
|
||||
- ustawia domyslne grupy statusow (wszystkie poza grupa `anulowane`),
|
||||
- pobiera agregaty dzienne z repozytorium,
|
||||
- buduje tabele z dynamicznymi kolumnami kanalow i stopka `Razem`.
|
||||
- Repository:
|
||||
- liczy kanaly jako `allegro` oraz `shoppro:{integration_id}`,
|
||||
- dla statusu efektywnego allegro stosuje mapowanie `allegro_order_status_mappings`,
|
||||
- zwraca zagregowane rekordy dzien/kanal.
|
||||
|
||||
## Glowny przeplyw Cron
|
||||
- Trigger:
|
||||
- `GET /cron` (public token) lub web-cron w `Application::maybeRunCronOnWeb`.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Zakres i zrodlo prawdy
|
||||
- Schemat wynika z migracji SQL w `database/migrations`.
|
||||
- Dokument odzwierciedla stan repo na 2026-04-18 (migracje do `20260413_000100`).
|
||||
- Dokument odzwierciedla stan repo na 2026-04-19 (migracje do `20260413_000100`).
|
||||
|
||||
## Ostatnie istotne migracje
|
||||
- `20260413_000100_ensure_orders_delivery_payment_columns.sql`
|
||||
@@ -176,3 +176,7 @@
|
||||
- Migracje `ensure_` i `000100` sa idempotentne i kompensuja roznice miedzy srodowiskami.
|
||||
- Rename `orders.external_status_id -> status_code` wymaga, aby nowe query i dokumentacja uzywaly tylko `status_code`.
|
||||
- `delivery_price` jest backfillowane z JSON payloadow importu (Allegro/shopPRO).
|
||||
|
||||
## Zmiany 2026-04-19
|
||||
- Brak zmian schematu bazy danych dla funkcji `Statystyki -> Zamowienia`.
|
||||
- Raport korzysta z istniejacych kolumn i tabel: `orders`, `integrations`, `order_status_groups`, `order_statuses`, `allegro_order_status_mappings`.
|
||||
|
||||
@@ -1,3 +1,26 @@
|
||||
# TECH_CHANGELOG
|
||||
|
||||
> Chronologiczny log zmian technicznych — co i dlaczego.
|
||||
|
||||
## 2026-04-19 - Statystyki zamowien (menu + raport dzienny)
|
||||
|
||||
- Dodano nowy modul `Statistics`:
|
||||
- `OrdersStatisticsController` (obsluga filtrow i render strony `/statistics/orders`).
|
||||
- `OrdersStatisticsRepository` (agregacje dzienne po kanalach i grupach statusow).
|
||||
- Dodano nowa pozycje menu: `Statystyki -> Zamowienia`.
|
||||
- Dodano widok raportowy z filtrem zakresu dat, multiselectem kanalow i multiselectem grup statusow.
|
||||
- Dodano tabele dzienna z metrykami `Ilosc`, `Netto`, `Brutto` per kanal oraz stopka `Razem`.
|
||||
- Dodano tlumaczenia `statistics.orders.*` i `navigation.statistics*`.
|
||||
- Brak zmian migracyjnych i brak zmian schematu bazy danych.
|
||||
|
||||
## 2026-04-19 - Fix: Statystyki nie pokazywaly zamowien (kolizja collation)
|
||||
|
||||
- `OrdersStatisticsRepository::channelSql()` generowal wyrazenie `CONCAT("shoppro:", CAST(integration_id AS CHAR))`, ktore w MySQL dawalo wynik z collation `utf8mb4_bin`. W zestawieniu z parametrami bindowanymi (`utf8mb4_general_ci`) MySQL rzucal `SQLSTATE[HY000] 1271 Illegal mix of collations for operation 'in'`.
|
||||
- Blad byl polykany przez `try/catch (Throwable)` w `aggregateByDay()`, przez co widok dostawal pusta tablice i nie pokazywal zadnych zamowien.
|
||||
- Fix: dodano jawne `COLLATE utf8mb4_unicode_ci` na `CAST(integration_id AS CHAR)` oraz na calym wyrazeniu `CASE` zwracajacym `channel_key`, tak aby klucz kanalu mial spojne collation zgodne z `orders.source`.
|
||||
|
||||
## 2026-04-19 - Statystyki: fallback netto 23% VAT
|
||||
|
||||
- `OrdersStatisticsRepository::netAmountSql()` dostal fallback: jesli `orders.total_without_tax` jest `NULL` lub `0`, a `orders.total_with_tax` ma wartosc, netto wyliczane jest jako `ROUND(total_with_tax / 1.23, 2)`.
|
||||
- Uzasadnienie: shopPRO nie wysyla netto ani na zamowieniu ani w pozycjach (`order_items.original_price_without_tax` jest puste), wiec bez fallbacku kolumna `Netto` w statystykach pokazywala 0.
|
||||
- Uwaga: fallback zaklada 23% VAT. Ostateczne rozwiazanie (prawidlowy netto z shopPRO / z `order_items.tax_rate`) opisane w `.paul/TODO.md` (tag `STAT-NET`).
|
||||
|
||||
Reference in New Issue
Block a user