Updated received quantity exceed validation on process order resource page #480
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user