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

95 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 |
---