diff --git a/.claude/screenshots/accounting_after_save.png b/.claude/screenshots/accounting_after_save.png new file mode 100644 index 0000000..8e7935f Binary files /dev/null and b/.claude/screenshots/accounting_after_save.png differ diff --git a/.claude/screenshots/accounting_aligned.png b/.claude/screenshots/accounting_aligned.png new file mode 100644 index 0000000..b1854ef Binary files /dev/null and b/.claude/screenshots/accounting_aligned.png differ diff --git a/.claude/screenshots/accounting_checkboxes.png b/.claude/screenshots/accounting_checkboxes.png new file mode 100644 index 0000000..ad3acce Binary files /dev/null and b/.claude/screenshots/accounting_checkboxes.png differ diff --git a/.claude/screenshots/accounting_checkboxes_fixed.png b/.claude/screenshots/accounting_checkboxes_fixed.png new file mode 100644 index 0000000..8e7935f Binary files /dev/null and b/.claude/screenshots/accounting_checkboxes_fixed.png differ diff --git a/.claude/screenshots/accounting_current.png b/.claude/screenshots/accounting_current.png new file mode 100644 index 0000000..abf5956 Binary files /dev/null and b/.claude/screenshots/accounting_current.png differ diff --git a/.claude/screenshots/accounting_fixed_table.png b/.claude/screenshots/accounting_fixed_table.png new file mode 100644 index 0000000..abf5956 Binary files /dev/null and b/.claude/screenshots/accounting_fixed_table.png differ diff --git a/.claude/screenshots/accounting_table_issue.png b/.claude/screenshots/accounting_table_issue.png new file mode 100644 index 0000000..9c17d32 Binary files /dev/null and b/.claude/screenshots/accounting_table_issue.png differ diff --git a/.claude/screenshots/accounting_table_v2.png b/.claude/screenshots/accounting_table_v2.png new file mode 100644 index 0000000..dacc011 Binary files /dev/null and b/.claude/screenshots/accounting_table_v2.png differ diff --git a/.claude/screenshots/accounting_wide.png b/.claude/screenshots/accounting_wide.png new file mode 100644 index 0000000..cc478ce Binary files /dev/null and b/.claude/screenshots/accounting_wide.png differ diff --git a/.claude/screenshots/accounting_with_config.png b/.claude/screenshots/accounting_with_config.png new file mode 100644 index 0000000..d2db4d7 Binary files /dev/null and b/.claude/screenshots/accounting_with_config.png differ diff --git a/.claude/screenshots/orders_filters_after.png b/.claude/screenshots/orders_filters_after.png new file mode 100644 index 0000000..655eb3f Binary files /dev/null and b/.claude/screenshots/orders_filters_after.png differ diff --git a/.claude/screenshots/orders_filters_final.png b/.claude/screenshots/orders_filters_final.png new file mode 100644 index 0000000..191166a Binary files /dev/null and b/.claude/screenshots/orders_filters_final.png differ diff --git a/.claude/screenshots/orders_filters_fixed.png b/.claude/screenshots/orders_filters_fixed.png new file mode 100644 index 0000000..2df864e Binary files /dev/null and b/.claude/screenshots/orders_filters_fixed.png differ diff --git a/.claude/screenshots/orders_table_ref.png b/.claude/screenshots/orders_table_ref.png new file mode 100644 index 0000000..abc9a30 Binary files /dev/null and b/.claude/screenshots/orders_table_ref.png differ diff --git a/.claude/screenshots/statuses_reference.png b/.claude/screenshots/statuses_reference.png new file mode 100644 index 0000000..825bab5 Binary files /dev/null and b/.claude/screenshots/statuses_reference.png differ diff --git a/.claude/sessionstate.md b/.claude/sessionstate.md index 7cb55ea..31a4320 100644 --- a/.claude/sessionstate.md +++ b/.claude/sessionstate.md @@ -1,39 +1,40 @@ # Session State -Ostatnia aktualizacja: 2026-03-12 +Ostatnia aktualizacja: 2026-03-15 ## Aktualny cel -Naprawa błędów z `.paul/codebase/CONCERNS.md` w ramach Fazy 02 (Bug Fixes). Aktualnie zaplanowany Plan 02-02 — kursor `last_status_checked_at` w `AllegroStatusSyncService`. +Wdrożenie modułu paragonów (milestone v0.3) — 5 faz (08–12). Dwie fazy ukończone, trzy pozostały. ## Co zostało zrobione -- Faza 01 (Tech Debt) — ukończona w całości (2 plany) -- Faza 02, Plan 01 — naprawiony martwy warunek ZPL page size w `AllegroShipmentService` (wpis usunięty z CONCERNS.md) -- Faza 02, Plan 02 — **PLAN UTWORZONY**, oczekuje na zatwierdzenie i uruchomienie APPLY - - Plik: `.paul/phases/02-bug-fixes/02-02-PLAN.md` - - STATE.md i ROADMAP.md zaktualizowane +- **Faza 0 (poza planem):** Nieaktywne przyciski w orders/show.php — klasa `btn--disabled` (opacity 0.3, cursor not-allowed) +- **Faza 08 — DB Foundation:** 4 migracje SQL (receipt_configs, receipts, receipt_number_counters, company_settings extension o BDO/REGON/KRS/logo), formularz danych firmy rozszerzony, dokumentacja +- **Faza 09 — Konfiguracja paragonów:** CRUD w Ustawienia > Księgowość (ReceiptConfigController + ReceiptConfigRepository + widok accounting.php), sublinek nawigacji, tłumaczenia PL +- **Poprawki globalne CSS:** form-control min-height 30px/border-radius 6px, form-grid align-items: start, klasa .table zamiast nieistniejącej .data-table +- **Fixy API:** Request::input() zamiast query(), Csrf::token() zamiast generate(), Csrf::validate() jako bool (if zamiast try/catch) ## Co zostało do zrobienia -- [ ] Zatwierdzić Plan 02-02 i uruchomić `/paul:apply .paul/phases/02-bug-fixes/02-02-PLAN.md` -- [ ] Po APPLY: uruchomić `/code-review` (required skill) -- [ ] Po APPLY: uruchomić `sonar-scanner` i zaktualizować `DOCS/todo.md` -- [ ] Zamknąć pętlę: `/paul:unify` -- [ ] Kontynuować z kolejnym błędem z CONCERNS.md +- **Faza 10:** Wystawianie paragonów z widoku zamówienia (backend ReceiptService + UI przycisk + modal wyboru konfiguracji + blokada is_invoice + zapis do receipts + wpis order_activity_log + zakładka Dokumenty powiązane) +- **Faza 11:** Podgląd i wydruk paragonu (HTML+CSS @media print + PDF w locie) +- **Faza 12:** Sekcja główna Księgowość — lista paragonów z filtrami, paginacją, eksport XLSX + nowa grupa w sidebarze ## Kluczowe pliki -| Plik | Rola | -|------|------| -| `.paul/phases/02-bug-fixes/02-02-PLAN.md` | Plan do wykonania — gotowy na APPLY | -| `src/Modules/Settings/AllegroStatusSyncService.php` | Plik do modyfikacji (filtr + markOrderStatusChecked) | -| `database/migrations/20260312_000047_add_last_status_checked_at_to_orders.sql` | Nowa migracja do utworzenia | -| `.paul/codebase/CONCERNS.md` | Źródło błędów — wpis do usunięcia po naprawieniu | -| `.paul/STATE.md` | Loop position: PLAN ✓, APPLY ○, UNIFY ○ | +- `.paul/ROADMAP.md` — roadmap z postępem v0.3 +- `.paul/STATE.md` — aktualny stan (Phase 09 complete) +- `.paul/phases/08-db-foundation/08-01-SUMMARY.md` — podsumowanie fazy 08 +- `.paul/phases/09-receipt-config/09-01-SUMMARY.md` — podsumowanie fazy 09 +- `src/Modules/Settings/ReceiptConfigController.php` — kontroler CRUD konfiguracji +- `src/Modules/Settings/ReceiptConfigRepository.php` — repozytorium konfiguracji +- `resources/views/settings/accounting.php` — widok konfiguracji paragonów +- `database/migrations/20260315_000050–000053_*.sql` — migracje modułu paragonów ## Ważne decyzje / ustalenia -- Kolumna `last_status_checked_at DATETIME NULL` dodawana do tabeli `orders` — istniejące rekordy mają NULL (zostaną sprawdzone przy pierwszym przebiegu) -- `markOrderStatusChecked()` wywoływane tylko po sukcesie, NIE w catch — błędnie zaimportowane nie dostają timestampu -- Wyjątki w `markOrderStatusChecked()` są cicho ignorowane (nie przerywają pętli sync) -- Tabela `orders` ma kolumny `source`, `source_order_id`, `source_updated_at` (ze schematu draft — są w produkcyjnym DB mimo braku w oficjalnych migracjach) -- Wymagane skille przed UNIFY: `/code-review` + `sonar-scanner` +- Puppeteer: zawsze viewport 1920x1080 (domyślny za mały, aktywuje media query 768px) +- Klasa Request nie ma metody query() — używać input() (obsługuje GET i POST) +- Csrf::token() do generowania, Csrf::validate() zwraca bool +- Tabele: klasa `.table` (nie `.data-table` — ta nie istnieje) +- receipts.order_id musi być BIGINT UNSIGNED (match orders.id) +- ON DELETE RESTRICT na receipt_configs (nie usuwaj konfiguracji z paragonami) +- Logo firmy: na razie pole tekstowe, upload w przyszłości +- Paul planuje przed wdrożeniem — nie implementować bez planu ## Następny krok -Uruchomić APPLY planu 02-02: -/paul:apply .paul/phases/02-bug-fixes/02-02-PLAN.md +Uruchomić `/paul:plan` dla Fazy 10 (Wystawianie paragonów z zamówienia). Plan powinien obejmować: ReceiptService, ReceiptRepository, rozszerzenie OrdersController, UI w orders/show.php (przycisk + modal + zakładka Dokumenty). diff --git a/.vscode/ftp-kr.sync.cache.json b/.vscode/ftp-kr.sync.cache.json index 482c77a..4d54440 100644 --- a/.vscode/ftp-kr.sync.cache.json +++ b/.vscode/ftp-kr.sync.cache.json @@ -474,8 +474,32 @@ }, "composer.json": { "type": "-", - "size": 586, + "size": 618, "lmtime": 1772489482442, + "modified": true + }, + "composer.lock": { + "type": "-", + "size": 68047, + "lmtime": 0, + "modified": false + }, + "composer.phar": { + "type": "-", + "size": 3288946, + "lmtime": 0, + "modified": false + }, + "composer-setup.php": { + "type": "-", + "size": 59524, + "lmtime": 0, + "modified": false + }, + "composer-temp.phar": { + "type": "-", + "size": 3288946, + "lmtime": 0, "modified": false }, "config": { @@ -829,6 +853,12 @@ "lmtime": 1772490689218, "modified": false }, + "deploy-vendor.php": { + "type": "-", + "size": 2097, + "lmtime": 1773530897555, + "modified": false + }, "DOCS": { "ARCHITECTURE.md": { "type": "-", @@ -881,9 +911,9 @@ }, ".env.example": { "type": "-", - "size": 422, + "size": 580, "lmtime": 1772491020678, - "modified": false + "modified": true }, ".gitignore": { "type": "-", @@ -909,6 +939,12 @@ "lmtime": 1771963733140, "modified": false }, + ".mcp.json": { + "type": "-", + "size": 397, + "lmtime": 1773531533806, + "modified": false + }, "node_modules": { ".bin": { "sass": { @@ -2087,8 +2123,8 @@ "css": { "app.css": { "type": "-", - "size": 34054, - "lmtime": 1773008638005, + "size": 41813, + "lmtime": 1773532822802, "modified": false }, "app.css.map": { @@ -2170,10 +2206,34 @@ } }, "scss": { + "app.css": { + "type": "-", + "size": 41813, + "lmtime": 1773532822690, + "modified": false + }, + "app.css.map": { + "type": "-", + "size": 112306, + "lmtime": 0, + "modified": false + }, "app.scss": { "type": "-", - "size": 39329, - "lmtime": 1773008633469, + "size": 39450, + "lmtime": 1773532816024, + "modified": false + }, + "login.css": { + "type": "-", + "size": 6615, + "lmtime": 0, + "modified": false + }, + "login.css.map": { + "type": "-", + "size": 17857, + "lmtime": 0, "modified": false }, "login.scss": { @@ -2438,8 +2498,8 @@ }, "project.yml": { "type": "-", - "size": 8214, - "lmtime": 1771957441942, + "size": 8695, + "lmtime": 1773532113835, "modified": false } }, @@ -5247,7 +5307,8 @@ "lmtime": 1773006737809, "modified": false } - } + }, + "vendor": {} } }, "$version": 1 diff --git a/DOCS/DB_SCHEMA.md b/DOCS/DB_SCHEMA.md index 2af1a73..e93114c 100644 --- a/DOCS/DB_SCHEMA.md +++ b/DOCS/DB_SCHEMA.md @@ -88,6 +88,10 @@ Migracje z prefiksem `ensure_` to migracje kompensujące — zostały dodane - 2026-03-14: Dodano migracje `20260314_000048_add_orders_performance_indexes.sql` — indeksy wydajnosciowe na tabeli `orders`: `source`, `external_status_id`, `ordered_at`, composite `(source, external_status_id)`. - 2026-03-14: Dodano migracje `20260314_000049_add_cron_last_run_at_setting.sql` — seed klucza `cron_web_last_run_at` w `app_settings` (cron throttle przeniesiony z sesji do DB). - 2026-03-14: Przemianowano migracje `20260301_000014_add_products_sku_format_setting.sql` na `20260301_000014b_add_products_sku_format_setting.sql` — deduplikacja numeru sekwencji (kolizja z `000014_create_product_integration_translations`). +- 2026-03-15: Dodano migracje `20260315_000050_create_receipt_configs_table.sql` — tabela konfiguracji paragonow (szablony numeracji, ustawienia imiennosci, zrodlo daty sprzedazy). +- 2026-03-15: Dodano migracje `20260315_000051_create_receipts_table.sql` — tabela wystawionych paragonow ze snapshotem danych (JSON seller/buyer/items), FK do orders i receipt_configs. +- 2026-03-15: Dodano migracje `20260315_000052_create_receipt_number_counters_table.sql` — liczniki numeracji paragonow per konfiguracja i okres (miesiac/rok). +- 2026-03-15: Dodano migracje `20260315_000053_extend_company_settings_extra_fields.sql` — rozszerzenie company_settings o bdo_number, regon, court_register, logo_path. ## Tabele @@ -317,6 +321,10 @@ Migracje z prefiksem `ensure_` to migracje kompensujące — zostały dodane - `tax_number` (varchar 64, nullable), - `bank_account` (varchar 64, nullable), - `bank_owner_name` (varchar 200, nullable), + - `bdo_number` (varchar 20, nullable), + - `regon` (varchar 14, nullable), + - `court_register` (varchar 128, nullable), + - `logo_path` (varchar 255, nullable), - `default_package_length_cm` (decimal 8,1), - `default_package_width_cm` (decimal 8,1), - `default_package_height_cm` (decimal 8,1), @@ -324,6 +332,58 @@ Migracje z prefiksem `ensure_` to migracje kompensujące — zostały dodane - `default_label_format` (varchar 8), - `created_at`, `updated_at`. +### `receipt_configs` +- Konfiguracje paragonow (szablony numeracji, ustawienia). +- Kolumny: + - `id` (PK, int unsigned, AI), + - `name` (varchar 128), + - `is_active` (tinyint(1), default 1), + - `number_format` (varchar 64, default `PAR/%N/%M/%Y`), + - `numbering_type` (enum: monthly, yearly; default monthly), + - `is_named` (tinyint(1), default 0) — czy paragon imienny (dane klienta), + - `sale_date_source` (enum: order_date, payment_date, issue_date; default issue_date), + - `order_reference` (enum: none, orderpro, integration; default none), + - `created_at`, `updated_at`. + +### `receipts` +- Wystawione paragony ze snapshotem danych. +- Kolumny: + - `id` (PK, int unsigned, AI), + - `order_id` (bigint unsigned, FK -> `orders.id` CASCADE), + - `config_id` (int unsigned, FK -> `receipt_configs.id` RESTRICT), + - `receipt_number` (varchar 64, UNIQUE), + - `issue_date` (date), + - `sale_date` (date), + - `seller_data_json` (json) — snapshot danych sprzedawcy, + - `buyer_data_json` (json, nullable) — snapshot danych klienta (jesli imienny), + - `items_json` (json) — snapshot pozycji zamowienia, + - `total_net` (decimal 12,2), + - `total_gross` (decimal 12,2), + - `order_reference_value` (varchar 128, nullable), + - `created_by` (int unsigned, nullable), + - `created_at`. +- Indeksy: + - `receipts_number_unique` (UNIQUE: `receipt_number`), + - `receipts_order_idx` (`order_id`), + - `receipts_config_idx` (`config_id`), + - `receipts_issue_date_idx` (`issue_date`). +- Klucze obce: + - `receipts_order_fk`: `order_id` -> `orders.id` (ON DELETE CASCADE), + - `receipts_config_fk`: `config_id` -> `receipt_configs.id` (ON DELETE RESTRICT). + +### `receipt_number_counters` +- Liczniki numeracji paragonow per konfiguracja i okres. +- Kolumny: + - `id` (PK, int unsigned, AI), + - `config_id` (int unsigned, FK -> `receipt_configs.id` CASCADE), + - `year` (smallint unsigned), + - `month` (tinyint unsigned, nullable — null dla numeracji rocznej), + - `last_number` (int unsigned, default 0). +- Indeksy: + - `receipt_counters_config_period_unique` (UNIQUE: `config_id`, `year`, `month`). +- Klucze obce: + - `receipt_counters_config_fk`: `config_id` -> `receipt_configs.id` (ON DELETE CASCADE). + ## Zasady aktualizacji - Po kazdej migracji dopisz: - nowe/zmienione tabele i kolumny, diff --git a/DOCS/todo.md b/DOCS/todo.md index 3f29041..6a25a17 100644 --- a/DOCS/todo.md +++ b/DOCS/todo.md @@ -1,16 +1,4 @@ -1. [x] Na liście zamówień powiększenie zdjęcia produktu na hover nie na onclick, wtedy to nie może być modal zamykany X -2. [x] Doda� rejestracj� historii zam�wie�, i zmiana statusu rejestrowana w Historii zmian zamówienia -3. [x] Pobranie zamówienia rejestrowane w histori zmian zamówienia -4. [x] Przy imporcie zamówień musi być pobierania forma wysyłki. -5. [x] W szczególach zamówienia dorobić opcję zmiany statusu. -6. [x] W szczeg�lach zam�wienia 2 razy wy�wietla si� ID zam�wienai z allegro, np: 008d3d60-1743-11f1-b15c-fdb4f87ccfc6 -7. [x] Przy imporcie z allegro liczba przesy�ek jest 0. -8. [x] Kolumna LP w szczeg�lach zam�wienia jest zbyt szeroka. -9. [x] Na lis�ie zam�wie� pole po kt�rym jest domy�lnie sortowana czyli data zam�wienia jest puste. -10. [x] Na li�cie zam�wie� ukry� kolumn� ostatnia zmiana. -11. [x] W ustawieniach doda� zak�adk� Integracja Apaczka. Doda� tam pierwsze ustawienie, czyli klucz API. -12. [] synchronizowa� r�czn� zmian� statusu z allegro -13. [x] W ustawieniach cron https://orderpro.projectpro.pl/settings/cron historia powinna mie� stronicowanie +12. [] synchronizowa� r�czn� zmian� statusu z allegro 14. [] border input�w, select, textarea, itd zr�b troszk� ciemniejszy 15. [] W tym miejscu odwróć kolejność: najpierw źródło potem ID,
16. [] Na liście zamówień statusy powinno być pokolorowane zgodnie z ustawieniami.