From 2d4700c9b20dd533e7936fa30537bd8ec6719bef Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Sat, 29 Nov 2025 16:11:41 +0530 Subject: [PATCH] Added reactive validation for plant selection and duplicate checks for coil and SFG numbers in ProcessOrder form --- .../Resources/ProcessOrderResource.php | 102 +++++++++++++++++- 1 file changed, 99 insertions(+), 3 deletions(-) diff --git a/app/Filament/Resources/ProcessOrderResource.php b/app/Filament/Resources/ProcessOrderResource.php index 862f13d..90012bc 100644 --- a/app/Filament/Resources/ProcessOrderResource.php +++ b/app/Filament/Resources/ProcessOrderResource.php @@ -46,6 +46,22 @@ class ProcessOrderResource extends Resource return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); }) + ->afterStateUpdated(function ($state, $set, callable $get, $livewire) { + $plantId = $get('plant_id'); + $set('coil_number', null); + $set('sfg_number', null); + $set('machine_name', null); + if (! $plantId) { + $set('poPlantError', 'Please select a plant first.'); + $set('coilNumberError', null); + $set('sfgNumberError', null); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('poPlantError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('poPlantError') ? $get('poPlantError') : null) + ->hintColor('danger') ->required(), Forms\Components\Select::make('item_id') ->label('Item Code') @@ -108,10 +124,62 @@ class ProcessOrderResource extends Resource // ->readOnly(true), Forms\Components\TextInput::make('process_order') ->label('Process Order') + ->reactive() + ->afterStateUpdated(function ($state, $set, callable $get, $livewire) { + $plantId = $get('plant_id'); + $set('coil_number', null); + $set('sfg_number', null); + $set('machine_name', null); + if (! $plantId) { + $set('poPlantError', 'Please select a plant first.'); + $set('sfgNumberError', null); + $set('coilNumberError', null); + } + }) ->required(), Forms\Components\TextInput::make('coil_number') ->label('Coil Number') ->default('0') + ->reactive() + ->afterStateUpdated(function ($state, $set, callable $get, $livewire) { + $plantId = $get('plant_id'); + $processOrder = $get('process_order'); + $coilNo = $get('coil_number'); + if (! $plantId) { + $set('poPlantError', 'Please select a plant first.'); + $set('coil_number', null); + $set('sfg_number', null); + $set('machine_name', null); + $set('coilNumberError', null); + $set('sfgNumberError', null); + } elseif (! $processOrder) { + $set('coil_number', null); + $set('sfg_number', null); + $set('machine_name', null); + $set('poPlantError', null); + $set('coilNumberError', null); + $set('sfgNumberError', null); + } elseif ($coilNo || $coilNo == '0') { + $existing = ProcessOrder::where('plant_id', $plantId) + ->where('process_order', $processOrder) + ->where('coil_number', $coilNo) + ->first(); + + if ($existing) { + $set('poPlantError', null); + $set('coil_number', null); + $set('coilNumberError', "Duplicate Coil : '{$coilNo}' found!"); + } else { + $set('poPlantError', null); + $set('coilNumberError', null); + } + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('coilNumberError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('coilNumberError') ? $get('coilNumberError') : null) + ->hintColor('danger') ->required(), Forms\Components\TextInput::make('order_quantity') ->label('Order Quantity') @@ -122,10 +190,38 @@ class ProcessOrderResource extends Resource ->required(), Forms\Components\TextInput::make('sfg_number') ->label('SFG Number') - ->required(), + ->reactive() + ->afterStateUpdated(function ($state, $set, callable $get, $livewire) { + $plantId = $get('plant_id'); + $sfgNo = $get('sfg_number'); + if (! $plantId) { + $set('poPlantError', 'Please select a plant first.'); + $set('sfg_number', null); + $set('machine_name', null); + $set('sfgNumberError', null); // 'Please select a plant first.' + } elseif ($sfgNo) { + $existing = ProcessOrder::where('plant_id', $plantId) + ->where('sfg_number', $sfgNo) + ->first(); + + if ($existing) { + $set('poPlantError', null); + $set('sfg_number', null); + $set('machine_name', null); + $set('sfgNumberError', "Duplicate SFG : '{$sfgNo}' found!"); + } else { + $set('poPlantError', null); + $set('sfgNumberError', null); + } + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('sfgNumberError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('sfgNumberError') ? $get('sfgNumberError') : null) + ->hintColor('danger'), Forms\Components\TextInput::make('machine_name') - ->label('Machine ID') - ->required(), + ->label('Machine ID'), Forms\Components\FileUpload::make('attachment') ->label('PDF Upload') ->acceptedFileTypes(['application/pdf'])