Files
orderPRO/.paul/MILESTONES.md
2026-04-19 22:43:02 +02:00

8.7 KiB
Raw 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
v3.0 Mobile Responsive 2026-04-19 ~5 tygodni 52 phases shipped, 55 plans

v3.0 Mobile Responsive

Completed: 2026-04-19 Duration: ~5 tygodni (2026-03-15 → 2026-04-19)

Stats

Metric Value
Phases shipped 52 (z zakresu 52105)
Phases deferred 1 (Phase 68 Code Deduplication Refactor)
Phases cancelled 1 (Phase 99 Order Delivery & Payment Edit)
Plans completed 55
Files changed ~250+

Key Accomplishments

  • Mobile UI core: hamburger menu, slide-in sidebar, status panel toggle, image hover zoom, collapsed sidebar fix (Phase 5255).
  • Order payments i automation events: reczne platnosci + push set_paid do shopPRO; payment.status_changed, order.status_changed, order.status_aged, order.imported, shipment.created/status_changed, warunki statusowe i payment_method (Phase 5661, 84, 9596, 98).
  • Import re-import safety + personalizacja: ochrona pol lokalnych przy re-imporcie shopPRO, activity log rozroznia import/aktualizacje, custom_fields + message jako personalizacja pozycji (Phase 6263, 75, 79).
  • Receipts: DATETIME precision, koszt wysylki jako pozycja, bugfix buildItemsSnapshot/delivery_price (Phase 64, 70, 90).
  • PAUL framework: Delegated Apply + Codex Executor (Phase 65, 67).
  • Tracking Allegro i shopPRO: English statuses, pull mapping, push statusow orderPRO→shopPRO/Allegro, Delivery Tracking (Phase 66, 69, 7475, 83).
  • Przesylki: preset auto-submit, przekazywanie waybill do Allegro, Apaczka COD bank account, Apaczka long-street truncation, Weekend Delivery (InPost), delete z szczegolow zamowienia, User-Agent header z publiczna /info (Phase 78, 8689, 102, 104).
  • Listowanie i wyszukiwanie: per_page w localStorage, search po produkcie, tooltipy, AJAX refresh, status group filter, global search w topbarze, aged highlight, popup preview (Phase 7273, 8082, 85, 9495, 101).
  • Remember Me login, buyer name copy, info page (Phase 9293, 89).
  • Print pipeline: resilient polling 3-layer timeout w OrderPROPrint, preset scope + print UX, auto-click najnowszej etykiety (Phase 91, 100, 103).
  • Project generation (PSD): polautomatyczne generowanie projektow graficznych z zamowien + external_status_idstatus_code rename + flagi statusu projektu (Phase 97).
  • Statistics (ostatnia faza): dzienny raport zamowien /statistics/orders z filtrami (daty/kanaly/grupy statusow) i stopka Podsumowanie; hotfix collation MySQL; fallback netto 23% VAT (Phase 105).

Key Decisions

Decision Rationale
Event order.imported tylko przy pierwszym imporcie + backfill statusow Unikniecie duplikatow reakcji automatyzacji, poprawa starych zamowien w_realizacji→wyslane
Push waybill do Allegro niekrytyczny dla lokalnej paczki Blad API Allegro nie blokuje utworzenia przesylki; tylko dla source=allegro
Historia automatyzacji audytowana per rule + retencja 30 dni Observability bez recznego utrzymania danych
Preset przesylek nadpisuje tylko wymiary+wage + auto-submit Spojnosc z polityka single responsibility preseta
_token CSRF field standardized Eliminacja konfliktu nazw z wczesnego _csrf_token
Statistics channelSql: CAST(int AS CHAR) COLLATE utf8mb4_unicode_ci Unikniecie 1271 Illegal mix of collations; pattern dla przyszlych raportow per-integration
Statistics netto fallback / 1.23 shopPRO nie wysyla netto ani w zamowieniu ani w items — tymczasowy fallback; docelowy fix opisany w .paul/TODO.md (STAT-NET)
Phase 68 deferred Refaktor deduplikacyjny wymaga wiekszego kontekstu — przeniesiony na pozniej

Deferred to Next Milestone

  • STAT-NET: netto z shopPRO / order_items.tax_rate (unikniecie sztywnego 23% VAT).
  • Phase 68 Code Deduplication Refactor (0/2, Planning).
  • Mobile Orders List / Mobile Order Details / Mobile Settings — TBD z tabeli ROADMAP.

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