Added logic in panel box validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m10s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 45s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 1m44s
Laravel Pint / pint (pull_request) Successful in 2m8s
Laravel Larastan / larastan (pull_request) Failing after 3m46s

This commit is contained in:
dhanabalan
2026-06-22 08:30:14 +05:30
parent 2e6129970c
commit 29b9eae080

View File

@@ -269,14 +269,6 @@ class PanelBoxValidationResource extends Resource
$set('part_validation_type_options', []);
$set('validation1_image_url', null);
return;
} elseif (strlen($sNumber) < 9) {
$set('validationError', 'Serial Number must be at least 9 digits.');
$set('part_validation_type', null);
$set('show_validation_image', false);
$set('part_validation_type_options', []);
$set('validation1_image_url', null);
return;
}
// }
@@ -285,34 +277,122 @@ class PanelBoxValidationResource extends Resource
$set('validationError', null);
}
}
// if ($state && str_contains($state, '|')) {
if ($state && str_contains($state, '|')) {
// $parts = explode('|', $state);
$parts = explode('|', $state);
// $itemCode = trim($parts[0]); // Extract item code // 123456|123456789
$itemCode = trim($parts[0]); // Extract item code // 123456|123456789
// $serialNumber = trim($parts[1]);
// }
// else
// {
// // $parts = explode('/', $state);
$serialNumber = trim($parts[1]);
}
else
{
// $parts = explode('/', $state);
// // $itemCode = trim($parts[1] ?? ''); // item code
// // $serialNumber = trim($parts[2] ?? ''); // serial number
// $itemCode = trim($parts[1] ?? ''); // item code
// $serialNumber = trim($parts[2] ?? ''); // serial number
// $parts = array_map('trim', explode('/', $state));
$parts = array_map('trim', explode('/', $state));
// // Expected format: 121245/165467/2606/1002634
// if (count($parts) != 4) {
// Notification::make()
// ->title('Invalid QR Format')
// ->body('Expected format: plantcode/itemcode/yearmm/serialnumber')
// ->danger()
// ->send();
$serialNumber = end($parts); // last part
// return;
// }
// item code depends on format
$itemCode = $parts[1] ?? '';
}
// $serialNumber = end($parts); // last part
// $itemCode = $parts[1] ?? '';
// }
// Store serial number before resetting fields
$previousSerialNumber = $serialNumber;
$previousItemCode = $itemCode;
if (str_contains($state, '|')) {
$parts = array_map('trim', explode('|', $state));
if (count($parts) != 2) {
Notification::make()
->title('Invalid QR Format')
->body('Expected format: ItemCode|SerialNumber')
->danger()
->send();
return;
}
$itemCode = $parts[0];
$serialNumber = $parts[1];
if($serialNumber == '' || $serialNumber == null){
Notification::make()
->title('Unknown Serial number')
->body("Serial number can't be empty!")
->danger()
->send();
$set('item_id', null);
return;
}
elseif (! ctype_alnum($serialNumber)) {
$set('validationError', 'Serial Number should contain alpha-numeric values.');
$set('item_id', null);
return;
}
}
elseif (str_contains($state, '/'))
{
$parts = array_map('trim', explode('/', $state));
if (count($parts) != 4) {
Notification::make()
->title('Invalid QR Format')
->body('Expected format: plantcode/itemcode/yearmm/serialnumber')
->danger()
->send();
$set('item_id', null);
return;
}
$plantCode = $parts[0];
$itemCode = $parts[1];
$yearMonth = $parts[2];
$serialNumber = $parts[3];
if($serialNumber == '' || $serialNumber == null){
Notification::make()
->title('Unknown Serial number')
->body("Serial number can't be empty!")
->danger()
->send();
$set('item_id', null);
return;
}
elseif (! ctype_alnum($serialNumber)) {
$set('validationError', 'Serial Number should contain alpha-numeric values.');
$set('item_id', null);
return;
}
} else {
Notification::make()
->title('Invalid QR Format')
->body('QR must be in either ItemCode|SerialNumber or PlantCode/ItemCode/YearMM/SerialNumber format.')
->danger()
->send();
$set('item_id', null);
$set('validationError', null);
return;
}
if (strlen($itemCode) < 6) {
$set('validationError', 'Item code must be at least 6 digits.');
@@ -332,29 +412,6 @@ class PanelBoxValidationResource extends Resource
return;
}
//elseif ($serialNumber == '') {
// $set('validationError', 'Waiting for full QR scan...');
// return;
// } elseif (strlen($serialNumber) < 9) {
// $set('validationError', 'Serial Number must be at least 9 digits.');
// $set('part_validation_type', null);
// $set('show_validation_image', false);
// $set('part_validation_type_options', []);
// $set('validation1_image_url', null);
// return;
// } elseif (! ctype_alnum($serialNumber)) {
// $set('validationError', 'Serial Number should contain alpha-numeric values.');
// $set('item_id', null);
// $set('part_validation_type', null);
// $set('show_validation_image', false);
// $set('part_validation_type_options', []);
// $set('validation1_image_url', null);
// return;
// }
else {
$set('validationError', null);
}
@@ -436,7 +493,7 @@ class PanelBoxValidationResource extends Resource
$serialExists = PanelBoxValidation::where('serial_number', $serialNumber)->where('plant_id', $plantId)->exists();
if ($serialExists && ! $get('id')) {
$set('validationError', 'Serial number already exists in quality validation.');
$set('validationError', 'Serial number already exists in panel box validation.');
$set('sticker_master_id', null);
$set('uom', null);
$set('serial_number', null);
@@ -553,14 +610,43 @@ class PanelBoxValidationResource extends Resource
$options['part_validation4'] = 'Part Validation 4';
}
// Save options in hidden field
$set('part_validation_type_options', $options);
})
// ->extraAttributes(fn ($get) => [
// 'class' => $get('validationError') ? 'border-red-500' : '',
// 'id' => 'item_id',
// 'onkeydown' => "if (event.key === 'Enter') { event.preventDefault(); event.stopPropagation(); return false; }",
// ])
->extraAttributes(fn ($get) => [
'class' => $get('validationError') ? 'border-red-500' : '',
'id' => 'item_id',
'onkeydown' => "if (event.key === 'Enter') { event.preventDefault(); event.stopPropagation(); return false; }",
'onkeydown' => "
if (event.key === 'Enter') {
const serialFields = [
'serial_number_motor_qr', 'serial_number_pump_qr', 'pack_slip_motor_qr',
'name_plate_motor_qr', 'tube_sticker_motor_qr', 'warranty_card_qr'
];
const partValidationColumns = [
'part_validation1', 'part_validation2', 'part_validation3',
'part_validation4', 'part_validation5'
];
const allFields = [...serialFields.map(f => f + '_visible'), ...partValidationColumns.map(f => f + '_visible')];
const anyVisible = allFields.some(key => {
const el = document.querySelector('[wire\\\\:model*=\"' + key + '\"]');
return el && (el.value === '1' || el.value === 'true' || el.checked);
});
if (anyVisible) {
event.preventDefault();
event.stopPropagation();
return false;
}
}
",
])
->hint(fn ($get) => $get('validationError') ? $get('validationError') : null)
->hintColor('danger'),
@@ -595,6 +681,16 @@ class PanelBoxValidationResource extends Resource
return;
}
if (!preg_match('/^\d+\/\d+\/\d+\/\d+$/', $state)) {
Notification::make()
->title('Invalid QR Format')
->body('Expected format: plantcode/itemcode/yearmm/serialnumber')
->danger()
->send();
$set('serial_number_panel_qr', null);
return;
}
$parts = explode('/', $state);
$extracted = trim(end($parts));
@@ -632,11 +728,21 @@ class PanelBoxValidationResource extends Resource
return;
}
if (!preg_match('/^\d+\/\d+\/\d+\/\d+$/', $state)) {
Notification::make()
->title('Invalid QR Format')
->body('Expected format: plantcode/itemcode/yearmm/serialnumber')
->danger()
->send();
$set('pack_slip_panel_qr', null);
return;
}
$parts = explode('/', $state);
$extracted = trim(end($parts));
if (count($parts) < 3 || $extracted == '') {
$set('packSlipPanelError', 'Format must be: SupplierCode/ItemCode/SerialNumber');
if ($extracted == '') {
$set('packSlipPanelError', "SerialNumber can't be empty!");
$set('pack_slip_panel_qr', null);
return;
}
@@ -675,11 +781,21 @@ class PanelBoxValidationResource extends Resource
return;
}
if (!preg_match('/^\d+\/\d+\/\d+\/\d+$/', $state)) {
Notification::make()
->title('Invalid QR Format')
->body('Expected format: plantcode/itemcode/yearmm/serialnumber')
->danger()
->send();
$set('serial_number_panel_qr', null);
return;
}
$parts = explode('/', $state);
$extracted = trim(end($parts));
if (count($parts) < 3 || $extracted == '') {
$set('namePlatePanelError', 'Format must be: SupplierCode/ItemCode/SerialNumber');
if ($extracted == '') {
$set('namePlatePanelError', "SerialNumber cant't be empty!");
$set('name_plate_panel_qr', null);
return;
}
@@ -718,11 +834,21 @@ class PanelBoxValidationResource extends Resource
return;
}
if (!preg_match('/^\d+\/\d+\/\d+\/\d+$/', $state)) {
Notification::make()
->title('Invalid QR Format')
->body('Expected format: plantcode/itemcode/yearmm/serialnumber')
->danger()
->send();
$set('serial_number_panel_qr', null);
return;
}
$parts = explode('/', $state);
$extracted = trim(end($parts));
if (count($parts) < 3 || $extracted == '') {
$set('tubeStickerPanelError', 'Format must be: SupplierCode/ItemCode/SerialNumber');
if ($extracted == '') {
$set('tubeStickerPanelError', "SerialNumber can't be empty!");
$set('tube_sticker_panel_qr', null);
return;
}
@@ -741,7 +867,7 @@ class PanelBoxValidationResource extends Resource
return;
}
})
->hint(fn ($get) => $get('tubeStickerPanelError') ?? null)
->hint(fn ($get ) => $get('tubeStickerPanelError') ?? null)
->hintColor('danger')
->extraAttributes(fn ($get) => [
'class' => $get('tubeStickerPanelError') ? 'border-red-500' : '',
@@ -762,11 +888,21 @@ class PanelBoxValidationResource extends Resource
return;
}
if (!preg_match('/^\d+\/\d+\/\d+\/\d+$/', $state)) {
Notification::make()
->title('Invalid QR Format')
->body('Expected format: plantcode/itemcode/yearmm/serialnumber')
->danger()
->send();
$set('serial_number_panel_qr', null);
return;
}
$parts = explode('/', $state);
$extracted = trim(end($parts));
if (count($parts) < 3 || $extracted == '') {
$set('warrantyCardPanelError', 'Format must be: SupplierCode/ItemCode/SerialNumber');
if ($extracted == '') {
$set('warrantyCardPanelError', "SerialNumber can't be empty!");
$set('warranty_card_qr', null);
return;
}
@@ -774,7 +910,7 @@ class PanelBoxValidationResource extends Resource
$expected = $get('serial_number');
if ($extracted != $expected) {
$set('warrantyCardPanelError', 'Tube Sticker Panel serial does not match.');
$set('warrantyCardPanelError', 'Warranty Card Panel serial does not match.');
$set('warranty_card_qr', null);
return;
}
@@ -826,7 +962,6 @@ class PanelBoxValidationResource extends Resource
if ($state == null || trim($state) == '') {
$set('part_validation1_error', null);
return;
}
@@ -845,7 +980,6 @@ class PanelBoxValidationResource extends Resource
$set('part_validation1_error', null);
} else {
$set('part_validation1_error', 'Invalid input for part validation 1.');
return;
}
})
@@ -1078,7 +1212,6 @@ class PanelBoxValidationResource extends Resource
Forms\Components\Hidden::make('updated_by')
->label('Updated By')
->default(Filament::auth()->user()?->name),
Forms\Components\View::make('components.panel-checklist-wrapper')
->visible(fn ($livewire) => $livewire->showChecklist)
->statePath('checklist')