- PricelistFile::canBeApproved() / hasExecutionStarted(): a jóváhagyás feltételei egy helyen, hogy a felületi gomb és a service ugyanazt ellenőrizze - approve(): a státusz MÉG A DISPATCH ELŐTT billen át, különben a queue-latency alatt a gomb látszana és egy második kattintás párhuzamos importot indítana - reject(): új 'rejected' lépésstátusz - nem 'failed', mert azt az updateStepStatus fail fájlstátuszra fordítaná, az elutasítás viszont closed - a döntés (ki, mikor, milyen indokkal) a file_meta.approval-ba kerül, mert a BaseAuditable a nevével ellentétben nem naplóz - Edit gomb szűkítése hasExecutionStarted()-tel három helyen, köztük az EditPricelistFile::afterSave()-ben, ami a teljes láncot újraindítja Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
38 lines
1.3 KiB
PHP
38 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Resources\PricelistFiles\Pages;
|
|
|
|
use App\Enums\PricelistFileStatusEnum;
|
|
use App\Filament\Resources\PricelistFiles\PricelistFileResource;
|
|
use App\Services\PricelistFileProcessService;
|
|
use Filament\Actions\DeleteAction;
|
|
use Filament\Actions\ForceDeleteAction;
|
|
use Filament\Actions\RestoreAction;
|
|
use Filament\Actions\ViewAction;
|
|
use Filament\Resources\Pages\EditRecord;
|
|
|
|
class EditPricelistFile extends EditRecord
|
|
{
|
|
protected static string $resource = PricelistFileResource::class;
|
|
|
|
protected function getHeaderActions(): array
|
|
{
|
|
return [
|
|
ViewAction::make(),
|
|
DeleteAction::make(),
|
|
ForceDeleteAction::make(),
|
|
RestoreAction::make(),
|
|
];
|
|
}
|
|
|
|
protected function afterSave(): void
|
|
{
|
|
// A hasExecutionStarted() védelem itt a lényegi: ez a metódus indítja újra a
|
|
// TELJES feldolgozási láncot. Ha a végrehajtás egyszer már futott, egy
|
|
// nulláról induló újrafuttatás duplikált termékeket és árakat hozna létre.
|
|
if ($this->record->status === PricelistFileStatusEnum::fail && ! $this->record->hasExecutionStarted()) {
|
|
app(PricelistFileProcessService::class)->dispatchInitialChain($this->record);
|
|
}
|
|
}
|
|
}
|