3 migrations (email_mailboxes, email_templates, email_logs), full CRUD for SMTP mailboxes with encrypted passwords (IntegrationSecretCipher), native SMTP connection test via stream_socket_client, sidebar navigation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
132 lines
6.7 KiB
Markdown
132 lines
6.7 KiB
Markdown
# 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.3.0 |
|
|
| Status | v0.3 Complete |
|
|
| Last Updated | 2026-03-15 |
|
|
|
|
## 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
|
|
|
|
### Active (In Progress)
|
|
|
|
- [x] DB Foundation: tabele email_mailboxes, email_templates, email_logs — Phase 13
|
|
- [x] Skrzynki pocztowe SMTP (CRUD + test połączenia) — Phase 13
|
|
- [ ] Szablony wiadomości e-mail (CRUD + Quill.js + system zmiennych) — Phase 14
|
|
- [ ] Wysyłka e-mail z zamówień (resolwer zmiennych, załączniki, log) — Phase 15
|
|
|
|
### 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 |
|
|
|
|
## 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-15 after milestone v0.3 (Moduł Paragonów complete)*
|