Files
orderPRO/.paul/PROJECT.md

152 lines
9.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# orderPRO
## What This Is
Aplikacja do zarzÄ…dzania zamĂłwieniami pobieranymi z wielu ĹşrĂłdeĹ sprzedaĹĽy (Allegro, Erli, wĹasne sklepy internetowe). UmoĹĽliwia generowanie etykiet przewozowych u kurierĂłw oraz docelowo zarzÄ…dzanie produktami i stanami magazynowymi w jednym miejscu.
## Core Value
Sprzedawca moĹĽe obsĹugiwać zamĂłwienia ze wszystkich kanaĹĂłw sprzedaĹĽy i nadawać przesyĹki bez przeĹÄ…czania siÄ™ miÄ™dzy platformami.
## Current State
| Attribute | Value |
|-----------|-------|
| Version | 1.0.0 |
| Status | v1.5 Complete |
| Last Updated | 2026-03-25 |
## Requirements
### Validated (Shipped)
- [x] Integracja z Allegro — pobieranie zamówień
- [x] Generowanie etykiet (InPost)
- [x] Performance: N+1 subqueries fix, DB indexes — Phase 7
- [x] Stability: SSL verification, cron throttle — Phase 7
- [x] UX: orderpro-to-allegro disable, lista zamówień poprawki — Phase 7
- [x] Unit tests: AllegroTokenManager, AllegroOrderImportService (12 testów) — Phase 7
- [x] InPost ShipX API: natywny provider niezależny od Allegro — Phase 7
- [x] DB Foundation: tabele receipts, receipt_configs, receipt_number_counters + company_settings extended — Phase 8
- [x] Konfiguracja paragonĂłw (CRUD w Ustawienia > KsiÄ™gowoĹć) — Phase 9
- [x] Wystawianie paragonów z zamówienia (formularz, snapshoty, atomowe numerowanie) — Phase 10
- [x] Podgląd i wydruk paragonu (HTML+PDF, dompdf) — Phase 11
- [x] Sekcja KsiÄ™gowoĹć — lista paragonĂłw z filtrami, paginacjÄ…, eksportem XLSX — Phase 12
- [x] DB Foundation: tabele email_mailboxes, email_templates, email_logs — Phase 13
- [x] Skrzynki pocztowe SMTP (CRUD + test poĹÄ…czenia) — Phase 13
- [x] Szablony wiadomoĹci e-mail (CRUD + Quill.js + system zmiennych + zaĹÄ…czniki) — Phase 14
- [x] WysyĹka e-mail z zamĂłwieĹ„ (resolwer zmiennych, zaĹÄ…czniki, log) — Phase 15
- [x] Zadania automatyczne — reguĹy zdarzenie/warunki/akcje (CRUD + watcher/executor) — Phase 16
- [x] Ostrzeżenie i potwierdzenie przy duplikacie paragonu — Phase 17
- [x] Print Queue Backend: REST API + API key auth + CRUD kluczy — Phase 18
- [x] UI Integration: przycisk Drukuj, bulk print, kolejka wydruku — Phase 19
- [x] Windows Client: C# WinForms tray app, polling API, druk etykiet PDF — Phase 20
- [x] WyĹwietlanie nazwy integracji zamiast generycznego "shopPRO" na liĹcie i szczegĂłĹach zamĂłwienia — Phase 21
- [x] Naprawa zapisu REGON, BDO, KRS i logo w ustawieniach firmy — Phase 22
- [x] Presety przesyĹek — customowe przyciski szybkiego wypeĹniania formularza (CRUD + autofill + zarzÄ…dzanie) — Phase 23-25
- [x] RÄ™czny numer przesyĹki — dodawanie tracking number bez API przewoĹşnika — Phase 26
- [x] Tracking backend — dwupoziomowe statusy dostawy, 3 implementacje providerów, cron handler — Phase 27
- [x] Tracking UI i ustawienia crona — statusy dostawy i konfiguracja harmonogramu — Phase 28-29
- [x] UI readability tweak - rozdzielenie koloru przyciskow akcji od naglowkow sekcji (button primary distinction) - Phase 30
- [x] Usuniecie bulk print "Drukuj etykiety" z listy zamowien (`/orders/list`) wraz z endpointem bulk - Phase 40
- [x] Ograniczenie szumu logow importu Allegro i deduplikacja wpisow activity log - Phase 41
- [x] Automatyzacja: event `shipment.status_changed` + warunki statusowe przesylki - Phase 42
- [x] Usuwanie wpisu z kolejki druku etykiet z panelu ustawien - Phase 43
### Active (In Progress)
- [ ] Brak aktywnych faz w milestone v1.5 (40-43 zakonczone)
### Planned (Next)
- [ ] ZarzÄ…dzanie produktami
- [ ] ZarzÄ…dzanie stanami magazynowymi
### Out of Scope
- [Do zdefiniowania podczas planowania]
## Target Users
**Primary:** Sprzedawcy wielokanaĹowi (Allegro, Erli, wĹasny sklep)
- ObsĹugujÄ… zamĂłwienia z wielu platform jednoczeĹnie
- PotrzebujÄ… szybkiego nadawania przesyĹek
- ChcÄ… jednego miejsca do zarzÄ…dzania sprzedaĹĽÄ…
## Context
**Business Context:**
Rynek narzÄ™dzi do zarzÄ…dzania sprzedaĹĽÄ… wielokanaĹowÄ… (podobne rozwiÄ…zania: base.com, apilo.com). Aplikacja budowana jako wĹasne rozwiÄ…zanie.
**Technical Context:**
PHP (XAMPP/Laravel), integracje z API marketplace'Ăłw (Allegro, Erli) oraz API przewoĹşnikĂłw (InPost i inne).
## Constraints
### Technical Constraints
- PHP/XAMPP — Ĺrodowisko Windows lokalne
- Medoo + prepared statements (bez sklejania SQL)
- Brak natywnych `alert()`/`confirm()` — używać `window.OrderProAlerts`
- Metody pomocnicze string/date/color → `App\Core\Support\StringHelper` (nie powielać w klasach)
- Zarządzanie tokenami OAuth Allegro → `App\Modules\Settings\AllegroTokenManager`
- Kompozycja obiektĂłw crona → `App\Modules\Cron\CronHandlerFactory` (jedyne miejsce `new AllegroIntegrationRepository` i in. w kontekĹcie crona)
- Pole CSRF w formularzach HTTP: zawsze `_token` (nie `_csrf_token`)
### Business Constraints
- [Do zdefiniowania podczas planowania]
## Key Decisions
| Decision | Rationale | Date | Status |
|----------|-----------|------|--------|
| WĹasne rozwiÄ…zanie zamiast gotowego SaaS | PeĹna kontrola nad funkcjonalnoĹciÄ… | 2026-03-12 | Active |
| AllegroTokenManager wydzielony z 4 klas OAuth | Eliminacja duplikacji logiki odĹwieĹĽania tokenĂłw | 2026-03-12 | Active |
| StringHelper jako final static class w Core/Support | Centralizacja 19 kopii helperĂłw string/date/color z 15+ klas | 2026-03-12 | Active |
| CronHandlerFactory jako jedyne miejsce kompozycji crona | Application.php i bin/cron.php byĹy rozsynchronizowane — 2 bugi w bin/cron.php | 2026-03-13 | Active |
| Pole CSRF w formularzach: `_token` (nie `_csrf_token`) | Standardyzacja na nazwÄ™ uĹĽywanÄ… przez wiÄ™kszoĹć kodu (10+ kontrolerĂłw); eliminacja ryzyka pomyĹki przy nowych formularzach | 2026-03-13 | Active |
| Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Jeden wzorzec w caĹej aplikacji; eliminacja bezpoĹrednich zapisĂłw $_SESSION | 2026-03-13 | Active |
| validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperów walidacji | Redukcja return statements do ≤3; spójny wzorzec kontrolerów | 2026-03-13 | Active |
| God class split via move-method bez zmiany logiki | ShopproOrdersSyncService 39â†9 metod; AllegroIntegrationController 35â†25 — czysty podziaĹ przez ekstrakcjÄ™ klas | 2026-03-13 | Active |
| AllegroIntegrationController pozostaje przy 25 metodach (nie ≤15) | PeĹny podziaĹ wymaga AllegroImportScheduleService — poza zakresem v0.1 | 2026-03-13 | Active |
| dg/bypass-finals do testów final classes | Wszystkie klasy final — mockowanie przez bypass-finals zamiast usuwania final | 2026-03-15 | Active |
| InPost ShipX API zamiast Allegro WZA remap | InpostIntegrationRepository jest pod ShipX; niezaleĹĽnoĹć od Allegro | 2026-03-15 | Active |
| vendor/ w ftp-kr ignore | Auto-upload dev deps na serwer powodowaĹ Fatal Error | 2026-03-15 | Active |
| Snapshot pattern: seller/buyer/items jako JSON w receipts | Dane zamroĹĽone w momencie wystawienia — niezaleĹĽne od przyszĹych zmian ĹşrĂłdĹa | 2026-03-15 | Active |
| Atomowe numerowanie paragonĂłw: INSERT ON DUPLICATE KEY UPDATE | Bezpieczne generowanie kolejnych numerĂłw bez race conditions | 2026-03-15 | Active |
| ModuŠAccounting w osobnym namespace | App\Modules\Accounting — separacja od Settings | 2026-03-15 | Active |
| ATTACHMENT_TYPES jako centralna mapa typĂłw zaĹÄ…cznikĂłw | RozszerzalnoĹć: nowy typ = 1 linia w tablicy PHP, bez zmian DB/widoku | 2026-03-16 | Active |
| Quill.js 2.0.3 CDN dla edytora szablonĂłw | Brak build pipeline w projekcie; CDN prostszy | 2026-03-16 | Active |
## Success Metrics
| Metric | Target | Current | Status |
|--------|--------|---------|--------|
| Liczba zintegrowanych źródeŠzamówień | ≥3 | 2 (Allegro, Erli) | In progress |
| Generowanie etykiet | DziaĹa | InPost | In progress |
## Tech Stack
| Layer | Technology | Notes |
|-------|------------|-------|
| Framework | PHP (custom/Laravel) | XAMPP lokalnie |
| Frontend | HTML/CSS/JS + SCSS | jQuery Alerts module |
| Database | MySQL (Medoo) | Prepared statements |
| Auth | Sesje PHP | |
| Integracje | Allegro API, Erli API | PrzewoĹşnicy: InPost (ShipX), Apaczka |
| Testing | PHPUnit 11.5 + dg/bypass-finals | Unit tests w tests/Unit/ |
## Specialized Flows
See: .paul/SPECIAL-FLOWS.md
Quick Reference:
- /feature-dev → Nowe funkcjonalnoĹci i integracje (optional)
- /code-review → Przegląd kodu przed UNIFY (optional)
- /frontend-design → Komponenty UI i widoki (optional)
- /simplify → Refaktoryzacja po implementacji (optional)
---
*PROJECT.md — Updated when requirements or context change*
*Last updated: 2026-03-25 after Phase 40-43 completion (Operational Workflow Cleanup)*