'Előfeldolgozás', self::Validation => 'Validálás', self::Approval => 'Jóváhagyás', self::Execution => 'Végrehajtás', }; } /** * A lépéshez tartozó Job osztály neve */ public function jobClass(): ?string { return match($this) { self::Preprocessing => PricelistPreProcessJob::class, self::Validation => PricelistValidationJob::class, self::Execution => PricelistExecutionJob::class, self::Approval => null, // Manuális lépésnél nincs automatikus job }; } /** * A lépéshez tartozó Job példány visszaadása */ public function getJob(\App\Models\PricelistFile $file): ?object { $jobClass = $this->jobClass(); return $jobClass ? new $jobClass($file) : null; } /** * Státusz színek (UI megjelenítéshez) */ public function color(string $status): string { return match ($status) { 'pending' => 'gray', 'inprogress' => 'primary', 'completed' => 'success', 'failed' => 'danger', default => 'gray', }; } /** * Segédfüggvény az alapértelmezett workflow struktúra legenerálásához */ public static function defaultSteps(): array { return array_map(fn($step) => [ 'name' => $step->value, 'label' => $step->label(), 'status' => 'pending', ], self::cases()); } }