update: session state, docs, screenshots
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
BIN
.claude/screenshots/accounting_after_save.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
.claude/screenshots/accounting_aligned.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
.claude/screenshots/accounting_checkboxes.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
.claude/screenshots/accounting_checkboxes_fixed.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
.claude/screenshots/accounting_current.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
.claude/screenshots/accounting_fixed_table.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
.claude/screenshots/accounting_table_issue.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
.claude/screenshots/accounting_table_v2.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
.claude/screenshots/accounting_wide.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
.claude/screenshots/accounting_with_config.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
.claude/screenshots/orders_filters_after.png
Normal file
|
After Width: | Height: | Size: 271 KiB |
BIN
.claude/screenshots/orders_filters_final.png
Normal file
|
After Width: | Height: | Size: 271 KiB |
BIN
.claude/screenshots/orders_filters_fixed.png
Normal file
|
After Width: | Height: | Size: 270 KiB |
BIN
.claude/screenshots/orders_table_ref.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
.claude/screenshots/statuses_reference.png
Normal file
|
After Width: | Height: | Size: 152 KiB |
@@ -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).
|
||||
|
||||
81
.vscode/ftp-kr.sync.cache.json
vendored
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
14
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<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.
|
||||
|
||||