update: session state, docs, screenshots

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-15 21:31:57 +01:00
parent 22ce87efe2
commit 8b3fb3fd0b
19 changed files with 159 additions and 49 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

View File

@@ -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 (0812). 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_000050000053_*.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).

View File

@@ -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

View File

@@ -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,

View File

@@ -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<64> rejestracj<63> historii zam<61>wie<69>, 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<65>lach zam<61>wienia 2 razy wy<77>wietla si<73> ID zam<61>wienai z allegro, np: 008d3d60-1743-11f1-b15c-fdb4f87ccfc6
7. [x] Przy imporcie z allegro liczba przesy<73>ek jest 0.
8. [x] Kolumna LP w szczeg<65>lach zam<61>wienia jest zbyt szeroka.
9. [x] Na lis<69>ie zam<61>wie<69> pole po kt<6B>rym jest domy<6D>lnie sortowana czyli data zam<61>wienia jest puste.
10. [x] Na li<6C>cie zam<61>wie<69> ukry<72> kolumn<6D> ostatnia zmiana.
11. [x] W ustawieniach doda<64> zak<61>adk<64> Integracja Apaczka. Doda<64> tam pierwsze ustawienie, czyli klucz API.
12. [] synchronizowa<77> r<>czn<7A> zmian<61> statusu z allegro
13. [x] W ustawieniach cron https://orderpro.projectpro.pl/settings/cron historia powinna mie<69> stronicowanie
12. [] synchronizowa<EFBFBD> r<>czn<7A> zmian<61> statusu z allegro
14. [] border input<75>w, select, textarea, itd zr<7A>b troszk<7A> ciemniejszy
15. [] W tym miejscu odwróć kolejność: najpierw źródło potem ID, <div class="orders-ref__meta"><span>f6079660-1af8-11f1-a7c9-231cf6ef29d1</span><span>allegro</span></div>
16. [] Na liście zamówień statusy powinno być pokolorowane zgodnie z ustawieniami.