feat(05-finances-fakturownia-import): complete Fakturownia mapping corrections
Phase 5 complete: - add category mapping edit from operation edit for Fakturownia operations - update current operation category immediately after mapping change - support optional bulk update for matching imported operations - close 05-05 and 05-06 PAUL summaries Co-Authored-By: Codex <noreply@openai.com>
This commit is contained in:
142
.paul/phases/05-finances-fakturownia-import/05-06-SUMMARY.md
Normal file
142
.paul/phases/05-finances-fakturownia-import/05-06-SUMMARY.md
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
phase: 05-finances-fakturownia-import
|
||||
plan: 06
|
||||
subsystem: finances
|
||||
tags: [fakturownia, mappings, operations, ui]
|
||||
requires:
|
||||
- phase: 05-finances-fakturownia-import
|
||||
provides: Fakturownia import, item mappings, imported document tracking
|
||||
provides:
|
||||
- Edit Fakturownia item-to-category mapping from operation edit
|
||||
- Immediate category update for current operation
|
||||
- Optional bulk category update for matching Fakturownia operations
|
||||
affects: [finances, fakturownia-import]
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns: [Repository methods with prepared SQL, CSRF-protected controller action, gridEdit-safe JS POST]
|
||||
key-files:
|
||||
created: []
|
||||
modified:
|
||||
- autoload/Domain/Finances/FinanceRepository.php
|
||||
- autoload/Controllers/FinancesController.php
|
||||
- templates/finances/operation-edit.php
|
||||
key-decisions:
|
||||
- "Only Fakturownia operations get mapping-edit UI; manual operations keep standard category editing."
|
||||
- "Bulk update is optional and scoped to imported operations matching the same item name."
|
||||
- "operation-edit uses a JS-created POST form to avoid nested forms inside gridEdit."
|
||||
patterns-established:
|
||||
- "Fakturownia operation context can be resolved from imported document records plus operation description/mapping fallback."
|
||||
duration: ~45min
|
||||
started: 2026-05-04T22:16:00+02:00
|
||||
completed: 2026-05-04T22:54:58+02:00
|
||||
---
|
||||
|
||||
# Phase 05 Plan 06: Edycja dopasowania kategorii dla operacji z Fakturowni
|
||||
|
||||
Operacje zaimportowane z Fakturowni mozna poprawiac z poziomu `operation_edit`: zmiana dopasowania aktualizuje mapowanie pozycji i od razu przepina kategorie operacji.
|
||||
|
||||
## Performance
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Duration | ~45min |
|
||||
| Started | 2026-05-04T22:16:00+02:00 |
|
||||
| Completed | 2026-05-04T22:54:58+02:00 |
|
||||
| Tasks | 3 completed |
|
||||
| Files modified | 3 |
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status | Notes |
|
||||
|-----------|--------|-------|
|
||||
| AC-1: Widocznosc opcji tylko dla operacji z Fakturowni | Pass | Sekcja pojawia sie dla operacji 9137 z Fakturowni; reczne operacje nie maja kontekstu Fakturowni. |
|
||||
| AC-2: Zmiana dopasowania aktualizuje mapowanie i biezaca operacje | Pass | Endpoint zapisuje `fakturownia_item_mappings` i `finance_operations.category_id`; flow potwierdzony przez uzytkownika po poprawce formularza. |
|
||||
| AC-3: Masowe przepiecie pozostalych pasujacych operacji | Pass | Dodano opcjonalny checkbox i update tylko dla operacji powiazanych z `fakturownia_imported_documents`. |
|
||||
| AC-4: Bezpieczny fallback | Pass | Brak kontekstu Fakturowni zwraca komunikat i nie narusza standardowej edycji. |
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Dodano `fakturowniaOperationContext()` do wykrywania powiazania operacji z importem Fakturowni.
|
||||
- Dodano akcje `fakturowniaOperationMappingSave()` z CSRF, walidacja kategorii i zapisem mapowania.
|
||||
- Rozszerzono `operation-edit` o UI zmiany dopasowania, bez naruszania recznej edycji operacji.
|
||||
- Naprawiono problemy produkcyjne wykryte w UAT: literowki w nazwach tabel, fallback kontekstu w widoku, zagniezdzony formularz `gridEdit`.
|
||||
|
||||
## Files Created/Modified
|
||||
|
||||
| File | Change | Purpose |
|
||||
|------|--------|---------|
|
||||
| `autoload/Domain/Finances/FinanceRepository.php` | Modified | Kontekst Fakturowni, update kategorii biezacej i masowej, fallback po `external_name`. |
|
||||
| `autoload/Controllers/FinancesController.php` | Modified | Nowa akcja zapisu dopasowania i przekazanie danych do widoku. |
|
||||
| `templates/finances/operation-edit.php` | Modified | Sekcja UI, fallback kontekstu, JS POST poza formularzem `gridEdit`. |
|
||||
|
||||
## Verification Results
|
||||
|
||||
| Check | Result |
|
||||
|-------|--------|
|
||||
| `C:\xampp\php\php.exe -l autoload/Domain/Finances/FinanceRepository.php` | Pass |
|
||||
| `C:\xampp\php\php.exe -l autoload/Controllers/FinancesController.php` | Pass |
|
||||
| `C:\xampp\php\php.exe -l templates/finances/operation-edit.php` | Pass |
|
||||
| Produkcyjny FTP | Pass - pliki wyslane do `/public_html` |
|
||||
| UAT operacji 9137 | Pass - opcja widoczna i zapis dopasowania dziala |
|
||||
|
||||
## Decisions Made
|
||||
|
||||
| Decision | Rationale | Impact |
|
||||
|----------|-----------|--------|
|
||||
| UI tylko dla operacji z Fakturowni | Reczne operacje maja juz standardowa zmiane kategorii | Mniejszy zakres i brak regresji dla recznych wpisow |
|
||||
| Fallback po `external_name` | Czesc mapowan ma klucz `product:<id>`, a opis zawiera nazwe pozycji | Sekcja dziala dla mapowan produktowych |
|
||||
| JS-created POST form | `gridEdit` opakowuje `external_code` we wlasny formularz | Uniknieto zagniezdzonych formularzy i blednego submitu |
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Summary
|
||||
|
||||
| Type | Count | Impact |
|
||||
|------|-------|--------|
|
||||
| Auto-fixed | 3 | Niezbedne poprawki po UAT, bez rozszerzenia zakresu |
|
||||
| Scope additions | 1 | Fallback kontekstu w widoku dla stabilnosci produkcji |
|
||||
| Deferred | 1 | Trwalsze mapowanie `operation_id -> item_key` w `meta_json` przy przyszlym imporcie |
|
||||
|
||||
### Auto-fixed Issues
|
||||
|
||||
**1. Literowki w nazwach tabel**
|
||||
- **Issue:** Kod odpytywal `facturownia_*` zamiast `fakturownia_*`.
|
||||
- **Fix:** Poprawiono nazwy tabel w `FinanceRepository.php`.
|
||||
- **Verification:** `rg "facturownia"` nie zwraca blednych wystapien; `php -l` pass.
|
||||
|
||||
**2. Kontekst nieprzekazany do widoku**
|
||||
- **Issue:** Widok mogl nie dostac `fakturownia_operation_context` z kontrolera.
|
||||
- **Fix:** Dodano fallback w `operation-edit.php`, ktory pobiera kontekst po `operation['id']`.
|
||||
- **Verification:** Opcja pojawila sie dla operacji 9137.
|
||||
|
||||
**3. Zagniezdzony formularz w `gridEdit`**
|
||||
- **Issue:** Formularz zmiany dopasowania byl osadzony wewnatrz formularza `gridEdit`, przez co submit nie aktualizowal kategorii.
|
||||
- **Fix:** Zastapiono go przyciskiem `type="button"` i JS tworzacym osobny POST.
|
||||
- **Verification:** Uzytkownik potwierdzil, ze zapis dziala.
|
||||
|
||||
### Deferred Items
|
||||
|
||||
- Przy przyszlych zmianach importera warto zapisywac jawne mapowanie `operation_id -> item_key` w `meta_json`, zeby nie parsowac opisu operacji.
|
||||
|
||||
## Issues Encountered
|
||||
|
||||
| Issue | Resolution |
|
||||
|-------|------------|
|
||||
| `php` nie bylo dostepne w PATH | Dodano `C:\xampp\php`; lint uruchamiany pelna sciezka. |
|
||||
| Produkcja nie miala lokalnych poprawek | Wyslano zmienione pliki przez FTP do `/public_html`. |
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
**Ready:**
|
||||
- Phase 5 importu finansow jest funkcjonalnie domknieta.
|
||||
- Uzytkownik moze poprawiac bledne dopasowania z poziomu operacji.
|
||||
|
||||
**Concerns:**
|
||||
- Obecna identyfikacja itemu dla istniejacych operacji opiera sie na opisie i fallbacku po nazwie.
|
||||
|
||||
**Blockers:**
|
||||
- None.
|
||||
|
||||
---
|
||||
*Phase: 05-finances-fakturownia-import, Plan: 06*
|
||||
*Completed: 2026-05-04*
|
||||
Reference in New Issue
Block a user