feat(47-shipment-created-automation): immediate shipment automation trigger
Phase 47 complete: - add event shipment.created triggered immediately after shipment creation - add action update_shipment_status with real-change guard and chain-safe emit - update automation UI/options, docs, and PAUL state artifacts
This commit is contained in:
@@ -13,8 +13,8 @@ Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów
|
||||
| Attribute | Value |
|
||||
|-----------|-------|
|
||||
| Version | 1.0.0 |
|
||||
| Status | v1.7 Complete |
|
||||
| Last Updated | 2026-03-27 |
|
||||
| Status | v1.9 Complete |
|
||||
| Last Updated | 2026-03-28 |
|
||||
|
||||
## Requirements
|
||||
|
||||
@@ -54,6 +54,8 @@ Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów
|
||||
- [x] Usuwanie wpisu z kolejki druku etykiet z panelu ustawien - Phase 43
|
||||
- [x] Szybka zmiana statusu zamowienia z listy zamowien (inline dropdown + AJAX) - Phase 44
|
||||
- [x] Synchronizacja statusow orderPRO -> shopPRO (cron push, reverse mapping, PUT API) — Phase 45
|
||||
- [x] Synchronizacja statusow orderPRO -> Allegro (cron push, reverse mapping, fulfillment status update API) - Phase 46
|
||||
- [x] Automatyzacja przesylek: natychmiastowy event `shipment.created` + akcja `update_shipment_status` - Phase 47
|
||||
|
||||
### Active (In Progress)
|
||||
|
||||
@@ -118,6 +120,8 @@ PHP (XAMPP/Laravel), integracje z API marketplace'Ăłw (Allegro, Erli) oraz API
|
||||
| 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 |
|
||||
| Event automatyzacji `shipment.created` uruchamiany natychmiast po utworzeniu paczki | Reakcje automatyzacji nie czekaja na cron tracking; przeplyw jest natychmiastowy | 2026-03-28 | Active |
|
||||
| Akcja `update_shipment_status` emituje `shipment.status_changed` tylko przy realnej zmianie | Brak petli automatyzacji i brak falszywych triggerow | 2026-03-28 | Active |
|
||||
|
||||
## Success Metrics
|
||||
|
||||
@@ -149,5 +153,5 @@ Quick Reference:
|
||||
|
||||
---
|
||||
*PROJECT.md — Updated when requirements or context change*
|
||||
*Last updated: 2026-03-27 after Phase 45 completion (ShopPRO Status Push)*
|
||||
*Last updated: 2026-03-28 after Phase 47 completion (Shipment Creation Automation)*
|
||||
|
||||
|
||||
@@ -6,17 +6,56 @@ orderPRO to narzÄ™dzie do wielokanaĹ‚owego zarzÄ…dzania sprzedaĹĽÄ
|
||||
|
||||
## Current Milestone
|
||||
|
||||
v1.7 ShopPRO Status Push - Complete (2026-03-27)
|
||||
No active milestone (v1.9 complete)
|
||||
|
||||
Implementacja synchronizacji statusów zamówień w kierunku orderPRO → shopPRO. Cron pushuje zmiany statusów do shopPRO API (PUT /api.php?endpoint=orders&action=change_status).
|
||||
Gotowe do zaplanowania kolejnego milestone (obszary planowane: zarzadzanie produktami i stanami magazynowymi).
|
||||
|
||||
| Phase | Name | Status | Plans |
|
||||
|------|------|--------|-------|
|
||||
| 45 | ShopPRO Status Push | Complete (2026-03-27) | 1/1 (`45-01-PLAN.md`) |
|
||||
| - | - | - | - |
|
||||
|
||||
Next action: utworzyc nowy milestone i roadmape kolejnego zakresu.
|
||||
|
||||
## Completed Milestones
|
||||
|
||||
<details>
|
||||
<summary>v1.9 Shipment Automation Immediate Trigger - 2026-03-28 (1 phase, 1 plan)</summary>
|
||||
|
||||
Wdrozenie natychmiastowego eventu automatyzacji po utworzeniu przesylki oraz nowej akcji automatyzacji do zmiany statusu przesylki.
|
||||
|
||||
| Phase | Name | Plans | Completed |
|
||||
|-------|------|-------|-----------|
|
||||
| 47 | Shipment Creation Automation | 1/1 | 2026-03-28 |
|
||||
|
||||
Archive: `.paul/phases/47-shipment-created-automation/`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v1.8 Allegro Status Push - 2026-03-28 (1 phase, 1 plan)</summary>
|
||||
|
||||
Wdrozenie synchronizacji statusow zamowien w kierunku orderPRO -> Allegro oraz aktywacja opcji kierunku w ustawieniach integracji Allegro.
|
||||
|
||||
| Phase | Name | Plans | Completed |
|
||||
|-------|------|-------|-----------|
|
||||
| 46 | Allegro Status Push | 1/1 | 2026-03-28 |
|
||||
|
||||
Archive: `.paul/phases/46-allegro-status-push/`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v1.7 ShopPRO Status Push - 2026-03-27 (1 phase, 1 plan)</summary>
|
||||
|
||||
Implementacja synchronizacji statusow zamowien w kierunku orderPRO -> shopPRO. Cron pushuje zmiany statusow do shopPRO API (PUT /api.php?endpoint=orders&action=change_status).
|
||||
|
||||
| Phase | Name | Plans | Completed |
|
||||
|-------|------|-------|-----------|
|
||||
| 45 | ShopPRO Status Push | 1/1 | 2026-03-27 |
|
||||
|
||||
Archive: `.paul/phases/45-shoppro-status-push/`
|
||||
|
||||
## Completed Milestones
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>v1.6 Quick Status Change - 2026-03-27 (1 phase, 1 plan)</summary>
|
||||
@@ -242,7 +281,4 @@ Archive: `.paul/milestones/v0.1-ROADMAP.md`
|
||||
|
||||
---
|
||||
*Roadmap created: 2026-03-12*
|
||||
*Last updated: 2026-03-27 - v1.7 ShopPRO Status Push complete*
|
||||
|
||||
|
||||
|
||||
*Last updated: 2026-03-28 - v1.8 Allegro Status Push completed*
|
||||
|
||||
312
.paul/STATE.md
312
.paul/STATE.md
@@ -1,311 +1,49 @@
|
||||
# Project State
|
||||
# Project State
|
||||
|
||||
## Project Reference
|
||||
|
||||
See: .paul/PROJECT.md (updated 2026-03-12)
|
||||
See: .paul/PROJECT.md (updated 2026-03-28)
|
||||
|
||||
**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 focus:** v1.7 complete — Phase 45 delivered
|
||||
**Core value:** Sprzedawca moze obslugiwac zamowienia ze wszystkich kanalow sprzedazy i nadawac przesylki bez przelaczania sie miedzy platformami.
|
||||
**Current focus:** v1.9 complete - ready to plan next milestone
|
||||
|
||||
## Current Position
|
||||
|
||||
Milestone: v1.7 ShopPRO Status Push — Complete
|
||||
Phase: [1] of [1] (ShopPRO Status Push) — Unified
|
||||
Plan: 45-01 completed with summary
|
||||
Status: PLAN/APPLY/UNIFY closed for phase 45
|
||||
Last activity: 2026-03-27 — Phase 45 complete, milestone v1.7 closed
|
||||
Milestone: v1.9 Shipment Automation Immediate Trigger - Complete
|
||||
Phase: Complete (47 - Shipment Creation Automation)
|
||||
Plan: 47-01 complete
|
||||
Status: Ready to plan next milestone
|
||||
Last activity: 2026-03-28 14:35:00 - UNIFY completed, phase transitioned
|
||||
|
||||
Progress:
|
||||
- v0.1 Initial Release: [##########] 100% done
|
||||
- v0.2 Pre-Expansion Fixes: [##########] 100% done
|
||||
- v0.3 Moduł Paragonów: [##########] 100% done
|
||||
- v0.4 Moduł E-mail: [##########] 100% done
|
||||
- v0.5 Moduł Automatyzacji: [##########] 100% done
|
||||
- v0.6 Poprawki UX: [##########] 100% done
|
||||
- v0.7 Zdalne drukowanie etykiet: [##########] 100% done
|
||||
- v0.8 Poprawki źródła zamówień: [##########] 100% done
|
||||
- v0.9 Poprawki ustawień firmy: [##########] 100% done
|
||||
- v1.0 Presety przesyłek: [##########] 100% done
|
||||
- v1.1 Ręczny numer przesyłki: [##########] 100% done
|
||||
- v1.2 Śledzenie przesyłek: [##########] 100% done
|
||||
- Phase 27: [##########] 100% done (1/1 plans)
|
||||
- Phase 28: [##########] 100% done (1/1 plans)
|
||||
- v1.3 Konfiguracja śledzenia przesyłek: [##########] 100% done
|
||||
- Phase 29: [##########] 100% done (1/1 plans)
|
||||
- v1.4 UI Readability Tweaks: [##########] 100% done
|
||||
- Phase 30: [##########] 100% done (1/1 plans)
|
||||
- v1.5 Operational Workflow Cleanup: [##########] 100% done
|
||||
- Phase 40: [##########] Complete (1/1 plans)
|
||||
- Phase 41: [##########] Complete (1/1 plans)
|
||||
- Phase 42: [##########] Complete (1/1 plans)
|
||||
- Phase 43: [##########] Complete (1/1 plans)
|
||||
- v1.6 Quick Status Change: [##########] 100% done
|
||||
- Phase 44: [##########] Complete (1/1 plans)
|
||||
- v1.7 ShopPRO Status Push: [##########] 100% done
|
||||
- Phase 45: [##########] Complete (1/1 plans)
|
||||
- v1.9 Milestone: [##########] 100%
|
||||
- Next milestone: [..........] 0%
|
||||
|
||||
## Loop Position
|
||||
|
||||
Current loop state:
|
||||
```
|
||||
PLAN --> APPLY --> UNIFY
|
||||
done done done [Loop closed for phase 45]
|
||||
done done done [Loop complete - ready for next PLAN]
|
||||
```
|
||||
|
||||
## Accumulated Context
|
||||
|
||||
### Decisions
|
||||
| Data | Decyzja | Faza | Wpływ |
|
||||
|------|---------|------|-------|
|
||||
| 2026-03-27 | Refactor executeRequest() w ShopproApiClient zamiast duplikacji curl logic | Faza 45 | Reuse GET/PUT, latwiejsze dodawanie metod HTTP |
|
||||
| 2026-03-27 | Push tylko change_source=manual (nie import/sync) | Faza 45 | Brak petli synchronizacji |
|
||||
| 2026-03-27 | Fallback 24h dla null cursor last_status_pushed_at | Faza 45 | Ograniczenie zakresu pierwszego synca |
|
||||
| 2026-03-27 | Fixed positioning dropdown (document.body) zamiast absolute wewnatrz table-wrap | Faza 44 | Dropdown nie ucinany przez overflow:hidden na .table-wrap |
|
||||
| 2026-03-27 | AJAX detect przez X-Requested-With header z fallback na redirect | Faza 44 | updateStatus() obsluguje oba tryby w jednej metodzie |
|
||||
| 2026-03-25 | Import Allegro: trigger context + deduplikacja logow (`source_order_id + source_updated_at + trigger`) | Faza 41 | Czytelniejsza historia zamowienia i mniej duplikatow wpisow `import` |
|
||||
| 2026-03-25 | Automatyzacja: event `shipment.status_changed` z warunkiem `shipment_status` (mapowanie biznes->techniczny) | Faza 42 | Reguly moga reagowac na realny status dostawy bez przebudowy engine |
|
||||
| 2026-03-25 | Tracking cron triggeruje automatyzacje tylko przy realnej zmianie `delivery_status` | Faza 42 | Brak falszywych triggerow i mniejszy szum automatyzacji |
|
||||
| 2026-03-25 | Kolejka druku: usuwanie wpisu przez panel ustawien z `OrderProAlerts.confirm` | Faza 43 | Operator moze bezpiecznie czyscic kolejke bez operacji SQL |
|
||||
| 2026-03-25 | Override required skill: `sonar-scanner` pominięty w APPLY 40-01 (uruchomienie przesunięte przed UNIFY) | Faza 40 | Kontynuacja wdrożenia bez blokady, z jawnym ryzykiem jakości do domknięcia w UNIFY |
|
||||
| 2026-03-25 | Rozdzielenie tokenow kolorow akcji (`--c-action-primary`) od naglowkow (`--c-primary`) | Faza 30 | Lepsza czytelnosc UI i szybsze rozpoznanie CTA |
|
||||
| 2026-03-23 | Dwupoziomowy system statusów: normalized + raw z API | Faza 27 | Max szczegółowość dla usera + spójna logika filtrowania |
|
||||
| 2026-03-23 | Osobny ShipmentTrackingInterface (nie rozszerzenie ShipmentProviderInterface) | Faza 27 | Czysta separacja tracking vs creation; łatwe dodawanie providerów |
|
||||
| 2026-03-23 | Idempotentne migracje (IF NOT EXISTS + INSERT IGNORE) | Faza 27 | Bezpieczne re-run migracji |
|
||||
| 2026-03-12 | AllegroTokenManager wydzielony z 4 klas OAuth | Faza 01 | Centralizacja logiki tokenĂłw, brak duplikacji |
|
||||
| 2026-03-12 | StringHelper jako final static class w Core/Support | Faza 01 | 19 duplikatów helperów usunięte z 15 klas |
|
||||
| 2026-03-13 | CronHandlerFactory jako jedyne miejsce kompozycji crona | Faza 02 | Application.php i bin/cron.php zsynchronizowane; 2 bugi naprawione |
|
||||
| 2026-03-13 | Pole CSRF w formularzach: `_token` (nie `_csrf_token`) | Faza 03 | Ustandaryzowane w OrdersController, ShipmentController i 2 widokach |
|
||||
| 2026-03-13 | Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Faza 05 | OrdersController i ShipmentController zmigrowane; jeden wzorzec w całej aplikacji |
|
||||
| 2026-03-13 | validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperów walidacji | Faza 06 | Redukcja return statements do ≤3; wzorzec do użycia w kolejnych planach |
|
||||
| 2026-03-15 | dg/bypass-finals zamiast usuwania final z klas produkcyjnych | Faza 07 | Testy mockujÄ… final classes bez zmiany konwencji projektu |
|
||||
| 2026-03-15 | 3 bugi use-statement naprawione (odkryte przez testy) | Faza 07 | RuntimeException catch w 401 retry wreszcie działa; AllegroOAuthException rzucane poprawnie |
|
||||
| 2026-03-15 | InPost ShipX API (nie Allegro WZA) jako natywny provider | Faza 07 | InpostShipmentService niezależny od Allegro; workaround remap usunięty |
|
||||
| 2026-03-15 | vendor/ dodany do ftp-kr ignore; deploy vendor ręcznie | Faza 07 | Auto-upload nie nadpisze vendor/ na serwerze |
|
||||
| 2026-03-15 | Snapshot pattern: seller/buyer/items jako JSON | Faza 10 | Dane zamroĹĽone w momencie wystawienia paragonu |
|
||||
| 2026-03-15 | Natywny stream_socket_client do testu SMTP (bez PHPMailer) | Faza 13 | Test połączenia SMTP bez nowych zależności; PHPMailer w fazie 15 |
|
||||
| 2026-03-15 | IntegrationSecretCipher do szyfrowania haseł SMTP | Faza 13 | Reuse istniejącego AES-256-CBC+HMAC; spójny wzorzec |
|
||||
| 2026-03-15 | Auto-reset is_default na email_mailboxes przy save | Faza 13 | Tylko jedna domyślna skrzynka |
|
||||
| 2026-03-15 | Atomowe numerowanie: INSERT ON DUPLICATE KEY UPDATE | Faza 10 | Bezpieczne kolejne numery paragonĂłw |
|
||||
| 2026-03-15 | Moduł Accounting w App\Modules\Accounting | Faza 10 | Separacja od Settings |
|
||||
| 2026-03-15 | dompdf v3.1 server-side PDF generation | Faza 11 | Nowa zależność composer; wymaga vendor/ na serwerze |
|
||||
| 2026-03-15 | ftp-kr vendor/ nie ignorowany (zmiana na /vendor/bin) | Faza 11 | Automatyczny upload vendor/ przy zmianach; rewizja decyzji z fazy 07 |
|
||||
| 2026-03-15 | PhpSpreadsheet v5.5 dla eksportu XLSX | Faza 12 | Nowa zależność composer; XLSX lepszy od CSV dla księgowości |
|
||||
| 2026-03-15 | POST eksport z CSRF + dwa tryby (zaznaczone/wszystkie z filtra) | Faza 12 | Bezpieczny eksport; selectable table-list reuse |
|
||||
| 2026-03-16 | ATTACHMENT_TYPES jako centralna mapa typów załączników | Faza 14 | Rozszerzalność: nowy typ = 1 linia w tablicy PHP |
|
||||
| 2026-03-16 | Quill.js 2.0.3 CDN dla edytora szablonĂłw | Faza 14 | Brak build pipeline; CDN prostszy |
|
||||
| 2026-03-17 | PHPMailer v7.0.2 jako SMTP transport | Faza 15 | Nowa zależność composer; in-memory attachments (addStringAttachment) |
|
||||
| 2026-03-17 | Email history jako wpisy w order_activity_log (nie osobna sekcja) | Faza 15 | Spójność z istniejącym UX — jeden timeline zamiast fragmentacji |
|
||||
| 2026-03-17 | VariableResolver wydzielony z EmailTemplateController | Faza 15 | Reuse logiki zmiennych; resolwer niezaleĹĽny od kontrolera szablonĂłw |
|
||||
| Date | Decision | Impact |
|
||||
|------|----------|--------|
|
||||
| 2026-03-28 | Dodano event `shipment.created` triggerowany natychmiast po sukcesie tworzenia paczki | Reguly automatyzacji reaguja od razu, bez oczekiwania na cron |
|
||||
| 2026-03-28 | Dodano akcje `update_shipment_status` z aktualizacja tylko przy realnej zmianie | Brak petli i duplikatow triggerow |
|
||||
| 2026-03-28 | `AutomationService` rozszerzony o `ShipmentPackageRepository` i fallback wyboru paczki | Stabilne wykonanie akcji statusowej nawet bez `package_id` w kontekscie |
|
||||
|
||||
### Skill Audit (Faza 45, Plan 01)
|
||||
| Oczekiwany | Wywolany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | override | Pominieto na podstawie explicit user override; lint PHP PASS |
|
||||
|
||||
### Skill Audit (Faza 44, Plan 01)
|
||||
| Oczekiwany | Wywolany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | override | Pominieto na podstawie explicit user override; lint PHP + build CSS PASS |
|
||||
|
||||
### Skill Audit (Faza 43, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | override | Pominięto na podstawie explicit user override; lint PHP + build CSS + grep PASS |
|
||||
|
||||
### Skill Audit (Faza 42, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | override | Pominięto na podstawie explicit user override; lint PHP + grep PASS |
|
||||
|
||||
### Skill Audit (Faza 41, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | override | Pominięto na podstawie explicit user override; lint PHP + grep PASS |
|
||||
|
||||
### Skill Audit (Faza 40, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | override | Pominięto na podstawie explicit user override; lint PHP + grep PASS |
|
||||
|
||||
### Skill Audit (Faza 29, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 nowych unikalnych issues; 3x S1192 pre-existing DeliveryStatus, 1x S1142 pre-existing matchCarrierByName, 2x accessibility minor (pre-existing pattern) |
|
||||
|
||||
### Skill Audit (Faza 28, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 nowych unikalnych issues; 1x S1448 CronRepository (22 metod, pre-existing pattern) |
|
||||
|
||||
### Skill Audit (Faza 27, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 nowych unikalnych issues; 3 pre-existing patterns (2x S1192 DeliveryStatus, 1x S1172 handler) |
|
||||
|
||||
### Skill Audit (Faza 26, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 nowych issues; 8 pre-existing na ShipmentController (S3776, S1192, S1142, S3358) |
|
||||
|
||||
### Skill Audit (Faza 25, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach |
|
||||
|
||||
### Skill Audit (Faza 24, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach |
|
||||
|
||||
### Skill Audit (Faza 23, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 issues na nowych plikach |
|
||||
|
||||
### Skill Audit (Faza 22, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 nowych issues na zmienionym pliku; 1 pre-existing S1172 |
|
||||
|
||||
### Skill Audit (Faza 21, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach; 18 pre-existing |
|
||||
|
||||
### Skill Audit (Faza 20, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | n/a | Projekt C# — poza zakresem skanera PHP |
|
||||
|
||||
### Skill Audit (Faza 19, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 nowych blocker/critical; 4 minor/major zalogowane w DOCS/todo.md |
|
||||
|
||||
### Skill Audit (Faza 18, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
|
||||
|
||||
### Skill Audit (Faza 17, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach |
|
||||
|
||||
### Skill Audit (Faza 15, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym milestone |
|
||||
|
||||
### Skill Audit (Faza 14, Plan 02)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
|
||||
|
||||
### Skill Audit (Faza 13, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
|
||||
|
||||
### Skill Audit (Faza 12, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
|
||||
|
||||
### Skill Audit (Faza 11, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
|
||||
|
||||
### Skill Audit (Faza 10, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
|
||||
|
||||
### Skill Audit (Faza 07, Plan 05)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | â—‹ | Zainstalowany (v4.3.5) ale nie uruchomiony w tym planie |
|
||||
|
||||
### Skill Audit (Faza 07, Plan 04)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
|
||||
|
||||
### Skill Audit (Faza 07, Plan 03)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
|
||||
|
||||
### Skill Audit (Faza 07, Plan 02)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
|
||||
|
||||
### Skill Audit (Faza 07, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
|
||||
|
||||
### Skill Audit (Faza 06, Plan 06)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
|
||||
|
||||
### Skill Audit (Faza 06, Plan 02)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH; S1142 violations powinny spaść o ~12-15 po uruchomieniu |
|
||||
|
||||
### Skill Audit (Faza 05, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Pominięto — uruchomić ręcznie przed następnym planem z kodem PHP |
|
||||
|
||||
### Skill Audit (Faza 04, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Pominięto — plan czysto dokumentacyjny (komentarze SQL, brak nowego kodu PHP); uruchomić przy kolejnym planie z kodem |
|
||||
|
||||
### Skill Audit (Faza 03, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| sonar-scanner | ○ | Pominięto — przejście do UNIFY bez skanowania; uruchomić przy kolejnym planie |
|
||||
|
||||
### Skill Audit (Faza 02, Plan 01)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| /code-review | ○ | Pominięto — jednolinijkowa naprawa oczywistego dead code |
|
||||
| sonar-scanner | ○ | Pominięto — brak nowego kodu, zmiana kosmetyczna |
|
||||
|
||||
### Skill Audit (Faza 01, Plan 02)
|
||||
| Oczekiwany | Wywołany | Uwagi |
|
||||
|------------|---------|-------|
|
||||
| /feature-dev | ○ | Pominięto — plan był czysto refaktoryzacyjny |
|
||||
| /code-review | ○ | Pominięto — należy wywołać przed kolejnym UNIFY |
|
||||
| sonar-scanner | ○ | Nie uruchomiono — należy uruchomić i zaktualizować DOCS/todo.md |
|
||||
|
||||
### Deferred Issues
|
||||
- **CI/CD SonarQube** — dodać GitHub Actions workflow (`.github/workflows/sonarqube.yml`) który odpala `sonar-scanner` automatycznie przy każdym pushu. Token projektu: `sqp_8ef2748d037777cf00cf1b38534f8d435b762d7d` (dodać jako GitHub Secret `SONAR_TOKEN`). Przypisać do fazy związanej z infrastrukturą/DevOps gdy tylko fazy zostaną zdefiniowane.
|
||||
- **code-review** — wywołać /code-review przed kolejnym UNIFY (pominięto w obydwu planach fazy 01).
|
||||
- **Delivery mapping "Szukaj..." layout** — JS `attachSelectFilter()` w allegro.php tworzy input search dla InPost/Apaczka selectów, wizualnie wygląda jakby należał do wiersza powyżej. Pre-existing bug, do naprawy osobno.
|
||||
|
||||
### Git State
|
||||
Last commit: 957fdda — feat(v1.6): inline status change on orders list — feat(v1.5): complete phases 40-43 workflow cleanup
|
||||
Branch: main
|
||||
Feature branches merged: none
|
||||
|
||||
### Blockers/Concerns
|
||||
Brak.
|
||||
### Skill Audit (Phase 47, Plan 01)
|
||||
| Expected | Invoked | Notes |
|
||||
|----------|---------|-------|
|
||||
| sonar-scanner | ✓ | Scan wykonany w UNIFY; analysis successful na sonar.project-pro.pl |
|
||||
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-03-27
|
||||
Stopped at: v1.7 phase 45 completed (SUMMARY + docs + state updated)
|
||||
Next action: Start next milestone planning (/paul:milestone or /paul:plan)
|
||||
Resume file: .paul/ROADMAP.md
|
||||
---
|
||||
*STATE.md — Updated after every significant action*
|
||||
|
||||
|
||||
|
||||
Last session: 2026-03-28 14:35:00
|
||||
Stopped at: Phase 47 complete, loop closed
|
||||
Next action: Start next milestone planning ($paul-new-milestone)
|
||||
Resume file: .paul/phases/47-shipment-created-automation/47-01-SUMMARY.md
|
||||
|
||||
210
.paul/phases/47-shipment-created-automation/47-01-PLAN.md
Normal file
210
.paul/phases/47-shipment-created-automation/47-01-PLAN.md
Normal file
@@ -0,0 +1,210 @@
|
||||
---
|
||||
phase: 47-shipment-created-automation
|
||||
plan: 01
|
||||
type: execute
|
||||
wave: 1
|
||||
depends_on: []
|
||||
files_modified:
|
||||
- src/Modules/Automation/AutomationController.php
|
||||
- src/Modules/Automation/AutomationService.php
|
||||
- src/Modules/Cron/CronHandlerFactory.php
|
||||
- src/Modules/Shipments/ShipmentController.php
|
||||
- src/Modules/Shipments/ShipmentPackageRepository.php
|
||||
- resources/views/automation/form.php
|
||||
- public/assets/js/modules/automation-form.js
|
||||
- resources/views/automation/index.php
|
||||
- DOCS/ARCHITECTURE.md
|
||||
- DOCS/TECH_CHANGELOG.md
|
||||
- DOCS/todo.md
|
||||
autonomous: false
|
||||
---
|
||||
|
||||
<objective>
|
||||
## Goal
|
||||
Dodac nowe zdarzenie automatyzacji `shipment.created`, ktore uruchamia sie od razu po utworzeniu przesylki w zamowieniu, oraz dodac nowa akcje automatyzacji `update_shipment_status` (UI: "Zmiana statusu przesylki").
|
||||
|
||||
## Purpose
|
||||
Operator ma moc budowania automatyzacji natychmiast po wygenerowaniu przesylki (bez czekania na cron tracking) i moze reakcja reguly zmieniac status przesylki zgodnie z procesem operacyjnym firmy.
|
||||
|
||||
## Output
|
||||
Kompletne rozszerzenie automatyzacji o:
|
||||
- event `shipment.created` (natychmiastowy trigger),
|
||||
- action `update_shipment_status`,
|
||||
- konfiguracje w formularzu automatyzacji,
|
||||
- aktualna dokumentacje techniczna.
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
## Project Context
|
||||
@.paul/PROJECT.md
|
||||
@.paul/ROADMAP.md
|
||||
@.paul/STATE.md
|
||||
@DOCS/ARCHITECTURE.md
|
||||
@DOCS/DB_SCHEMA.md
|
||||
@DOCS/todo.md
|
||||
|
||||
## Prior Work (only if genuinely needed)
|
||||
@.paul/phases/42-automation-shipment-status-event/42-01-PLAN.md
|
||||
@.paul/phases/42-automation-shipment-status-event/42-01-SUMMARY.md
|
||||
@.paul/phases/26-manual-tracking-number/26-01-SUMMARY.md
|
||||
@.paul/phases/27-shipment-tracking-backend/27-01-SUMMARY.md
|
||||
|
||||
## Source Files
|
||||
@src/Modules/Shipments/ShipmentController.php
|
||||
@src/Modules/Shipments/ShipmentPackageRepository.php
|
||||
@src/Modules/Automation/AutomationController.php
|
||||
@src/Modules/Automation/AutomationService.php
|
||||
@src/Modules/Cron/CronHandlerFactory.php
|
||||
@resources/views/automation/form.php
|
||||
@public/assets/js/modules/automation-form.js
|
||||
@resources/views/automation/index.php
|
||||
</context>
|
||||
|
||||
<skills>
|
||||
## Required Skills (from SPECIAL-FLOWS.md)
|
||||
|
||||
| Skill | Priority | When to Invoke | Loaded? |
|
||||
|-------|----------|----------------|---------|
|
||||
| `sonar-scanner` | required | Po APPLY, przed UNIFY | o |
|
||||
| /feature-dev | optional | Przed wdrazaniem nowej funkcjonalnosci | o |
|
||||
| /code-review | optional | Po APPLY, przed UNIFY | o |
|
||||
|
||||
**BLOCKING:** Required skills MUST be loaded before APPLY proceeds.
|
||||
|
||||
## Skill Invocation Checklist
|
||||
- [ ] `sonar-scanner` uruchomiony po APPLY
|
||||
- [ ] /feature-dev (opcjonalnie)
|
||||
- [ ] /code-review (opcjonalnie)
|
||||
|
||||
</skills>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## AC-1: Event "Utworzenie przesylki" uruchamia sie natychmiast po sukcesie utworzenia
|
||||
```gherkin
|
||||
Given istnieje aktywna regula automatyzacji z eventem `shipment.created`
|
||||
When uzytkownik utworzy przesylke dla zamowienia (provider API lub recznie)
|
||||
Then system wywola AutomationService trigger w tym samym flow requestu
|
||||
And nie wymaga to oczekiwania na cron `shipment_tracking_sync`
|
||||
```
|
||||
|
||||
## AC-2: Nowa akcja "Zmiana statusu przesylki" jest konfigurowalna i walidowana
|
||||
```gherkin
|
||||
Given uzytkownik tworzy/edytuje regule automatyzacji
|
||||
When dodaje akcje "Zmiana statusu przesylki"
|
||||
Then moze wskazac docelowy status przesylki z dozwolonej listy
|
||||
And zapis nie przechodzi dla nieprawidlowej konfiguracji akcji
|
||||
```
|
||||
|
||||
## AC-3: Akcja poprawnie aktualizuje status przesylki i nie powoduje petli
|
||||
```gherkin
|
||||
Given regula uruchamia akcje `update_shipment_status`
|
||||
When akcja jest wykonana dla zamowienia z paczka
|
||||
Then status paczki zostaje zaktualizowany tylko przy realnej zmianie
|
||||
And system nie wchodzi w nieskonczone petle triggerow automatyzacji
|
||||
```
|
||||
|
||||
## AC-4: UI i dokumentacja sa spójne z nowymi elementami automatyzacji
|
||||
```gherkin
|
||||
Given wdrozenie nowego eventu i akcji
|
||||
When uzytkownik otworzy formularz automatyzacji
|
||||
Then widzi event "Utworzenie przesylki" i akcje "Zmiana statusu przesylki"
|
||||
And ARCHITECTURE/TECH_CHANGELOG/todo opisuja zakres i ograniczenia implementacji
|
||||
```
|
||||
|
||||
</acceptance_criteria>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Dodaj event `shipment.created` i natychmiastowy trigger po utworzeniu przesylki</name>
|
||||
<files>src/Modules/Automation/AutomationController.php, src/Modules/Shipments/ShipmentController.php, src/Modules/Automation/AutomationService.php</files>
|
||||
<action>
|
||||
Rozszerz ALLOWED_EVENTS i etykiety UI o `shipment.created` ("Utworzenie przesylki").
|
||||
W `ShipmentController::create()` i `ShipmentController::createManual()` po potwierdzonym utworzeniu paczki wywolaj `AutomationService->trigger('shipment.created', orderId, context)`.
|
||||
Context powinien zawierac co najmniej: package_id, provider, tracking_number (jezeli dostepny), package_status.
|
||||
Unikaj triggera w sciezkach bledu tworzenia przesylki.
|
||||
</action>
|
||||
<verify>rg -n "shipment\.created|trigger\('shipment\.created'|Utworzenie przesylki" src/Modules/Automation src/Modules/Shipments resources/views/automation</verify>
|
||||
<done>AC-1 satisfied: event jest dostepny i odpalany od razu po utworzeniu przesylki.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Dodaj akcje `update_shipment_status` i wykonanie backend</name>
|
||||
<files>src/Modules/Automation/AutomationController.php, src/Modules/Automation/AutomationService.php, src/Modules/Shipments/ShipmentPackageRepository.php, src/Modules/Cron/CronHandlerFactory.php</files>
|
||||
<action>
|
||||
Dodaj nowy typ akcji do walidacji i parsera konfiguracji: `update_shipment_status`.
|
||||
Konfiguracja akcji: docelowy status dostawy (`delivery_status`) z tej samej mapy statusow biznesowych co warunki shipment_status.
|
||||
W `AutomationService` dodaj handler akcji, ktory wyszukuje docelowa paczke (z context package_id lub fallback: najnowsza aktywna paczka zamowienia) i wykonuje aktualizacje statusu tylko przy realnej zmianie.
|
||||
Dodaj zabezpieczenie anty-petla: nie emituj kolejnego eventu przy braku zmiany; przy zmianie oznacz context zrodla automatyzacji i respektuj chain dedup.
|
||||
Zaktualizuj factory DI, by serwis automatyzacji mial dostep do repo paczek.
|
||||
</action>
|
||||
<verify>rg -n "update_shipment_status|handleUpdateShipmentStatus|delivery_status|ALLOWED_ACTION_TYPES" src/Modules/Automation src/Modules/Shipments src/Modules/Cron</verify>
|
||||
<done>AC-2 satisfied i AC-3 satisfied: akcja jest walidowana, wykonuje realna zmiane i nie petli sie.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 3: Rozszerz formularz automatyzacji oraz dokumentacje techniczna</name>
|
||||
<files>resources/views/automation/form.php, public/assets/js/modules/automation-form.js, resources/views/automation/index.php, DOCS/ARCHITECTURE.md, DOCS/TECH_CHANGELOG.md, DOCS/todo.md</files>
|
||||
<action>
|
||||
Dodaj opcje akcji "Zmiana statusu przesylki" do formularza oraz dynamiczny config (wybor statusu).
|
||||
Zapewnij zgodnosc renderu create/edit i JS add-row.
|
||||
Zaktualizuj dokumentacje: nowy event natychmiastowy i nowa akcja, z opisem kontekstu oraz ograniczen.
|
||||
Dodaj/uzupelnij wpis w `DOCS/todo.md` dla nowego zakresu (zamkniecie po wdrozeniu).
|
||||
</action>
|
||||
<verify>rg -n "shipment\.created|Zmiana statusu przesylki|update_shipment_status" resources/views/automation public/assets/js/modules/automation-form.js DOCS/ARCHITECTURE.md DOCS/TECH_CHANGELOG.md DOCS/todo.md</verify>
|
||||
<done>AC-4 satisfied: UI i dokumentacja sa spójne z wdrozonym zakresem.</done>
|
||||
</task>
|
||||
|
||||
<task type="checkpoint:human-verify" gate="blocking">
|
||||
<what-built>Nowy natychmiastowy event `shipment.created` oraz nowa akcja automatyzacji `update_shipment_status`.</what-built>
|
||||
<how-to-verify>
|
||||
1. Otworz: Ustawienia > Zadania automatyczne > Dodaj zadanie.
|
||||
2. Sprawdz event "Utworzenie przesylki" i akcje "Zmiana statusu przesylki".
|
||||
3. Utworz regule: event `shipment.created`, warunek integracji, akcja zmiany statusu przesylki.
|
||||
4. Utworz przesylke z poziomu zamowienia i potwierdz, ze regula wykonala sie od razu (bez cron).
|
||||
5. Potwierdz, ze ponowne odpalenie bez realnej zmiany statusu nie generuje petli.
|
||||
</how-to-verify>
|
||||
<resume-signal>Type "approved" to continue, or describe issues to fix</resume-signal>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
|
||||
## DO NOT CHANGE
|
||||
- `database/migrations/*` (brak zmian schematu w tej fazie)
|
||||
- Logika eventu `receipt.created` i istniejace akcje poza wymaganym rozszerzeniem
|
||||
- Moduly niezwiazane z automatyzacja i przesylkami
|
||||
|
||||
## SCOPE LIMITS
|
||||
- Tylko nowe zdarzenie i nowa akcja w module automatyzacji.
|
||||
- Bez przebudowy calego silnika cron/tracking.
|
||||
- Bez zmian UX poza formularzem i listowaniem automatyzacji.
|
||||
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
Before declaring plan complete:
|
||||
- [ ] `C:\xampp\php\php.exe -l src/Modules/Automation/AutomationController.php`
|
||||
- [ ] `C:\xampp\php\php.exe -l src/Modules/Automation/AutomationService.php`
|
||||
- [ ] `C:\xampp\php\php.exe -l src/Modules/Shipments/ShipmentController.php`
|
||||
- [ ] `C:\xampp\php\php.exe -l src/Modules/Shipments/ShipmentPackageRepository.php`
|
||||
- [ ] `C:\xampp\php\php.exe -l src/Modules/Cron/CronHandlerFactory.php`
|
||||
- [ ] `C:\xampp\php\php.exe -l resources/views/automation/form.php`
|
||||
- [ ] `C:\xampp\php\php.exe -l resources/views/automation/index.php`
|
||||
- [ ] Manual checkpoint wykonany (event dziala od razu + akcja statusu)
|
||||
- [ ] Dokumentacja zaktualizowana (`DOCS/ARCHITECTURE.md`, `DOCS/TECH_CHANGELOG.md`, `DOCS/todo.md`)
|
||||
- [ ] All acceptance criteria met
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- Event `shipment.created` uruchamia automatyzacje natychmiast po utworzeniu przesylki.
|
||||
- Akcja `update_shipment_status` jest dostepna, walidowana i dziala przewidywalnie.
|
||||
- Brak petli automatyzacji przy ponownych wywolaniach bez zmiany statusu.
|
||||
- Dokumentacja techniczna odzwierciedla nowy kontrakt event/action.
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.paul/phases/47-shipment-created-automation/47-01-SUMMARY.md`
|
||||
</output>
|
||||
51
.paul/phases/47-shipment-created-automation/47-01-SUMMARY.md
Normal file
51
.paul/phases/47-shipment-created-automation/47-01-SUMMARY.md
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
phase: 47-shipment-created-automation
|
||||
plan: 01
|
||||
status: completed
|
||||
completed: 2026-03-28
|
||||
---
|
||||
|
||||
# Phase 47 Plan 01 Summary
|
||||
|
||||
## Result
|
||||
- Dodano nowe zdarzenie automatyzacji `shipment.created` (UI: `Utworzenie przesylki`).
|
||||
- Trigger `shipment.created` jest uruchamiany od razu po sukcesie tworzenia przesylki:
|
||||
- `ShipmentController::create()` (provider API),
|
||||
- `ShipmentController::createManual()` (reczny numer przesylki).
|
||||
- Dodano nowy typ akcji automatyzacji `update_shipment_status` (UI: `Zmiana statusu przesylki`).
|
||||
- `AutomationService` wykonuje aktualizacje `delivery_status` tylko przy realnej zmianie, zapisuje activity log i emituje `shipment.status_changed` z kontekstem zmiany.
|
||||
|
||||
## Acceptance Criteria
|
||||
- AC-1: Pass
|
||||
- AC-2: Pass
|
||||
- AC-3: Pass
|
||||
- AC-4: Pass
|
||||
|
||||
## Verification
|
||||
- `C:\xampp\php\php.exe -l src/Modules/Automation/AutomationController.php` PASS
|
||||
- `C:\xampp\php\php.exe -l src/Modules/Automation/AutomationService.php` PASS
|
||||
- `C:\xampp\php\php.exe -l src/Modules/Shipments/ShipmentController.php` PASS
|
||||
- `C:\xampp\php\php.exe -l src/Modules/Shipments/ShipmentPackageRepository.php` PASS
|
||||
- `C:\xampp\php\php.exe -l src/Modules/Cron/CronHandlerFactory.php` PASS
|
||||
- `C:\xampp\php\php.exe -l routes/web.php` PASS
|
||||
- `C:\xampp\php\php.exe -l resources/views/automation/form.php` PASS
|
||||
- `C:\xampp\php\php.exe -l resources/views/automation/index.php` PASS
|
||||
- `rg -n "shipment\.created|update_shipment_status|shipment_status_key|automation_shipment_status_updated" src resources public routes` PASS
|
||||
- `sonar-scanner` PASS (analysis successful): https://sonar.project-pro.pl/dashboard?id=orderPRO
|
||||
|
||||
## Manual Checkpoint
|
||||
- UAT checkpoint wykonany i zatwierdzony przez uzytkownika (`approved`).
|
||||
|
||||
## Files
|
||||
- `src/Modules/Automation/AutomationController.php`
|
||||
- `src/Modules/Automation/AutomationService.php`
|
||||
- `src/Modules/Cron/CronHandlerFactory.php`
|
||||
- `src/Modules/Shipments/ShipmentController.php`
|
||||
- `src/Modules/Shipments/ShipmentPackageRepository.php`
|
||||
- `routes/web.php`
|
||||
- `resources/views/automation/form.php`
|
||||
- `resources/views/automation/index.php`
|
||||
- `public/assets/js/modules/automation-form.js`
|
||||
- `DOCS/ARCHITECTURE.md`
|
||||
- `DOCS/TECH_CHANGELOG.md`
|
||||
- `DOCS/todo.md`
|
||||
Reference in New Issue
Block a user