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
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:
@@ -269,14 +269,6 @@ class PanelBoxValidationResource extends Resource
|
|||||||
$set('part_validation_type_options', []);
|
$set('part_validation_type_options', []);
|
||||||
$set('validation1_image_url', null);
|
$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;
|
return;
|
||||||
}
|
}
|
||||||
// }
|
// }
|
||||||
@@ -285,34 +277,122 @@ class PanelBoxValidationResource extends Resource
|
|||||||
$set('validationError', null);
|
$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]);
|
// // $itemCode = trim($parts[1] ?? ''); // item code
|
||||||
}
|
// // $serialNumber = trim($parts[2] ?? ''); // serial number
|
||||||
else
|
|
||||||
{
|
|
||||||
// $parts = explode('/', $state);
|
|
||||||
|
|
||||||
// $itemCode = trim($parts[1] ?? ''); // item code
|
// $parts = array_map('trim', explode('/', $state));
|
||||||
// $serialNumber = trim($parts[2] ?? ''); // serial number
|
|
||||||
|
|
||||||
$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
|
// $serialNumber = end($parts); // last part
|
||||||
$itemCode = $parts[1] ?? '';
|
|
||||||
}
|
// $itemCode = $parts[1] ?? '';
|
||||||
|
// }
|
||||||
|
|
||||||
// Store serial number before resetting fields
|
// 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) {
|
if (strlen($itemCode) < 6) {
|
||||||
$set('validationError', 'Item code must be at least 6 digits.');
|
$set('validationError', 'Item code must be at least 6 digits.');
|
||||||
@@ -332,29 +412,6 @@ class PanelBoxValidationResource extends Resource
|
|||||||
|
|
||||||
return;
|
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 {
|
else {
|
||||||
$set('validationError', null);
|
$set('validationError', null);
|
||||||
}
|
}
|
||||||
@@ -436,7 +493,7 @@ class PanelBoxValidationResource extends Resource
|
|||||||
$serialExists = PanelBoxValidation::where('serial_number', $serialNumber)->where('plant_id', $plantId)->exists();
|
$serialExists = PanelBoxValidation::where('serial_number', $serialNumber)->where('plant_id', $plantId)->exists();
|
||||||
|
|
||||||
if ($serialExists && ! $get('id')) {
|
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('sticker_master_id', null);
|
||||||
$set('uom', null);
|
$set('uom', null);
|
||||||
$set('serial_number', null);
|
$set('serial_number', null);
|
||||||
@@ -553,14 +610,43 @@ class PanelBoxValidationResource extends Resource
|
|||||||
$options['part_validation4'] = 'Part Validation 4';
|
$options['part_validation4'] = 'Part Validation 4';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save options in hidden field
|
|
||||||
$set('part_validation_type_options', $options);
|
$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) => [
|
->extraAttributes(fn ($get) => [
|
||||||
'class' => $get('validationError') ? 'border-red-500' : '',
|
'class' => $get('validationError') ? 'border-red-500' : '',
|
||||||
'id' => 'item_id',
|
'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)
|
->hint(fn ($get) => $get('validationError') ? $get('validationError') : null)
|
||||||
->hintColor('danger'),
|
->hintColor('danger'),
|
||||||
@@ -595,6 +681,16 @@ class PanelBoxValidationResource extends Resource
|
|||||||
return;
|
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);
|
$parts = explode('/', $state);
|
||||||
$extracted = trim(end($parts));
|
$extracted = trim(end($parts));
|
||||||
|
|
||||||
@@ -632,11 +728,21 @@ class PanelBoxValidationResource extends Resource
|
|||||||
return;
|
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);
|
$parts = explode('/', $state);
|
||||||
$extracted = trim(end($parts));
|
$extracted = trim(end($parts));
|
||||||
|
|
||||||
if (count($parts) < 3 || $extracted == '') {
|
if ($extracted == '') {
|
||||||
$set('packSlipPanelError', 'Format must be: SupplierCode/ItemCode/SerialNumber');
|
$set('packSlipPanelError', "SerialNumber can't be empty!");
|
||||||
$set('pack_slip_panel_qr', null);
|
$set('pack_slip_panel_qr', null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -675,11 +781,21 @@ class PanelBoxValidationResource extends Resource
|
|||||||
return;
|
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);
|
$parts = explode('/', $state);
|
||||||
$extracted = trim(end($parts));
|
$extracted = trim(end($parts));
|
||||||
|
|
||||||
if (count($parts) < 3 || $extracted == '') {
|
if ($extracted == '') {
|
||||||
$set('namePlatePanelError', 'Format must be: SupplierCode/ItemCode/SerialNumber');
|
$set('namePlatePanelError', "SerialNumber cant't be empty!");
|
||||||
$set('name_plate_panel_qr', null);
|
$set('name_plate_panel_qr', null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -718,11 +834,21 @@ class PanelBoxValidationResource extends Resource
|
|||||||
return;
|
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);
|
$parts = explode('/', $state);
|
||||||
$extracted = trim(end($parts));
|
$extracted = trim(end($parts));
|
||||||
|
|
||||||
if (count($parts) < 3 || $extracted == '') {
|
if ($extracted == '') {
|
||||||
$set('tubeStickerPanelError', 'Format must be: SupplierCode/ItemCode/SerialNumber');
|
$set('tubeStickerPanelError', "SerialNumber can't be empty!");
|
||||||
$set('tube_sticker_panel_qr', null);
|
$set('tube_sticker_panel_qr', null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -741,7 +867,7 @@ class PanelBoxValidationResource extends Resource
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
->hint(fn ($get) => $get('tubeStickerPanelError') ?? null)
|
->hint(fn ($get ) => $get('tubeStickerPanelError') ?? null)
|
||||||
->hintColor('danger')
|
->hintColor('danger')
|
||||||
->extraAttributes(fn ($get) => [
|
->extraAttributes(fn ($get) => [
|
||||||
'class' => $get('tubeStickerPanelError') ? 'border-red-500' : '',
|
'class' => $get('tubeStickerPanelError') ? 'border-red-500' : '',
|
||||||
@@ -762,11 +888,21 @@ class PanelBoxValidationResource extends Resource
|
|||||||
return;
|
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);
|
$parts = explode('/', $state);
|
||||||
$extracted = trim(end($parts));
|
$extracted = trim(end($parts));
|
||||||
|
|
||||||
if (count($parts) < 3 || $extracted == '') {
|
if ($extracted == '') {
|
||||||
$set('warrantyCardPanelError', 'Format must be: SupplierCode/ItemCode/SerialNumber');
|
$set('warrantyCardPanelError', "SerialNumber can't be empty!");
|
||||||
$set('warranty_card_qr', null);
|
$set('warranty_card_qr', null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -774,7 +910,7 @@ class PanelBoxValidationResource extends Resource
|
|||||||
$expected = $get('serial_number');
|
$expected = $get('serial_number');
|
||||||
|
|
||||||
if ($extracted != $expected) {
|
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);
|
$set('warranty_card_qr', null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -826,7 +962,6 @@ class PanelBoxValidationResource extends Resource
|
|||||||
|
|
||||||
if ($state == null || trim($state) == '') {
|
if ($state == null || trim($state) == '') {
|
||||||
$set('part_validation1_error', null);
|
$set('part_validation1_error', null);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -845,7 +980,6 @@ class PanelBoxValidationResource extends Resource
|
|||||||
$set('part_validation1_error', null);
|
$set('part_validation1_error', null);
|
||||||
} else {
|
} else {
|
||||||
$set('part_validation1_error', 'Invalid input for part validation 1.');
|
$set('part_validation1_error', 'Invalid input for part validation 1.');
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -1078,7 +1212,6 @@ class PanelBoxValidationResource extends Resource
|
|||||||
Forms\Components\Hidden::make('updated_by')
|
Forms\Components\Hidden::make('updated_by')
|
||||||
->label('Updated By')
|
->label('Updated By')
|
||||||
->default(Filament::auth()->user()?->name),
|
->default(Filament::auth()->user()?->name),
|
||||||
|
|
||||||
Forms\Components\View::make('components.panel-checklist-wrapper')
|
Forms\Components\View::make('components.panel-checklist-wrapper')
|
||||||
->visible(fn ($livewire) => $livewire->showChecklist)
|
->visible(fn ($livewire) => $livewire->showChecklist)
|
||||||
->statePath('checklist')
|
->statePath('checklist')
|
||||||
|
|||||||
Reference in New Issue
Block a user