- Przycisk "Drukuj" w prepare.php i show.php z AJAX + duplikat protection - Bulk print z listy zamówień (checkboxy + header action) - Kolejka wydruku w Ustawienia > Drukowanie (filtr statusu, retry) - POST /api/print/jobs/bulk endpoint (package_ids + order_ids) - ensureLabel() auto-download przez ShipmentProviderRegistry - Apaczka carrier_id = nazwa usługi, kolumna Przewoznik - Tab persistence (localStorage), label file_exists check - Fix use statement ApaczkaApiClient, redirect po utworzeniu przesyłki - Phase 17 (receipt duplicate guard) + Phase 18 (print queue backend) docs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
10 KiB
Project State
Project Reference
See: .paul/PROJECT.md (updated 2026-03-12)
Core value: Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów sprzedaży i nadawać przesyłki bez przełączania się między platformami. Current focus: v0.7 Zdalne drukowanie etykiet — Phase 19 Complete, transition required
Current Position
Milestone: v0.7 Zdalne drukowanie etykiet Phase: [2] of [3] (UI Integration) — COMPLETE ✓ Plan: 19-01 — loop closed Status: Phase 19 complete — transition required Last activity: 2026-03-22 — UNIFY complete, sonar-scanner ✓
Progress:
- v0.1 Initial Release: [██████████] 100% ✓
- v0.2 Pre-Expansion Fixes: [██████████] 100% ✓
- v0.3 Moduł Paragonów: [██████████] 100% ✓
- v0.4 Moduł E-mail: [██████████] 100% ✓
- v0.5 Moduł Automatyzacji: [██████████] 100% ✓
- v0.6 Poprawki UX: [██████████] 100% ✓
- v0.7 Zdalne drukowanie etykiet: [██████░░░░] 67%
- Phase 18: [██████████] 100% ✓ (1/1 plans)
- Phase 19: [██████████] 100% ✓ (1/1 plans)
Loop Position
Current loop state:
PLAN ──▶ APPLY ──▶ UNIFY
✓ ✓ ✓ [Loop complete — phase transition required]
Accumulated Context
Decisions
| Data | Decyzja | Faza | Wpływ |
|---|---|---|---|
| 2026-03-12 | AllegroTokenManager wydzielony z 4 klas OAuth | Faza 01 | Centralizacja logiki tokenów, brak duplikacji |
| 2026-03-12 | StringHelper jako final static class w Core/Support | Faza 01 | 19 duplikatów helperów usunięte z 15 klas |
| 2026-03-13 | CronHandlerFactory jako jedyne miejsce kompozycji crona | Faza 02 | Application.php i bin/cron.php zsynchronizowane; 2 bugi naprawione |
| 2026-03-13 | Pole CSRF w formularzach: _token (nie _csrf_token) |
Faza 03 | Ustandaryzowane w OrdersController, ShipmentController i 2 widokach |
| 2026-03-13 | Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Faza 05 | OrdersController i ShipmentController zmigrowane; jeden wzorzec w całej aplikacji |
| 2026-03-13 | validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperów walidacji | Faza 06 | Redukcja return statements do ≤3; wzorzec do użycia w kolejnych planach |
| 2026-03-15 | dg/bypass-finals zamiast usuwania final z klas produkcyjnych | Faza 07 | Testy mockują final classes bez zmiany konwencji projektu |
| 2026-03-15 | 3 bugi use-statement naprawione (odkryte przez testy) | Faza 07 | RuntimeException catch w 401 retry wreszcie działa; AllegroOAuthException rzucane poprawnie |
| 2026-03-15 | InPost ShipX API (nie Allegro WZA) jako natywny provider | Faza 07 | InpostShipmentService niezależny od Allegro; workaround remap usunięty |
| 2026-03-15 | vendor/ dodany do ftp-kr ignore; deploy vendor ręcznie | Faza 07 | Auto-upload nie nadpisze vendor/ na serwerze |
| 2026-03-15 | Snapshot pattern: seller/buyer/items jako JSON | Faza 10 | Dane zamrożone w momencie wystawienia paragonu |
| 2026-03-15 | Natywny stream_socket_client do testu SMTP (bez PHPMailer) | Faza 13 | Test połączenia SMTP bez nowych zależności; PHPMailer w fazie 15 |
| 2026-03-15 | IntegrationSecretCipher do szyfrowania haseł SMTP | Faza 13 | Reuse istniejącego AES-256-CBC+HMAC; spójny wzorzec |
| 2026-03-15 | Auto-reset is_default na email_mailboxes przy save | Faza 13 | Tylko jedna domyślna skrzynka |
| 2026-03-15 | Atomowe numerowanie: INSERT ON DUPLICATE KEY UPDATE | Faza 10 | Bezpieczne kolejne numery paragonów |
| 2026-03-15 | Moduł Accounting w App\Modules\Accounting | Faza 10 | Separacja od Settings |
| 2026-03-15 | dompdf v3.1 server-side PDF generation | Faza 11 | Nowa zależność composer; wymaga vendor/ na serwerze |
| 2026-03-15 | ftp-kr vendor/ nie ignorowany (zmiana na /vendor/bin) | Faza 11 | Automatyczny upload vendor/ przy zmianach; rewizja decyzji z fazy 07 |
| 2026-03-15 | PhpSpreadsheet v5.5 dla eksportu XLSX | Faza 12 | Nowa zależność composer; XLSX lepszy od CSV dla księgowości |
| 2026-03-15 | POST eksport z CSRF + dwa tryby (zaznaczone/wszystkie z filtra) | Faza 12 | Bezpieczny eksport; selectable table-list reuse |
| 2026-03-16 | ATTACHMENT_TYPES jako centralna mapa typów załączników | Faza 14 | Rozszerzalność: nowy typ = 1 linia w tablicy PHP |
| 2026-03-16 | Quill.js 2.0.3 CDN dla edytora szablonów | Faza 14 | Brak build pipeline; CDN prostszy |
| 2026-03-17 | PHPMailer v7.0.2 jako SMTP transport | Faza 15 | Nowa zależność composer; in-memory attachments (addStringAttachment) |
| 2026-03-17 | Email history jako wpisy w order_activity_log (nie osobna sekcja) | Faza 15 | Spójność z istniejącym UX — jeden timeline zamiast fragmentacji |
| 2026-03-17 | VariableResolver wydzielony z EmailTemplateController | Faza 15 | Reuse logiki zmiennych; resolwer niezależny od kontrolera szablonów |
Skill Audit (Faza 19, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ✓ | 0 nowych blocker/critical; 4 minor/major zalogowane w DOCS/todo.md |
Skill Audit (Faza 18, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
Skill Audit (Faza 17, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ✓ | 0 nowych issues na zmienionych plikach |
Skill Audit (Faza 15, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym milestone |
Skill Audit (Faza 14, Plan 02)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
Skill Audit (Faza 13, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
Skill Audit (Faza 12, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
Skill Audit (Faza 11, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
Skill Audit (Faza 10, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
Skill Audit (Faza 07, Plan 05)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Zainstalowany (v4.3.5) ale nie uruchomiony w tym planie |
Skill Audit (Faza 07, Plan 04)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
Skill Audit (Faza 07, Plan 03)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
Skill Audit (Faza 07, Plan 02)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
Skill Audit (Faza 07, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
Skill Audit (Faza 06, Plan 06)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
Skill Audit (Faza 06, Plan 02)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH; S1142 violations powinny spaść o ~12-15 po uruchomieniu |
Skill Audit (Faza 05, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — uruchomić ręcznie przed następnym planem z kodem PHP |
Skill Audit (Faza 04, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — plan czysto dokumentacyjny (komentarze SQL, brak nowego kodu PHP); uruchomić przy kolejnym planie z kodem |
Skill Audit (Faza 03, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — przejście do UNIFY bez skanowania; uruchomić przy kolejnym planie |
Skill Audit (Faza 02, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| /code-review | ○ | Pominięto — jednolinijkowa naprawa oczywistego dead code |
| sonar-scanner | ○ | Pominięto — brak nowego kodu, zmiana kosmetyczna |
Skill Audit (Faza 01, Plan 02)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| /feature-dev | ○ | Pominięto — plan był czysto refaktoryzacyjny |
| /code-review | ○ | Pominięto — należy wywołać przed kolejnym UNIFY |
| sonar-scanner | ○ | Nie uruchomiono — należy uruchomić i zaktualizować DOCS/todo.md |
Deferred Issues
- CI/CD SonarQube — dodać GitHub Actions workflow (
.github/workflows/sonarqube.yml) który odpalasonar-scannerautomatycznie przy każdym pushu. Token projektu:sqp_8ef2748d037777cf00cf1b38534f8d435b762d7d(dodać jako GitHub SecretSONAR_TOKEN). Przypisać do fazy związanej z infrastrukturą/DevOps gdy tylko fazy zostaną zdefiniowane. - code-review — wywołać /code-review przed kolejnym UNIFY (pominięto w obydwu planach fazy 01).
- Delivery mapping "Szukaj..." layout — JS
attachSelectFilter()w allegro.php tworzy input search dla InPost/Apaczka selectów, wizualnie wygląda jakby należał do wiersza powyżej. Pre-existing bug, do naprawy osobno.
Git State
Last commit: pending — Phase 15 + milestone v0.4 complete, awaiting commit Branch: main Feature branches merged: none
Blockers/Concerns
Brak.
Session Continuity
Last session: 2026-03-22 Stopped at: Phase 19 complete — transition required Next action: Phase transition (ROADMAP update, git commit, route to next phase) Resume file: .paul/phases/19-ui-integration/19-01-SUMMARY.md Resume context:
- v0.1: COMPLETE ✓ (6 phases, 15 plans)
- v0.2: COMPLETE ✓ (1 phase, 5 plans)
- v0.3: COMPLETE ✓ (5 phases, 5 plans) — Moduł Paragonów
- v0.4: COMPLETE ✓ (3 phases, 4 plans) — Moduł E-mail
- v0.5: COMPLETE ✓ (1 phase, 2 plans) — Moduł Automatyzacji
- v0.6: COMPLETE ✓ (1 phase, 1 plan) — Poprawki UX
- v0.7: IN PROGRESS — Phase 18 ✓, Phase 19 ✓, Phase 20 next (2/3 phases complete)
STATE.md — Updated after every significant action