# 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 | 0.5.0 | | Status | v0.5 Complete | | Last Updated | 2026-03-18 | ## 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 ### Active (In Progress) - (brak — v0.6 do zaplanowania) ### 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-16 after Phase 14 (Szablony wiadomości e-mail complete)*