diff --git a/app/Filament/Resources/PanelBoxValidationResource.php b/app/Filament/Resources/PanelBoxValidationResource.php index 969061c..571d3d4 100644 --- a/app/Filament/Resources/PanelBoxValidationResource.php +++ b/app/Filament/Resources/PanelBoxValidationResource.php @@ -17,6 +17,7 @@ use App\Models\Item; use App\Models\Line; use App\Models\Plant; use App\Models\StickerMaster; +use App\Models\PanelGrMaster; use Filament\Notifications\Notification; use Illuminate\Support\Facades\Mail; use App\Mail\InvalidQualityMail; @@ -186,6 +187,7 @@ class PanelBoxValidationResource extends Resource $set('validation1_image_url', null); $set('serialPanelConfirmed', false); + if (! $pId) { $set('pqLineError', 'Please select a line.'); } else { @@ -228,7 +230,6 @@ class PanelBoxValidationResource extends Resource // Proceed with validation logic for new scanned QR code if (! $state || trim($state) == '') { $set('validationError', null); - return; } @@ -276,48 +277,105 @@ class PanelBoxValidationResource extends Resource return; } - // } + $existInMasterPo = PanelGrMaster::where('document_number', $pOrder)->where('plant_id', $plantId)->first(); + + if(!$existInMasterPo){ + Notification::make() + ->title('Panel GR Record') + ->body("Production Order (Or) Doc No'{$pOrder}' not found against plant code '{$plaCode}' in Panel Gr master.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $iId = Item::where('code', $iCode)->where('plant_id', $plantId)->first(); + + if(!$iId){ + Notification::make() + ->title('Item not found') + ->body("Item code'{$iCode}' not found against plant code '{$plaCode}' in item master.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $existInMaster = PanelGrMaster::where('document_number', $pOrder)->where('item_id', $iId->id)->where('plant_id', $plantId)->first(); + + if(!$existInMaster){ + Notification::make() + ->title('Panel GR Record Not Found') + ->body("No Panel GR record found for Production Order (Or) Doc No'{$pOrder}' and for Item '{$iCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + else if($existInMaster->supplier_number == '' || $existInMaster->supplier_number == null){ + Notification::make() + ->title('Panel GR Found') + ->body("Supplier Number cannot be empty Panel GR record found for Production Order '{$pOrder}' and Item '{$iCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + // else if($existInMaster->supplier_number != $supplier){ + // Notification::make() + // ->title('Panel GR Found') + // ->body("Supplier code not match for Production Order (Or) Doc No'{$pOrder}' and Item '{$iCode}'.") + // ->danger() + // ->send(); + // $set('item_id', null); + // return; + // } + else if($existInMaster->quantity == '' || $existInMaster->quantity == null){ + Notification::make() + ->title('Panel GR Found') + ->body("Quantity cannot be empty Panel GR record found for Production Order '{$pOrder}' and Item '{$iCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + else if($existInMaster->invoice_number == '' || $existInMaster->invoice_number == null){ + Notification::make() + ->title('Panel GR Found') + ->body("Invoice Number cannot be empty Panel GR record found for Production Order '{$pOrder}' and Item '{$iCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $sticker = StickerMaster::where('plant_id', $plantId)->where('item_id', $iId->id)->first(); + + if(!$sticker){ + Notification::make() + ->title('Unknown Item Code') + ->body("Item code not found '{$iId->code}' in sticker master.") + ->danger() + ->send(); + $set('item_id', null); + } + + $existQuanInPanel = PanelBoxValidation::where('plant_id', $plantId)->where('production_order', $pOrder)->where('sticker_master_id', $sticker->id)->count(); + + if ($existQuanInPanel >= (int) $existInMaster->quantity) { + Notification::make() + ->title('Quantity Completed') + ->body("Panel box quantity '{$existQuanInPanel}' exceeds the available quantity '{$existInMaster->quantity}' in Panel GR Master for Production Order '{$pOrder}' and Item '{$iCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } } else { $set('validationError', null); } } - // if ($state && str_contains($state, '|')) { - - // $parts = explode('|', $state); - - // $itemCode = trim($parts[0]); // Extract item code // 123456|123456789 - - // $serialNumber = trim($parts[1]); - // } - // else - // { - // // $parts = explode('/', $state); - - // // $itemCode = trim($parts[1] ?? ''); // item code - // // $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(); - - // return; - // } - - // $serialNumber = end($parts); // last part - - // $itemCode = $parts[1] ?? ''; - // } - - // Store serial number before resetting fields - - if (str_contains($state, '|')) { $parts = array_map('trim', explode('|', $state)); @@ -351,6 +409,101 @@ class PanelBoxValidationResource extends Resource return; } + $existInMasterPo = PanelGrMaster::where('document_number', $pOrder)->where('plant_id', $plantId)->first(); + + if(!$existInMasterPo){ + Notification::make() + ->title('Panel GR Record') + ->body("Production Order (Or) Doc No'{$pOrder}' not found against plant code '{$plaCode}' in Panel Gr master.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $iId = Item::where('code', $itemCode)->where('plant_id', $plantId)->first(); + + if(!$iId){ + Notification::make() + ->title('Item not found') + ->body("Item code'{$itemCode}' not found against plant code '{$plaCode}' in item master.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $existInMaster = PanelGrMaster::where('document_number', $pOrder)->where('item_id', $iId->id)->where('plant_id', $plantId)->first(); + + if(!$existInMaster){ + Notification::make() + ->title('Panel GR Record Not Found') + ->body("No Panel GR record found for Production Order (Or) Doc No'{$pOrder}' and for Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + else if($existInMaster->supplier_number == '' || $existInMaster->supplier_number == null){ + Notification::make() + ->title('Panel GR Found') + ->body("Supplier Number cannot be empty Panel GR record found for Production Order '{$pOrder}' and Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + // else if($existInMaster->supplier_number != $supplier){ + // Notification::make() + // ->title('Panel GR Found') + // ->body("Supplier code not match for Production Order (Or) Doc No'{$pOrder}' and Item '{$iCode}'.") + // ->danger() + // ->send(); + // $set('item_id', null); + // return; + // } + else if($existInMaster->quantity == '' || $existInMaster->quantity == null){ + Notification::make() + ->title('Panel GR Found') + ->body("Quantity cannot be empty Panel GR record found for Production Order '{$pOrder}' and Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + else if($existInMaster->invoice_number == '' || $existInMaster->invoice_number == null){ + Notification::make() + ->title('Panel GR Found') + ->body("Invoice Number cannot be empty Panel GR record found for Production Order '{$pOrder}' and Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $sticker = StickerMaster::where('plant_id', $plantId)->where('item_id', $iId->id)->first(); + + if(!$sticker){ + Notification::make() + ->title('Unknown Item Code') + ->body("Item code not found '{$iId->code}' in sticker master.") + ->danger() + ->send(); + $set('item_id', null); + } + + $existQuanInPanel = PanelBoxValidation::where('plant_id', $plantId)->where('production_order', $pOrder)->where('sticker_master_id', $sticker->id)->count(); + + if ($existQuanInPanel >= (int) $existInMaster->quantity) { + Notification::make() + ->title('Quantity Completed') + ->body("Panel box quantity '{$existQuanInPanel}' exceeds the available quantity '{$existInMaster->quantity}' in Panel GR Master for Production Order '{$pOrder}' and Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + } elseif (str_contains($state, '/')) { @@ -372,6 +525,12 @@ class PanelBoxValidationResource extends Resource $yearMonth = $parts[2]; $serialNumber = $parts[3]; + $supplier = $parts[0]; + $panelBoxCode = $parts[1]; + $yearMonth = $parts[2]; + $serialNumber = $parts[3]; + $panelBoxSerialNo = $parts[2] . $parts[3]; + if($serialNumber == '' || $serialNumber == null){ Notification::make() ->title('Unknown Serial number') @@ -382,20 +541,110 @@ class PanelBoxValidationResource extends Resource $set('item_id', null); return; } - elseif (! ctype_alnum($serialNumber)) { + if (! ctype_alnum($serialNumber)) { $set('validationError', 'Serial Number should contain alpha-numeric values.'); $set('item_id', null); return; } - // else if($plantCode != $plaCode){ - // Notification::make() - // ->title('Invalid Plant Code') - // ->body("Scanned plant code doesn't match the selected plant.") - // ->danger() - // ->send(); - // $set('item_id', null); - // return; - // } + + $existInMasterPo = PanelGrMaster::where('document_number', $pOrder)->where('plant_id', $plantId)->first(); + + if(!$existInMasterPo){ + Notification::make() + ->title('Panel GR Record') + ->body("Production Order (Or) Doc No'{$pOrder}' not found against plant code '{$plaCode}' in Panel Gr master.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $iId = Item::where('code', $itemCode)->where('plant_id', $plantId)->first(); + + if(!$iId){ + Notification::make() + ->title('Item not found') + ->body("Item code'{$itemCode}' not found against plant code '{$plaCode}' in item master.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $existInMaster = PanelGrMaster::where('document_number', $pOrder)->where('item_id', $iId->id)->where('plant_id', $plantId)->first(); + + if(!$existInMaster){ + Notification::make() + ->title('Panel GR Record Not Found') + ->body("No Panel GR record found for Production Order (Or) Doc No'{$pOrder}' and for Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + else if($existInMaster->supplier_number == '' || $existInMaster->supplier_number == null){ + Notification::make() + ->title('Panel GR Found') + ->body("Supplier Number cannot be empty Panel GR record found for Production Order '{$pOrder}' and Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + else if($existInMaster->supplier_number != $supplier){ + Notification::make() + ->title('Panel GR Found') + ->body("Supplier code not match for Production Order (Or) Doc No'{$pOrder}' and Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + else if($existInMaster->quantity == '' || $existInMaster->quantity == null){ + Notification::make() + ->title('Panel GR Found') + ->body("Quantity cannot be empty Panel GR record found for Production Order '{$pOrder}' and Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + else if($existInMaster->invoice_number == '' || $existInMaster->invoice_number == null){ + Notification::make() + ->title('Panel GR Found') + ->body("Invoice Number cannot be empty Panel GR record found for Production Order '{$pOrder}' and Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $sticker = StickerMaster::where('plant_id', $plantId)->where('item_id', $iId->id)->first(); + + if(!$sticker){ + Notification::make() + ->title('Unknown Item Code') + ->body("Item code not found '{$iId->code}' in sticker master.") + ->danger() + ->send(); + $set('item_id', null); + } + + $existQuanInPanel = PanelBoxValidation::where('plant_id', $plantId)->where('production_order', $pOrder)->where('sticker_master_id', $sticker->id)->count(); + + if ($existQuanInPanel >= (int) $existInMaster->quantity) { + Notification::make() + ->title('Quantity Completed') + ->body("Panel box quantity '{$existQuanInPanel}' exceeds the available quantity '{$existInMaster->quantity}' in Panel GR Master for Production Order '{$pOrder}' and Item '{$itemCode}'.") + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $set('panel_box_supplier', $supplier); + $set('panel_box_serial_number', $panelBoxSerialNo); + $set('panel_box_code', $panelBoxCode); } else { @@ -431,9 +680,6 @@ class PanelBoxValidationResource extends Resource $set('validationError', null); } - - $plantId = $get('plant_id'); // Get selected plant - if (! $plantId) { $set('validationError', 'Please select a plant first.'); $set('item_id', null); @@ -593,6 +839,7 @@ class PanelBoxValidationResource extends Resource // } $set('serial_number', $serialNumber); + // Find item based on scanned code $item = Item::where('code', $itemCode) ->where('plant_id', $plantId)->first(); @@ -677,6 +924,12 @@ class PanelBoxValidationResource extends Resource ->reactive(), Forms\Components\Hidden::make('serial_number') ->reactive(), + Forms\Components\Hidden::make('panel_box_supplier') + ->reactive(), + Forms\Components\Hidden::make('panel_box_serial_number') + ->reactive(), + Forms\Components\Hidden::make('panel_box_code') + ->reactive(), Forms\Components\TextInput::make('serial_number_motor_qr') ->label('Serial Number') ->reactive() @@ -722,6 +975,29 @@ class PanelBoxValidationResource extends Resource $set('serialPanelError', null); $set('serial_number_panel_qr', $extracted); $set('serial_number_panel', '1'); + + $panelParts = array_map('trim', explode('/', $state)); + + if (count($panelParts) != 4) { + + Notification::make() + ->title('Invalid QR Format') + ->body('Expected format: plantcode/itemcode/yearmm/serialnumber') + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $supplier = $panelParts[0]; + $panelBoxCode = $panelParts[1]; + $yearMonth = $panelParts[2]; + $serialNumber = $panelParts[3]; + $panelBoxSerialNo = $yearMonth . $serialNumber; + + $set('panel_box_supplier', $supplier); + $set('panel_box_serial_number', $panelBoxSerialNo); + $set('panel_box_code', $panelBoxCode); return; } }) @@ -774,6 +1050,28 @@ class PanelBoxValidationResource extends Resource $set('packSlipPanelError', null); $set('pack_slip_panel_qr', $extracted); $set('pack_slip_panel', '1'); + $panelParts = array_map('trim', explode('/', $state)); + + if (count($panelParts) != 4) { + + Notification::make() + ->title('Invalid QR Format') + ->body('Expected format: plantcode/itemcode/yearmm/serialnumber') + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $supplier = $panelParts[0]; + $panelBoxCode = $panelParts[1]; + $yearMonth = $panelParts[2]; + $serialNumber = $panelParts[3]; + $panelBoxSerialNo = $yearMonth . $serialNumber; + + $set('panel_box_supplier', $supplier); + $set('panel_box_serial_number', $panelBoxSerialNo); + $set('panel_box_code', $panelBoxCode); return; } }) @@ -827,6 +1125,28 @@ class PanelBoxValidationResource extends Resource $set('namePlatePanelError', null); $set('name_plate_panel_qr', $extracted); $set('name_plate_panel', '1'); + $panelParts = array_map('trim', explode('/', $state)); + + if (count($panelParts) != 4) { + + Notification::make() + ->title('Invalid QR Format') + ->body('Expected format: plantcode/itemcode/yearmm/serialnumber') + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $supplier = $panelParts[0]; + $panelBoxCode = $panelParts[1]; + $yearMonth = $panelParts[2]; + $serialNumber = $panelParts[3]; + $panelBoxSerialNo = $yearMonth . $serialNumber; + + $set('panel_box_supplier', $supplier); + $set('panel_box_serial_number', $panelBoxSerialNo); + $set('panel_box_code', $panelBoxCode); return; } }) @@ -880,6 +1200,28 @@ class PanelBoxValidationResource extends Resource $set('tubeStickerPanelError', null); $set('tube_sticker_panel_qr', $extracted); $set('tube_sticker_panel', '1'); + $panelParts = array_map('trim', explode('/', $state)); + + if (count($panelParts) != 4) { + + Notification::make() + ->title('Invalid QR Format') + ->body('Expected format: plantcode/itemcode/yearmm/serialnumber') + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $supplier = $panelParts[0]; + $panelBoxCode = $panelParts[1]; + $yearMonth = $panelParts[2]; + $serialNumber = $panelParts[3]; + $panelBoxSerialNo = $yearMonth . $serialNumber; + + $set('panel_box_supplier', $supplier); + $set('panel_box_serial_number', $panelBoxSerialNo); + $set('panel_box_code', $panelBoxCode); return; } }) @@ -934,6 +1276,28 @@ class PanelBoxValidationResource extends Resource $set('warrantyCardPanelError', null); $set('warranty_card_qr', $extracted); $set('warranty_card_panel', '1'); + $panelParts = array_map('trim', explode('/', $state)); + + if (count($panelParts) != 4) { + + Notification::make() + ->title('Invalid QR Format') + ->body('Expected format: plantcode/itemcode/yearmm/serialnumber') + ->danger() + ->send(); + $set('item_id', null); + return; + } + + $supplier = $panelParts[0]; + $panelBoxCode = $panelParts[1]; + $yearMonth = $panelParts[2]; + $serialNumber = $panelParts[3]; + $panelBoxSerialNo = $yearMonth . $serialNumber; + + $set('panel_box_supplier', $supplier); + $set('panel_box_serial_number', $panelBoxSerialNo); + $set('panel_box_code', $panelBoxCode); return; } }) @@ -1266,6 +1630,11 @@ class PanelBoxValidationResource extends Resource ->alignCenter() ->searchable() ->sortable(), + Tables\Columns\TextColumn::make('production_order') + ->label('Production Order/Doc No') + ->alignCenter() + ->searchable() + ->sortable(), Tables\Columns\TextColumn::make('serial_number') ->label('Serial Number') ->alignCenter() @@ -1321,6 +1690,21 @@ class PanelBoxValidationResource extends Resource ->alignCenter() ->searchable() ->sortable(), + Tables\Columns\TextColumn::make('panel_box_supplier') + ->label('Panel Box Supplier') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('panel_box_serial_number') + ->label('Panel Box Serial Number') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('panel_box_code') + ->label('Panel Box Code') + ->alignCenter() + ->searchable() + ->sortable(), Tables\Columns\TextColumn::make('created_at') ->label('Created At') ->alignCenter()