Phase 114 complete (v3.7 Invoices): - /settings/accounting jako hub-rozdroze (Paragony / Faktury) - /settings/accounting/receipts + /invoices osobne podstrony list i edycji - InvoiceConfigRepository + Controller (CRUD z walidacja delegacji) - Seed Domyslny VAT (NOT EXISTS idempotent) - invoice-config-form.js (toggle is_delegated -> integration_id) - confirm-delete.js (globalny modul OrderProAlerts.confirm) - Legacy aliasy starych endpointow /settings/accounting/save|toggle|delete Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
14 KiB
phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, patterns-established, duration, started, completed
| phase | plan | subsystem | tags | requires | provides | affects | tech-stack | key-files | key-decisions | patterns-established | duration | started | completed | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 114-accounting-configs-refactor | 01 | ui |
|
|
|
|
|
|
|
|
75min | 2026-05-10T20:30:00Z | 2026-05-10T21:45:00Z |
Phase 114 Plan 01: Accounting Configs Refactor Summary
/settings/accounting rozdzielone na osobne podstrony Paragony i Faktury z osobnym widokiem edycji konfiguracji; pelny CRUD invoice_configs z opcja delegacji do Fakturowni (warunkowy select integracji + serwerowa walidacja); seed Domyslny VAT config; globalny JS modul confirm-delete.js zastepuje rozsiane inline scripts.
Performance
| Metric | Value |
|---|---|
| Duration | ~75min |
| Started | 2026-05-10T20:30:00Z |
| Completed | 2026-05-10T21:45:00Z |
| Tasks | 3 completed (auto, inline) |
| Files created | 9 |
| Files modified | 7 |
Acceptance Criteria Results
| Criterion | Status | Notes |
|---|---|---|
| AC-1: Seed + Repository dla invoice_configs | Pass | Migracja seed idempotentna (NOT EXISTS guard). InvoiceConfigRepository::listAll() JOIN integrations zwraca integration_name. save() rzuca IntegrationConfigException gdy is_delegated=1 bez integration_id typu 'fakturownia'. |
| AC-2: CRUD invoice_configs na osobnej podstronie | Pass | /settings/accounting/invoices lista + /new + /edit + save/toggle/delete dziala. Conditional select Fakturowni dziala (po naprawie OrderProAlerts.confirm API). Delete blokuje gdy istnieja faktury (pre-check w Repo). |
| AC-3: Refaktor receipt_configs + hub | Pass | /settings/accounting to hub-rozdroze (2 karty). /settings/accounting/receipts lista w stylu spojnym z fakturami. Edycja na osobnej podstronie. Legacy aliasy starych POST endpointow zachowane. |
Accomplishments
- Pelen CRUD
invoice_configsz UI + serwerowa walidacja delegacji (krytyczna dla v3.7 - bez tego Phase 115 wystawiania faktur nie ma sensu). - Refaktor ksiegowosci na 3-poziomowa nawigacje (hub → lista → edycja) ujednolicony dla paragonow i faktur — eliminuje wczesniejszy problem dlugiego scrolla + brak miejsca na conditional fields w form faktury.
- Globalny modul
confirm-delete.jsz idempotentnym bindingiem przezdata-confirm-bound— usuwa potrzebe duplikowania inline scripts w przyszlych widokach list. - Seed
Domyslny VATinvoice config — zerowy onboarding (operator moze wystawiac faktury natychmiast po deployment). - 3 nowe Key Decisions w PROJECT.md (osobne podstrony, walidacja delegacji, legacy aliasy).
Task Commits
Inline execution (delegation: off) - wszystko w jednym commicie na koniec.
| Task | Status | Description |
|---|---|---|
| Task 1: Migration seed + InvoiceConfigRepository | Done | 1 migracja SQL + repo z walidacja delegacji + db_schema.md notka |
| Task 2: InvoiceConfigController + widoki + JS toggle + routy | Done | controller, 2 widoki (lista + edit), invoice-config-form.js, layouts/app.php script reg, 6 routes invoice |
| Task 3: Refaktor ReceiptConfigController + hub + widoki + docs + legacy aliasy | Done | controller split (hub/list/edit), accounting.php hub view, 2 nowe widoki paragonow, 6 routes receipts + 3 legacy aliasy, architecture.md + tech_changelog.md |
Files Created/Modified
| File | Change | Purpose |
|---|---|---|
database/migrations/20260511_000107_seed_default_invoice_config.sql |
Created | Idempotentny seed Domyslny VAT |
src/Modules/Settings/InvoiceConfigRepository.php |
Created | CRUD invoice_configs z walidacja delegacji |
src/Modules/Settings/InvoiceConfigController.php |
Created | UI controller dla /settings/accounting/invoices |
src/Modules/Settings/ReceiptConfigController.php |
Modified | Split index() na hub() + list() + nowa edit(). Save/toggle/delete redirect na /receipts |
resources/views/settings/accounting.php |
Refactored | Z listy+formularza na hub-rozdroze z 2 kartami |
resources/views/settings/accounting-receipts.php |
Created | Lista paragonow (table.table + badge, spojna z fakturami) |
resources/views/settings/accounting-receipt-edit.php |
Created | Formularz paragonu na osobnej podstronie |
resources/views/settings/accounting-invoices.php |
Created | Lista faktur (7 kolumn z Tryb + Konto Fakturowni) |
resources/views/settings/accounting-invoice-edit.php |
Created | Formularz faktury z conditional integration_id select |
public/assets/js/modules/invoice-config-form.js |
Created | Toggle widocznosci integration_id + dynamiczny required |
public/assets/js/modules/confirm-delete.js |
Created | Globalny handler dla .js-delete-btn (OrderProAlerts.confirm) |
resources/views/layouts/app.php |
Modified | Rejestracja 2 nowych modulow JS z cache-busting ?ver=mtime |
routes/web.php |
Modified | +use imports, +DI wiring, 12 nowych routes + 3 legacy aliasy |
.paul/codebase/db_schema.md |
Modified | Notka o seed Domyslny VAT |
.paul/codebase/architecture.md |
Modified | Nowa sekcja "Phase 114 — Accounting Configs Refactor" |
.paul/codebase/tech_changelog.md |
Modified | Wpis 2026-05-10 dla Phase 114-01 |
Decisions Made
| Decision | Rationale | Impact |
|---|---|---|
| Osobne podstrony zamiast tabow | Dlugie listy + rosnacy form faktury (conditional fields) nie zmiescilyby sie na jednej stronie z tabami | Operator widzi sekcje paragonow i faktur osobno; przyszle rozszerzenia (np. lista wystawionych faktur Phase 116) maja naturalne miejsce |
Globalny confirm-delete.js z data-confirm-bound markerem |
Stare widoki (email-mailboxes, automation, email-templates) maja inline scripts robiace to samo. Marker zapobiega podwojnemu bindowi gdy modul globalny widzi juz-bound buttony | Mozna stopniowo migrowac stare widoki usuwajac ich inline scripts bez ryzyka regresji |
OrderProAlerts.confirm({title, message, onConfirm}) API nie pozycyjne |
API biblioteki jq-alerts wymaga options-object. Pozycyjne wywolanie (title, message, callback) cicho fail'uje (callback ginie, options to string) |
Pattern dla wszystkich przyszlych confirm dialogow + udokumentowany w SUMMARY/architecture |
Legacy aliasy starych endpointow /settings/accounting/save|toggle|delete |
Brak inwentaryzacji zewnetrznych klientow/bookmark. Duplicate route registration to zero-koszt | Zero ryzyka 404 dla starych referencji; mozna usunac w przyszlym major release |
| Walidacja delegacji w Repo (nie tylko JS) | JS toggle to UX; ktos moze obejsc przez POST bez JS lub bezposrednio przez API | Bezpieczna delegacja — nie da sie zapisac is_delegated=1 bez waznego integration_id typu 'fakturownia' |
Deviations from Plan
Summary
| Type | Count | Impact |
|---|---|---|
| Auto-fixed | 1 | Drobne (bug w API call) - naprawione w czasie APPLY po user feedback |
| Scope additions | 1 | Globalny confirm-delete.js (plan zakladal tylko invoice-config-form.js) - przedluzona wartosc dla calej aplikacji |
| Deferred | 0 | - |
Total impact: Plan w pelnym zakresie + 1 wartosciowa dodatkowa rzecz (globalny confirm handler). Bez scope creep.
Auto-fixed Issues
1. [JS] OrderProAlerts.confirm pozycyjne wywolanie cicho fail'uje
- Found during: User smoke test (feedback "Usuwanie konfiguracji faktur nie dziala" → potem "Teraz pojawia sie alert z potwierdzeniem, ale potwierdzenie nic nie powoduje")
- Issue:
confirm-delete.jswywolywalwindow.OrderProAlerts.confirm(title, message, callback)jako pozycyjne argumenty. Bibliotekajquery-alerts.jsprzyjmujeconfirm(options)gdzieoptions.onConfirmto callback. Pierwsza wersja: modal nie pokazywal sie. Druga wersja (po fix #1): modal pokazywal sie, aleconfirmButton.click()resolve'owal Promise bez wywolania callback przekazanego pozycyjnie. - Fix #1: Wprowadzono
class="js-confirm-delete"+class="js-delete-btn"+ global module rejestracja w layout (zamiast inline scripts per view). - Fix #2: Zmieniono wywolanie na
OrderProAlerts.confirm({title, message, danger:true, confirmLabel:'Usun', onConfirm: doSubmit})+ Promise fallback z guardsubmittedprzeciw podwojnemu submit. - Files:
public/assets/js/modules/confirm-delete.js - Verification: User potwierdzil "Teraz jest ok".
Scope Addition
1. [Reusable] confirm-delete.js jako globalny modul
- Context: Plan zakladal tylko
invoice-config-form.js. Po feedbacku usera o niedzialajacym delete oraz odkryciu ze KAZDY istniejacy widok ma swoj wlasny inline<script>z handleremjs-delete-btn, zdecydowano stworzyc globalny modul. - Decision: Modul + rejestracja w
layouts/app.phpzamiast dodawania inline script tylko do 4 nowych widokow. - Korzysc: Wszystkie przyszle widoki z
js-delete-btndzialaja od razu. Stare widoki (email-mailboxes, automation, email-templates) nie zmieniaja zachowania dziekidata-confirm-boundguard.
Deferred Items
Brak. Plan wykonany w pelnym zakresie.
Issues Encountered
| Issue | Resolution |
|---|---|
MySQL/XAMPP offline przy php bin/migrate.php |
Migracja czeka na uruchomienie XAMPP po stronie usera. Smoke testy UI wykonane manualnie. |
Brak handlera JS dla .js-delete-btn w nowych widokach |
Stworzony globalny modul confirm-delete.js (scope addition) |
API OrderProAlerts.confirm pomylone z pozycyjnym signature |
Po inspekcji jquery-alerts.js:109 poprawiono na options-object z onConfirm callback |
Next Phase Readiness
Ready:
InvoiceConfigRepository::findById/listAllgotowe do uzycia przezInvoiceService(Phase 115 wystawianie faktur).- Conditional select integracji Fakturowni pre-walidowany w UI - operator wie ktore konfiguracje sa delegowane.
- Wzorzec hub→lista→edycja gotowy do reuse w Phase 116 (lista wystawionych faktur w sekcji Ksiegowosc).
- Globalny
confirm-delete.jszniweluje duplikacje inline scripts w kolejnych widokach.
Concerns:
- Stare widoki (
email-mailboxes,email-templates,automation) maja inline scripts duplikujace logikeconfirm-delete.js. Idempotentnydata-confirm-boundzapobiega koliziom, ale to dlug techniczny - kandydat do osobnego sprzata-tasku (~30min). invoice_configs.namenie jest UNIQUE - seed idempotentnosc oparta na NOT EXISTS po name. Jesli operator zmieni nazweDomyslny VAT-> kolejna migracja zrobi duplikat. Akceptowalne: nie planuje sie kolejnych seed'ow.
Blockers:
- Brak.
Phase: 114-accounting-configs-refactor, Plan: 01 Completed: 2026-05-10