Files
orderPRO/.paul/MILESTONES.md
Jacek Pyziak 22ce87efe2 chore: complete milestone v0.3 — Moduł Paragonów
Archive milestone, evolve PROJECT.md, reorganize ROADMAP.md.
5 phases, 5 plans: DB foundation, config, issuing, preview/print/PDF, list+XLSX.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 21:21:59 +01:00

4.8 KiB
Raw Permalink Blame History

Milestones

Completed milestone log for this project.

Milestone Completed Duration Stats
v0.1 Initial Release 2026-03-13 2 days 6 phases, 15 plans
v0.2 Pre-Expansion Fixes 2026-03-15 2 days 1 phase, 5 plans
v0.3 Moduł Paragonów 2026-03-15 1 day 5 phases, 5 plans

v0.3 Moduł Paragonów

Completed: 2026-03-15 Duration: 1 day (2026-03-15)

Stats

Metric Value
Phases 5 (8-12)
Plans 5
Files changed ~25

Key Accomplishments

  • DB Foundation: 4 migracje (receipts, receipt_configs, receipt_number_counters, company_settings extended)
  • Konfiguracja paragonów: CRUD w Ustawienia > Księgowość — wielokonfiguracyjne szablony numeracji
  • Wystawianie paragonów: Formularz z zamówienia, snapshoty JSON (seller/buyer/items), atomowe numerowanie INSERT ON DUPLICATE KEY UPDATE
  • Podgląd i druk: HTML preview w layoucie, standalone print z auto window.print(), PDF via dompdf v3.1
  • Sekcja Księgowość: Lista paragonów z filtrami, paginacją, sortowaniem, zaznaczaniem checkboxami
  • Eksport XLSX: PhpSpreadsheet v5.5 — eksport zaznaczonych lub wszystkich z filtra (POST + CSRF)
  • Moduł Accounting: Osobny namespace App\Modules\Accounting z ReceiptController, AccountingController, ReceiptRepository

Key Decisions

Decision Rationale
Snapshot pattern: seller/buyer/items jako JSON Dane zamrożone w momencie wystawienia — niezależne od zmian źródła
Atomowe numerowanie: INSERT ON DUPLICATE KEY UPDATE Bezpieczne kolejne numery paragonów bez race conditions
Moduł Accounting w osobnym namespace Separacja od Settings — przyszłe rozszerzenie księgowości
dompdf v3.1 server-side PDF Standard PHP, DejaVu Sans dla polskich znaków
PhpSpreadsheet v5.5 dla XLSX Lepszy od CSV dla księgowości — formatowanie, polskie znaki
POST eksport z CSRF + dwa tryby Bezpieczny; zaznaczone IDs lub wszystkie z filtra
ftp-kr vendor/ nie ignorowany Zmiana z /vendor na /vendor/bin — auto-upload zależności na serwer

v0.1 Initial Release

Completed: 2026-03-13 Duration: 2 days (2026-03-12 → 2026-03-13)

Stats

Metric Value
Phases 6
Plans 15
Files changed ~45

Key Accomplishments

  • AllegroTokenManager wydzielony z 4 klas — usunięto ~85 linii duplikatu logiki OAuth
  • StringHelper centralizuje 19 kopii helperów (nullableString, normalizeDateTime, normalizeColorHex) z 15+ klas
  • CronHandlerFactory jako jedyne miejsce kompozycji crona — naprawiono rozbieżność Application.php / bin/cron.php + 2 bugi w zależnościach
  • ZPL label page size naprawiony — martwy warunek 'ZPL' ? 'A6' : 'A6''ZPL' ? 'A6' : 'A4'
  • AllegroStatusSyncService — kursor last_status_checked_at eliminuje skanowanie wszystkich zamówień
  • ShopproOrderSyncStateRepository — poprawna zależność (poprzednio używano Allegro repo)
  • CSRF standardization_csrf_token_token w całym projekcie
  • 5 kompensujących migracji zaadnotowanych — DB_SCHEMA.md ma sekcję Compensating Migrations
  • Flash::set()/Flash::get() — 10 bezpośrednich $_SESSION writes zastąpiono w kontrolerach
  • Typowane wyjątki — hierarchia OrderProException (6 klas) eliminuje 95× RuntimeException
  • Stałe IntegrationSources + RedirectPaths — 40+ powtarzających się literałów zebranych w 2 klasy
  • Złożoność kognitywna — loadDeliveryServices() w 2 kontrolerach spłaszczone z 5 do 2 poziomów zagnieżdżenia
  • ShopproOrdersSyncService podzielony 39→9 metod via ShopproOrderMapper + ShopproProductImageResolver
  • AllegroIntegrationController podzielony 35→25 metod via 2 nowe kontrolery mapowań
  • SonarQube S1448 zredukowane 6x → 2x; S112 z 95x do 0; S1192 z 40x do 0

Key Decisions

Decision Rationale
AllegroTokenManager wydzielony z 4 klas Eliminacja duplikacji logiki odświeżania tokenów
StringHelper jako final static class Centralizacja 19 kopii helperów
CronHandlerFactory — jedyne miejsce kompozycji crona Synchronizacja Application.php i bin/cron.php
CSRF pole: _token (nie _csrf_token) Standard dla całego projektu
Flash::set()/Flash::get() zamiast $_SESSION Jeden mechanizm flash w całej aplikacji
validateXxxInput(): ?string / validateXxxAccess(): ?Response Wzorzec helperów walidacji — ≤3 return statements
God class split via move-method Czysty podział bez zmiany logiki — ShopproOrdersSyncService 39→9 metod
AllegroIntegrationController pozostaje przy 25 metodach Pełny podział wymaga AllegroImportScheduleService — deferred