Create" // } // Hide only the big H1 heading on the page public function getHeading(): string { return ''; } public function boot(): void { // dd('Current Route: ' . Route::currentRouteName()); Filament::registerRenderHook( 'panels::body.start', function () { if (str_contains(Route::currentRouteName(), 'filament.admin.resources.production-quantities.create')) { echo << /* Hide sidebar and topbar */ .fi-sidebar, .fi-topbar { display: none !important; } /* Expand main container to full screen */ .fi-main { margin: 0 !important; padding: 0 !important; /* height: 20%; */ max-width: 100% !important; overflow-y: auto; Allow vertical scrolling } /* Expand page area fully */ .fi-main > .fi-page { padding: 0 !important; max-width: 100% !important; } /* Allow scroll on body again */ body { overflow: auto; } HTML; } } ); } // public function getMaxContentWidth(): MaxWidth // { // return MaxWidth::Full; // } protected function getFooterWidgets(): array { return [ ItemOverview::make(), ]; } protected function getRedirectUrl(): string { return $this->getResource()::getUrl('create'); // Stay on Create Page after saving } public $qrData, $pId, $bId, $sId, $lId, $iId, $succId, $sNoId, $succStat, $recQr, $prodOrder; // protected static bool $canCreateAnother = false; public function getFormActions(): array { // return parent::getFormActions(); //return []; // return [ // $this->getCancelFormAction(), // ]; return []; } public function processAllValues($formQRData) { //$formValues = []; // This will get all form data from the request $this->qrData = null; $this->iId = null; $this->succId = null; $this->sNoId = null; $this->succStat = null; $formValues = request()->all(); $this->validateAndProcessForm($formValues, $formQRData); // Process the form values } public function validateAndProcessForm($formValues, $formQRData) { $user = Filament::auth()->user(); //->name $operatorName = $user->name; // $this->validate(); try { // Access the nested form data $componentData = json_decode($formValues['components'][0]['snapshot'], true); $formData = $componentData['data']['data'][0]; // Access first item in data array // Extract specific values $this->qrData = $formQRData ?? $formData['item_code']; $this->pId = $formData['plant_id'] ?? null; $this->bId = $formData['block_name'] ?? null; $this->sId = $formData['shift_id'] ?? null; $this->lId = $formData['line_id'] ?? null; $this->iId = $formData['item_id'] ?? null; $this->succId = $formData['success_msg'] ?? null; // $this->sNoId = $formData['serial_number'] ?? null; $this->prodOrder = $formData['production_order'] ?? null; $this->recQr = $formData['recent_qr'] ?? null; } catch (\Exception $e) { //dd('Error parsing form data:', $e->getMessage(), $formValues); Notification::make() ->title("Error Parsing Form Data") // {$operatorName} ->body($e->getMessage()) ->danger() // ->persistent() ->send(); return; } // dd($formData, $formQRData); // dd($this->form->getState()['serial_number']); if (empty($formQRData)) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid QR') ->body("Scan the valid QR code.
(Ex: Item_Code|Serial_Number )") ->danger() ->send(); return; } else { if (!$this->pId) { $this->form->fill([ 'plant_id'=> null, 'block_name'=> null, 'shift_id'=> null, 'line_id'=> null, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> null, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Choose Plant') ->body("Please select a plant first.") ->danger() ->send(); return; } else if (!$this->bId) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> null, 'shift_id'=> null, 'line_id'=> null, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> null, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Choose Block') ->body("Please select a block first.") ->danger() ->send(); return; } else if (!$this->sId) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> null, 'line_id'=> null, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> null, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Choose Shift') ->body("Please select a shift first.") ->danger() ->send(); return; } else if (!$this->lId) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> null, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> null, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Choose Line') ->body("Please select a line first.") ->danger() ->send(); return; } else if (!$this->prodOrder) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> null, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Please scan the production order first.') ->danger() ->send(); return; } if(!is_numeric($this->prodOrder)) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> null, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid Production Order') ->body("Must contain numeric values only.") ->danger() ->send(); return; } else if (!preg_match('/^[1-9][0-9]{6,}$/', $this->prodOrder)) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> null, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid Production Order') ->body("Must contain at least 7 digits.
Must start with a non-zero digit.") ->danger() ->send(); return; } // ******************************** $exists = \App\Models\ProductionPlan::where('plant_id', $this->pId) ->where('shift_id', $this->sId) ->where('line_id', $this->lId) ->whereDate('created_at', today()) ->latest() ->exists(); if ($exists) { $currentDate = date('Y-m-d'); $shiftId = Shift::where('id', $this->sId) ->first(); [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; $hRs = (int) $hRs; //$miNs = (int) $miNs;-*/ $totalMinutes = $hRs * 60 + $miNs; $from_dt = $currentDate . ' ' . $shiftId->start_time; $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); $currentDateTime = date('Y-m-d H:i:s'); // Check if current date time is within the range if (!($currentDateTime >= $from_dt && $currentDateTime < $to_dt)) { //echo "Choosed a valid shift..."; // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid Shift') ->body("Please select a valid shift.") ->danger() ->send(); //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')'); return; } else { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); } } else { $existShifts = \App\Models\ProductionPlan::where('plant_id', $this->pId) ->where('shift_id', $this->sId) ->where('line_id', $this->lId) ->whereDate('created_at', Carbon::yesterday()) ->latest() ->exists(); if ($existShifts) //if ($existShifts->count() > 0) { // record exist on yesterday //$currentDate = date('Y-m-d'); $yesterday = date('Y-m-d', strtotime('-1 days')); $shiftId = Shift::where('id', $this->sId) ->first(); [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; $hRs = (int) $hRs; // $miNs = (int) $miNs;-*/ $totalMinutes = $hRs * 60 + $miNs; $from_dt = $yesterday . ' ' . $shiftId->start_time; $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); $currentDateTime = date('Y-m-d H:i:s'); // Check if current date time is within the range if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); } else { $currentDate = date('Y-m-d'); $shiftId = Shift::where('id', $this->sId) ->first(); [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; $hRs = (int) $hRs; // $miNs = (int) $miNs;-*/ $totalMinutes = $hRs * 60 + $miNs; $from_dt = $currentDate . ' ' . $shiftId->start_time; $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); $currentDateTime = date('Y-m-d H:i:s'); // Check if current date time is within the range if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) { //echo "Choosed a valid shift..."; // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Plan Not Found') ->body("Please set production plan first.") ->danger() ->send(); //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')'); return; } else { //echo "Choosed a valid shift..."; // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid Shift') ->body("Please select a valid shift.") ->danger() ->send(); //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')'); return; } } } else { // record not exist on yesterday //$currentDate = date('Y-m-d'); $yesterday = date('Y-m-d', strtotime('-1 days')); $shiftId = Shift::where('id', $this->sId) ->first(); [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; $hRs = (int) $hRs; // $miNs = (int) $miNs;-*/ $totalMinutes = $hRs * 60 + $miNs; $from_dt = $yesterday . ' ' . $shiftId->start_time; $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); $currentDateTime = date('Y-m-d H:i:s'); // Check if current date time is within the range if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) { //echo "Choosed a valid shift..."; // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Plan Not Found') ->body("Please set production plan first.") ->danger() ->send(); //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')'); return; } else { $currentDate = date('Y-m-d'); $shiftId = Shift::where('id', $this->sId) ->first(); [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; $hRs = (int) $hRs; // $miNs = (int) $miNs;-*/ $totalMinutes = $hRs * 60 + $miNs; $from_dt = $currentDate . ' ' . $shiftId->start_time; $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); $currentDateTime = date('Y-m-d H:i:s'); // Check if current date time is within the range if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) { //echo "Choosed a valid shift..."; // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Plan Not Found') ->body("Please set production plan first.") ->danger() ->send(); //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')'); return; } else { //echo "Choosed a valid shift..."; // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid Shift') ->body("Please select a valid shift.") ->danger() ->send(); //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')'); return; } } } } // ******************************** $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); } if (!preg_match('/^[a-zA-Z0-9]{6,}+\|[1-9][a-zA-Z0-9]{8,}+(\|)?$/', $formQRData)) { if (strpos($formQRData, '|') === false) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid QR') ->body("Scan the valid QR code.
(Ex: Item_Code|Serial_Number )") ->danger() ->send(); return; } else { $splits = explode('|', $formQRData); $iCode = trim($splits[0]); $sNumber = isset($splits[1]) ? trim($splits[1]) : null; if (!ctype_alnum($iCode)) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid Item Code') ->body("Item code must contain alpha-numeric values only.") ->danger() ->send(); return; } else if (strlen($iCode) < 6) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid Item Code') ->body("Item code must be at least 6 digits.") ->danger() ->send(); return; } else if (!ctype_alnum($sNumber)) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid Serial Number') ->body("Serial Number must contain alpha-numeric values only.") ->danger() ->duration(800) ->send(); return; } else if (strlen($sNumber) < 9) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid Serial Number') ->body("Serial Number must be at least 9 digits.") ->danger() ->duration(800) ->send(); return; } } $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Invalid QR') ->body("Scan the valid QR code.
(Ex: Item_Code|Serial_Number )") ->danger() ->send(); return; } else { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); } // Only search when all parent IDs are selected $parts = explode('|', $formQRData); $itemCode = trim($parts[0]); $serialNumber = isset($parts[1]) ? trim($parts[1]) : null; // Fetch item using item code and plant_id $masItem = Item::where('code', $itemCode)->first(); if (!$masItem) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Unknown Item Code') ->body("Item code does not exist in master data.") ->danger() ->send(); return; } $item = Item::where('code', $itemCode) ->where('plant_id', $this->pId) ->first(); if ($item) { $sNo = ProductionQuantity::where('serial_number', $serialNumber)->where('plant_id', $this->pId)->exists(); if (!$sNo) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> $item->id, 'serial_number'=> null, 'success_msg'=> 'Y', 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); $this->succId = 'Y'; $this->iId = $item->id; } else { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Duplicate Serial Number') ->body("Serial number already exist in database for choosed plant.") ->danger() ->send(); return; } } else { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title('Unknown Item Code') ->body("Item code does not exist in master data for choosed plant.") ->danger() ->send(); return; } if ($this->succId === null) { $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $this->recQr, ]); Notification::make() ->title("Invalid QR Found") // {$operatorName} ->body("Please, scan the valid QR code.") ->danger() // ->persistent() ->send(); return; } else { // // Perform any additional processing or database operations // $this->saveFormData($formValues); $parts = explode('|', $this->qrData); $itemCode = trim($parts[0]); $this->sNoId = isset($parts[1]) ? trim($parts[1]) : null; ProductionQuantity::create([ 'plant_id'=> $this->pId, 'shift_id'=> $this->sId, 'line_id' => $this->lId, 'item_id'=> $this->iId, 'serial_number' => $this->sNoId, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, ]); // after success insertion $this->form->fill([ 'plant_id'=> $this->pId, 'block_name'=> $this->bId, 'shift_id'=> $this->sId, 'line_id'=> $this->lId, 'item_id'=> null, 'serial_number'=> null, 'success_msg'=> null, 'production_order'=> $this->prodOrder, 'operator_id'=> $operatorName, 'recent_qr' => $itemCode.' | '.$this->sNoId, ]); Notification::make() ->title("Valid QR Found") // {$operatorName} ->body("Valid QR code scanned: {$this->qrData}.") ->success() // ->persistent() ->send(); } } protected function saveFormData($formValues) { // Save the form data to the database or perform other operations // For example: $model = ProductionQuantity::create($formValues); // // Optionally, you can emit an event or perform a redirect after saving // $this->emit('formSaved', $model->id); } }