- AccountingController::export(): new headers (Numer | Data wystawienia | Kwota brutto | Kwota netto | Stawka VAT | Kwota VAT), removed Data sprzedazy/Konfiguracja/Nr zamowienia/Nr referencyjny - buildVatBreakdown() helper groups items_json by vat rate, emits one XLSX row per (receipt x rate); legacy receipts (no `vat` in snapshot) fallback to net=brutto/1.23 - ReceiptService::buildItemsSnapshot(): writes `vat` per item from order_items.tax_rate (fallback 23.0); shipping cost item gets vat=23.0 - RECEIPT-NET-FIX deferred (.paul/codebase/todo.md): ReceiptService::issue() still saves total_net=total_gross Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.9 KiB
4.9 KiB
TODO — odlozone zadania techniczne
Lista nieformalnych zadan do zrobienia pozniej. Kazdy wpis ma wlasny tag (np.
STAT-NET) zeby mozna go bylo zlinkowac z komentarzy w kodzie.
RECEIPT-NET-FIX — receipts.total_net powinno byc realnym netto (data: 2026-05-12)
Kontekst
- Phase 123-01 — eksport paragonow XLSX z VAT breakdown.
ReceiptService::issue()(linie 81-82) zapisujetotal_net = total_gross(kopia, nie realne netto). To znany bug, ale nie poprawiany w 123 (poza zakresem).- Phase 123 fallback dla legacy paragonow musi liczyc
net = brutto/1.23zamiast brac ztotal_net, bo inaczej VAT = 0.
Zadania
- W
ReceiptService::buildItemsSnapshot()agregujtotal_netz pozycji (per stawka) —lineTotal / (1 + vat/100). - Zwroc oba:
total_net(suma netto per pozycja) itotal_gross(suma brutto). Uzyjtotal_netw INSERT zamiast kopii brutto. - Po deploy mozna uproscic legacy fallback w
AccountingController::buildVatBreakdown()zeby brakvat-> uzywaltotal_netz bazy. - Backfill historycznych paragonow opcjonalny (eksport teraz dziala bez tego).
INVOICE-IDEMP-115 — idempotencja podwojnego POST do Fakturowni (data: 2026-05-10)
Kontekst
- Phase 115-01 — wystawianie faktury z zamowienia (delegacja Fakturownia).
- Flow:
InvoiceService::issueDelegated()-> POST do Fakturowni -> on success INSERT doinvoices. - Edge case: faktura zostala utworzona w Fakturowni, ale odpowiedz nie dotarla (timeout, network). Operator widzi blad, klika "Wystaw fakture" ponownie -> drugi POST -> Fakturownia tworzy DRUGA fakture.
Zadania
- Dorzucic idempotency-key (np. UUID per attempt zachowany w sesji albo w
invoicesze statusempending_external). - Sprawdzic czy Fakturownia API wspiera nag/lowek
Idempotency-Keylub deduplikacje po referencji. - Alternatywa: po bledzie API, przed kolejnym POST, query Fakturowni
GET /invoices.json?q=<order_reference>zeby sprawdzic czy faktura juz istnieje.
Status
- Odlozone — operator musi recznie zweryfikowac w panelu Fakturowni przy bledach API.
STAT-NET — netto zamowien w statystykach (data: 2026-04-19)
Kontekst
- Statystyki
/statistics/orderspokazujaNettoper dzien/kanal. - shopPRO nie wysyla kwoty netto ani na poziomie zamowienia (
orders.total_without_tax), ani produktow (order_items.original_price_without_tax— rowniez puste). - Allegro:
orders.total_without_taxrowniez moze byc puste. - Obecnie dziala fallback: netto =
ROUND(total_with_tax / 1.23, 2)gdy kolumna netto jest pusta/zerowa. Zaklada 23% VAT dla wszystkich.
Zadania
- Ustalic zrodlo prawdy dla netto:
- Sprawdzic, czy API shopPRO udostepnia
price_nettolubtotal_netto(payload zawiera tylkoprice_brutto+vat). - Jesli TAK → rozszerzyc mapping importu (
src/Modules/ShopPro/...) i backfill migracja dla historycznych rekordow. - Jesli NIE → liczyc netto deterministycznie z
order_items.original_price_with_taxiorder_items.tax_rate(wtedy nie zakladamy sztywno 23%).
- Sprawdzic, czy API shopPRO udostepnia
- Backfill historycznych zamowien po wdrozeniu zrodla netto (migracja SQL + idempotentny skrypt).
- Zastapic fallback /1.23 w
OrdersStatisticsRepository::netAmountSql():- Preferuj
orders.total_without_tax. - Jesli brak —
SUM(order_items.original_price_with_tax / (1 + order_items.tax_rate / 100) * order_items.quantity). - Stala 1.23 tylko jako ostateczny fallback przy braku item-levelu.
- Preferuj
Linki w kodzie
src/Modules/Statistics/OrdersStatisticsRepository.php- metodanetAmountSql()(komentarzTODO(STAT-NET)).
DELIVERY-STATUS-MGMT — zarzadzanie statusami znormalizowanymi z panelu (data: 2026-04-26)
Kontekst
- Aktualnie statusy znormalizowane (
created,confirmed,picked_up,in_transit, itd.) sa stalymi w kodzie (DeliveryStatus.php). - Dodanie nowego statusu wymaga zmiany kodu + deploymentu.
- Panel ustawien pozwala tylko mapowac surowe statusy kurierow na istniejace statusy znormalizowane - nie mozna dodac nowego znormalizowanego statusu z UI.
Zadania
- Wyniesc liste statusow znormalizowanych do tabeli DB (np.
delivery_statuses) z kolumnami:key,label_pl,color,sort_order,is_terminal,is_system. - Statusy systemowe (
delivered,returned,cancelled) oznaczac flagais_system = true- nieedytowalne z UI (maja specjalne znaczenie w kodzie). - Panel
/settings/delivery-statuses- CRUD dla statusow niebedacych systemowymi (dodaj, zmien etykiete/kolor, usun jesli nieuzywany). DeliveryStatus::ALL_STATUSES,LABEL_PLi badge CSS zastapic dynamicznym ladowaniem z DB (cache per-request).- Automatyzacje i mapowania kurierow - dropdown statusow znormalizowanych pobierany z DB zamiast hardcoded.
Uwagi
TERMINAL_STATUSESmusi zostac zachowane jako lista systemowych statusow koncowych - te nie powinny byc usuwalne.- Przy usuwaniu statusu znormalizowanego - blokada jesli uzywany w
delivery_status_mappingslubshipment_packages.delivery_status.