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

@@ -5,6 +5,8 @@ namespace App\Modules\Shipments;
final class DeliveryStatus
{
private static ?DeliveryStatusRepository $repository = null;
public const UNKNOWN = 'unknown';
public const CREATED = 'created';
public const CONFIRMED = 'confirmed';
@@ -379,8 +381,46 @@ final class DeliveryStatus
return $map[$rawStatus] ?? $rawStatus;
}
public static function setRepository(DeliveryStatusRepository $repo): void
{
self::$repository = $repo;
}
public static function getAllStatuses(): array
{
if (self::$repository !== null) {
return array_column(self::$repository->getAll(), 'key');
}
return self::ALL_STATUSES;
}
public static function getAllOptions(): array
{
if (self::$repository !== null) {
return self::$repository->getAllAsOptions();
}
return self::LABEL_PL;
}
public static function getColor(string $key): string
{
if (self::$repository !== null) {
$row = self::$repository->getByKey($key);
if ($row !== null) {
return (string) $row['color'];
}
}
return '#6c757d';
}
public static function label(string $status): string
{
if (self::$repository !== null) {
$row = self::$repository->getByKey($status);
if ($row !== null) {
return (string) $row['label_pl'];
}
}
return self::LABEL_PL[$status] ?? 'Nieznany';
}