From 67c108eeca517414d6e59fdd8dc447a22a75ff74 Mon Sep 17 00:00:00 2001 From: E98Developer Date: Sat, 7 Mar 2026 06:31:34 +0100 Subject: [PATCH] fix workflow step status and percentage progress --- .../Schemas/PricelistFileInfolist.php | 12 +++---- app/Services/PricelistFileProcessService.php | 24 +++++++------- ...175613_fix_pricelist_files_status_enum.php | 33 +++++++++++++++++++ 3 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 database/migrations/2026_03_06_175613_fix_pricelist_files_status_enum.php diff --git a/app/Filament/Resources/PricelistFiles/Schemas/PricelistFileInfolist.php b/app/Filament/Resources/PricelistFiles/Schemas/PricelistFileInfolist.php index 2aa2d3f..3c6eb7c 100644 --- a/app/Filament/Resources/PricelistFiles/Schemas/PricelistFileInfolist.php +++ b/app/Filament/Resources/PricelistFiles/Schemas/PricelistFileInfolist.php @@ -77,22 +77,22 @@ public static function configure(Schema $schema): Schema ->formatStateUsing(fn (string $state): string => match ($state) { 'pending' => 'várakozik', 'inprogress' => 'folyamatban', - 'done' => 'kész', - 'fail' => 'hiba', + 'completed' => 'kész', + 'failed' => 'hiba', default => $state, }) ->color(fn (string $state): string => match ($state) { 'pending' => 'gray', 'inprogress' => 'info', - 'done' => 'success', - 'fail' => 'danger', + 'completed' => 'success', + 'failed' => 'danger', default => 'gray', }) ->icon(fn (string $state): string => match ($state) { 'pending' => 'heroicon-o-clock', 'inprogress' => 'heroicon-o-arrow-path', - 'done' => 'heroicon-o-check-circle', - 'fail' => 'heroicon-o-x-circle', + 'completed' => 'heroicon-o-check-circle', + 'failed' => 'heroicon-o-x-circle', default => 'heroicon-o-question-mark-circle', }), ]) diff --git a/app/Services/PricelistFileProcessService.php b/app/Services/PricelistFileProcessService.php index 6f56d08..bbd68f3 100644 --- a/app/Services/PricelistFileProcessService.php +++ b/app/Services/PricelistFileProcessService.php @@ -37,20 +37,16 @@ public function dispatchExecutionJob(PricelistFile $pricelistFile): void } } - /** - * Frissíti egy workflow lépés állapotát és az aktuális folyamat jelzőket - */ public function updateStepStatus( PricelistFile $pricelistFile, PricelistWorkflowStep $stepEnum, string $status, ?string $message = null, - int $percentage = 0 + ?int $percentage = 0 ): void { $effectiveMessage = $message ?? $stepEnum->label(); // Frissítjük a modellt az adatbázisból, hogy a legfrissebb workflow_steps-szel dolgozzunk - // Ez különösen fontos a láncolt joboknál (Bus::chain), ahol az objektum "stale" maradhat a sorban következő job számára if ($pricelistFile->exists) { $pricelistFile->refresh(); } @@ -87,7 +83,13 @@ public function updateStepStatus( ]; if ($status === 'inprogress') { - $updateData['status'] = PricelistFileStatusEnum::inprogress; + if ($stepEnum === PricelistWorkflowStep::Approval) { + $updateData['status'] = PricelistFileStatusEnum::waiting_for_approval; + $updateData['processing_current_step'] = null; + $updateData['processing_current_step_percentage'] = null; + } else { + $updateData['status'] = PricelistFileStatusEnum::inprogress; + } } elseif ($status === 'failed') { $updateData['status'] = PricelistFileStatusEnum::fail; } @@ -130,18 +132,18 @@ public function preProcess(PricelistFile $pricelistFile): bool */ public function validate(PricelistFile $pricelistFile): bool { + sleep(15); // Szimuláció $this->updateStepStatus($pricelistFile, PricelistWorkflowStep::Validation, 'inprogress', 'Üzleti szabályok ellenőrzése...', 60); try { // TODO: Validációs logika - sleep(1); // Szimuláció + sleep(15); // Szimuláció $this->updateStepStatus($pricelistFile, PricelistWorkflowStep::Validation, 'completed', 'Validálás sikeres.', 100); - $pricelistFile->update([ - 'status' => PricelistFileStatusEnum::waiting_for_approval, - 'processing_current_step' => 'Előfeldolgozás és validálás kész, jóváhagyásra vár.', - ]); + sleep(15); // Szimuláció + // A validálás végén átadjuk a lépést a jóváhagyásnak (Approval) + $this->updateStepStatus($pricelistFile, PricelistWorkflowStep::Approval, 'inprogress'); return true; } catch (\Exception $e) { diff --git a/database/migrations/2026_03_06_175613_fix_pricelist_files_status_enum.php b/database/migrations/2026_03_06_175613_fix_pricelist_files_status_enum.php new file mode 100644 index 0000000..687cfbf --- /dev/null +++ b/database/migrations/2026_03_06_175613_fix_pricelist_files_status_enum.php @@ -0,0 +1,33 @@ +enum('status', array_column(PricelistFileStatusEnum::cases(), 'value')) + ->default(PricelistFileStatusEnum::todo->value) + ->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('pricelist_files', function (Blueprint $table) { + $table->enum('status', ['todo', 'inprogress', 'fail', 'done', 'closed']) + ->default(PricelistFileStatusEnum::todo->value) + ->change(); + }); + } +};