feat(108): delivery status management

Phase 108 complete (v3.2 milestone):

Plan 108-01 — Delivery Status DB & CRUD:
- Tabela delivery_statuses z seedem 11 statusow systemowych
- DeliveryStatusRepository (CRUD + per-request static cache)
- DeliveryStatus::setRepository() — DB fallback dla static final class
- Panel /settings/delivery-statuses (zakladki Statusy + Mapowanie)
- Sidebar przebudowany: Statusy zamowien + Statusy przesylek

Plan 108-02 — Automation Dropdowns z DB + UI Refactor:
- Dropdowny automatyzacji ladowane z DB (warunek shipment_status + akcja update_shipment_status)
- Walidacja przez DeliveryStatus::getAllStatuses()
- Osobna podstrona formularza CRUD (delivery-status-form.php)
- Lista uproszczona: rename Terminal -> Koncowy, usunieta kolumna Typ
- BREAKING: drop backward compat dla starych grupowych kluczy automatyzacji
- Bug fix: path params w DeliveryStatusesController via \$request->input('id')

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-27 22:10:24 +02:00
parent d8daf61de6
commit 0063402897
30 changed files with 2045 additions and 299 deletions

View File

@@ -60,6 +60,7 @@ use App\Modules\Automation\AutomationExecutionLogRepository;
use App\Modules\Automation\AutomationEmailOnceRepository;
use App\Modules\Settings\CronSettingsController;
use App\Modules\Settings\DeliveryStatusMappingController;
use App\Modules\Settings\DeliveryStatusesController;
use App\Modules\Settings\SettingsController;
use App\Modules\Shipments\ApaczkaShipmentService;
use App\Modules\Shipments\AllegroShipmentService;
@@ -68,6 +69,7 @@ use App\Modules\Shipments\ShipmentController;
use App\Modules\Shipments\ShipmentPackageRepository;
use App\Modules\Shipments\ShipmentPresetController;
use App\Modules\Shipments\DeliveryStatusMappingRepository;
use App\Modules\Shipments\DeliveryStatusRepository;
use App\Modules\Shipments\ShipmentPresetRepository;
use App\Modules\Shipments\ShipmentProviderRegistry;
use App\Modules\Printing\ApiKeyMiddleware;
@@ -185,11 +187,21 @@ return static function (Application $app): void {
(int) $app->config('app.cron.web_limit_default', 5)
);
$deliveryStatusMappingRepository = new DeliveryStatusMappingRepository($app->db());
$deliveryStatusRepository = new DeliveryStatusRepository($app->db());
\App\Modules\Shipments\DeliveryStatus::setRepository($deliveryStatusRepository);
$deliveryStatusesController = new DeliveryStatusesController(
$template,
$translator,
$auth,
$deliveryStatusRepository,
$deliveryStatusMappingRepository
);
$deliveryStatusMappingController = new DeliveryStatusMappingController(
$template,
$translator,
$auth,
$deliveryStatusMappingRepository
$deliveryStatusMappingRepository,
$deliveryStatusRepository
);
$companySettingsRepository = new CompanySettingsRepository($app->db());
$companySettingsController = new CompanySettingsController(
@@ -513,6 +525,12 @@ return static function (Application $app): void {
$router->post('/settings/delivery-status-mappings/save-bulk', [$deliveryStatusMappingController, 'saveBulk'], [$authMiddleware]);
$router->post('/settings/delivery-status-mappings/reset', [$deliveryStatusMappingController, 'reset'], [$authMiddleware]);
$router->post('/settings/delivery-status-mappings/reset-all', [$deliveryStatusMappingController, 'resetAll'], [$authMiddleware]);
$router->get('/settings/delivery-statuses', [$deliveryStatusesController, 'index'], [$authMiddleware]);
$router->get('/settings/delivery-statuses/new', [$deliveryStatusesController, 'create'], [$authMiddleware]);
$router->get('/settings/delivery-statuses/{id}/edit', [$deliveryStatusesController, 'edit'], [$authMiddleware]);
$router->post('/settings/delivery-statuses', [$deliveryStatusesController, 'store'], [$authMiddleware]);
$router->post('/settings/delivery-statuses/{id}/update', [$deliveryStatusesController, 'update'], [$authMiddleware]);
$router->post('/settings/delivery-statuses/{id}/delete', [$deliveryStatusesController, 'destroy'], [$authMiddleware]);
$router->get('/accounting', [$accountingController, 'index'], [$authMiddleware]);
$router->post('/accounting/export', [$accountingController, 'export'], [$authMiddleware]);
$router->get('/orders/{id}/receipt/create', [$receiptController, 'create'], [$authMiddleware]);