Merge pull request 'Updated received quantity exceed validation on process order resource page' (#480) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled

Reviewed-on: #480
This commit was merged in pull request #480.
This commit is contained in:
2026-03-14 07:51:16 +00:00

View File

@@ -280,10 +280,10 @@ class ProcessOrderResource extends Resource
->required() ->required()
->reactive() ->reactive()
->numeric() ->numeric()
->readOnly(fn ($get) => ($get('process_order') == null)) ->readOnly(fn ($get) => (trim($get('process_order')) == null || trim($get('process_order')) == ''))
->afterStateUpdated(function ($state, $set, callable $get, $livewire) { ->afterStateUpdated(function ($state, $set, callable $get, $livewire) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
$processOrder = $get('process_order'); $processOrder = trim($get('process_order'));
// $coilNo = $get('coil_number'); // $coilNo = $get('coil_number');
if (! $plantId) { if (! $plantId) {
$set('poPlantError', 'Please select a plant first.'); $set('poPlantError', 'Please select a plant first.');
@@ -319,14 +319,29 @@ class ProcessOrderResource extends Resource
function (callable $get) { function (callable $get) {
return Rule::unique('process_orders', 'coil_number') return Rule::unique('process_orders', 'coil_number')
->where('plant_id', $get('plant_id')) ->where('plant_id', $get('plant_id'))
->where('process_order', $get('process_order')) ->where('process_order', trim($get('process_order')))
->ignore($get('id')); ->ignore($get('id'));
}, },
function (callable $get): Closure { function (callable $get): Closure {
return function (string $attribute, $value, Closure $fail) use ($get) { return function (string $attribute, $value, Closure $fail) use ($get) {
$rework = $get('rework_status'); $rework = $get('rework_status');
if ($value && Str::contains($value, '.') && $rework == 0) { $plantId = $get('plant_id');
$fail("Rework status should be 'Yes' for rework coil number '{$value}'!"); $processOrder = trim($get('process_order'));
if ($value && Str::contains($value, '.')) {
if ($rework == 0) {
$fail("Rework status should be 'Yes' for rework coil number '{$value}'!");
}
} elseif ($value > 1) {
$prevCoilNo = (string) ($value - 1);
$existPrevCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('coil_number', $prevCoilNo)
->first();
if (! $existPrevCoil) {
$fail("Previous coil number '{$prevCoilNo}' not exist against plant and process order!");
}
} }
}; };
}, },
@@ -334,7 +349,7 @@ class ProcessOrderResource extends Resource
// ->rule(function (callable $get) { // ->rule(function (callable $get) {
// return Rule::unique('process_orders', 'coil_number') // return Rule::unique('process_orders', 'coil_number')
// ->where('plant_id', $get('plant_id')) // ->where('plant_id', $get('plant_id'))
// ->where('process_order', $get('process_order')) // ->where('process_order', trim($get('process_order')))
// ->ignore($get('id')); // ->ignore($get('id'));
// }) // })
->extraAttributes(fn ($get) => [ ->extraAttributes(fn ($get) => [
@@ -348,7 +363,7 @@ class ProcessOrderResource extends Resource
->required() ->required()
->reactive() ->reactive()
->numeric() ->numeric()
->readOnly(fn ($get) => ($get('process_order') == null)) ->readOnly(fn ($get) => (trim($get('process_order')) == null || trim($get('process_order')) == ''))
->afterStateUpdated(function (callable $set, callable $get, ?string $state) { ->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
$itemId = $get('item_id'); $itemId = $get('item_id');
@@ -378,7 +393,127 @@ class ProcessOrderResource extends Resource
->required() ->required()
->reactive() ->reactive()
->numeric() ->numeric()
->readOnly(fn ($get) => ($get('process_order') == null)) ->maxValue(fn (Get $get) => $get('order_quantity') ?? PHP_INT_MAX)
->readOnly(fn ($get) => (trim($get('process_order')) == null || trim($get('process_order')) == ''))
->rule(function (callable $get) {
return function (string $attribute, $value, Closure $fail) use ($get) {
$rework = $get('rework_status');
$plantId = $get('plant_id');
$lineId = $get('line_id');
$itemId = $get('item_id');
$processOrder = trim($get('process_order'));
$coilNo = trim($get('coil_number'));
$orderExist = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('item_id', $itemId)->latest()->first();
if ($orderExist) {
$orderQty = $orderExist->order_quantity ?? 0;
$alreadyReceived = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('item_id', $itemId)
->sum('received_quantity');
$total = $alreadyReceived + $value;
if ($rework == 1) {
if ($coilNo && Str::contains($coilNo, '.')) {
$coilMain = explode('.', $coilNo)[0];
$existingCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('line_id', $lineId)
->where('coil_number', $coilMain)
->first();
$existPrevCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('item_id', $itemId)
->where('coil_number', $coilNo)
->first();
if ($existPrevCoil && $existPrevCoil->received_quantity < $value) {
$fail('Rework received quantity should not exceed exist received quantity!');
return;
}
if ($existingCoil && $existingCoil->rework_status == 1 && $total > $orderQty) {
$fail("Rework received quantity should not exceed exist order quantity! Already Exist Total Received Qty = '{$alreadyReceived}'.");
}
} else {
if ($coilNo > 1) {
$prevCoilNo = (string) ($coilNo - 1);
$existPrevCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('coil_number', $prevCoilNo)
->first();
if (! $existPrevCoil) {
return;
}
}
$existingCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('line_id', $lineId)
->where('coil_number', $coilNo)
->first();
if (! $existingCoil) {
return;
}
$existPrevCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('item_id', $itemId)
->where('coil_number', $coilNo)
->first();
if ($existPrevCoil && $existPrevCoil->received_quantity < $value) {
$fail('Rework received quantity should not exceed exist received quantity!');
return;
}
}
} else {
if ($coilNo && Str::contains($coilNo, '.')) {
return;
}
$existing = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('coil_number', $coilNo)
->first();
if ($existing) {
if ($existing->received_quantity < $value) {
$fail('Received quantity should not exceed exist received quantity!'); // Exist Received Qty = '{$existing->received_quantity}'.
}
return;
}
if ($coilNo > 1) {
$prevCoilNo = (string) ($coilNo - 1);
$existPrevCoil = ProcessOrder::where('plant_id', $plantId)
->where('process_order', $processOrder)
->where('coil_number', $prevCoilNo)
->first();
if (! $existPrevCoil) {
return;
}
}
if ($total > $orderQty) {
$fail("Received quantity should not exceed exist order quantity! Already Exist Total Received Qty = '{$alreadyReceived}'.");
}
}
}
};
})
->afterStateUpdated(function (callable $set, callable $get, ?string $state) { ->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('scrap_quantity', '0'); $set('scrap_quantity', '0');
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
@@ -387,7 +522,7 @@ class ProcessOrderResource extends Resource
->label('Scrap Quantity') ->label('Scrap Quantity')
->default('0.000') ->default('0.000')
->required() ->required()
->readOnly(fn ($get) => ($get('rework_status') == 0 || $get('process_order') == null)) ->readOnly(fn ($get) => ($get('rework_status') == 0 || trim($get('process_order')) == null || trim($get('process_order')) == ''))
->reactive() ->reactive()
->numeric() ->numeric()
->afterStateUpdated(function (callable $set, callable $get, ?string $state) { ->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
@@ -414,7 +549,7 @@ class ProcessOrderResource extends Resource
Forms\Components\TextInput::make('sfg_number') Forms\Components\TextInput::make('sfg_number')
->label('SFG Number') ->label('SFG Number')
->reactive() ->reactive()
->readOnly(fn ($get) => ($get('process_order') == null)) ->readOnly(fn ($get) => (trim($get('process_order')) == null || trim($get('process_order')) == ''))
->afterStateUpdated(function ($state, $set, callable $get, $livewire) { ->afterStateUpdated(function ($state, $set, callable $get, $livewire) {
$plantId = $get('plant_id'); $plantId = $get('plant_id');
$sfgNo = $get('sfg_number'); $sfgNo = $get('sfg_number');
@@ -448,7 +583,7 @@ class ProcessOrderResource extends Resource
Forms\Components\TextInput::make('machine_name') Forms\Components\TextInput::make('machine_name')
->label('Machine Name') ->label('Machine Name')
->reactive() ->reactive()
->readOnly(fn ($get) => ($get('process_order') == null)) ->readOnly(fn ($get) => (trim($get('process_order')) == null || trim($get('process_order')) == ''))
->afterStateUpdated(function (callable $set, callable $get, ?string $state) { ->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
}), }),
@@ -576,7 +711,7 @@ class ProcessOrderResource extends Resource
} }
// Get the value of process_order field // Get the value of process_order field
$processOrder = $get('process_order'); $processOrder = trim($get('process_order'));
if ($batchId != $processOrder) { if ($batchId != $processOrder) {
Notification::make() Notification::make()
@@ -621,7 +756,7 @@ class ProcessOrderResource extends Resource
return Filament::auth()->user()->can('view process order packing slip'); return Filament::auth()->user()->can('view process order packing slip');
}) })
->action(function ($get, callable $set) { ->action(function ($get, callable $set) {
$equipmentNumber = $get('process_order'); $equipmentNumber = trim($get('process_order'));
$set('updated_by', Filament::auth()->user()?->name); $set('updated_by', Filament::auth()->user()?->name);
if (! $equipmentNumber) { if (! $equipmentNumber) {
@@ -1064,7 +1199,7 @@ class ProcessOrderResource extends Resource
->options(function (callable $get) { ->options(function (callable $get) {
$plantId = $get('plant'); $plantId = $get('plant');
$itemId = $get('Item'); $itemId = $get('Item');
$processOrder = $get('process_order'); $processOrder = trim($get('process_order'));
if (empty($plantId) || empty($itemId) || empty($processOrder)) { if (empty($plantId) || empty($itemId) || empty($processOrder)) {
return []; return [];
@@ -1081,7 +1216,7 @@ class ProcessOrderResource extends Resource
->afterStateUpdated(function ($state, callable $set, callable $get) { ->afterStateUpdated(function ($state, callable $set, callable $get) {
$plantId = $get('plant'); $plantId = $get('plant');
$itemId = $get('Item'); $itemId = $get('Item');
$processOrder = $get('process_order'); $processOrder = trim($get('process_order'));
if (! $plantId || ! $itemId || ! $processOrder || ! $state) { if (! $plantId || ! $itemId || ! $processOrder || ! $state) {
$set('received_quantity', null); $set('received_quantity', null);