statePath('filters') ->schema([ Section::make('') ->schema([ Select::make('plant_id') ->label('Plant') ->reactive() ->options(function(){ $plantId = Filament::auth()->user()->plant_id; return $plantId ? Plant::where('id',$plantId) ->pluck('name','id') : Plant::pluck('name','id'); }) ->required(), Select::make('machine_id') ->label('Work Center') ->reactive() ->options(function(callable $get){ $plantId = $get('plant_id'); if (empty($plantId)) { return []; } return Machine::where('plant_id', $plantId)->pluck('work_center', 'id'); }) ->afterStateUpdated(function ($state, callable $set) { $set('production_order', null); $set('from_serial_number', null); $set('to_serial_number', null); $set('sticker_options', []); }) ->required(), TextInput::make('production_order') ->label('Production Order') ->reactive() ->required() ->afterStateUpdated(function ($state, callable $set, $get) { for ($i = 1; $i <= 8; $i++) { $set("sticker_structure{$i}_id", null); } if (blank($state)) { return; } $plantid = $get('plant_id'); $machineId = $get('machine_id'); $plantName = Plant::where('id', $plantid)->value('name'); $workCenter = Machine::where('id', $machineId)->value('work_center'); if (empty($machineId)) { Notification::make() ->title('Work Center not selected') ->body('Please select a Work Center first.') ->warning() ->send(); return; } $productionOrder = ClassCharacteristic::where('plant_id', $plantid)->where('machine_id', $machineId)->where('aufnr', $state)->first(); if (! $productionOrder) { Notification::make() ->title('Production Order not found') ->body("Production Order '{$state}' was not found against machine '$workCenter' and plant '$plantName'.") ->danger() ->send(); return; } $plantId = $productionOrder->plant_id; $itemId = $productionOrder->item_id; $item = Item::find($itemId); if (! $item) { Notification::make() ->title('Item not found') ->body("Item code '{$itemId}' was not found in item master.") ->danger() ->send(); return; } $itemCode = $item->code; $item = Item::where('code', $itemCode)->where('plant_id', $plantId)->first(); if (! $item) { Notification::make() ->title('Item not found') ->body("Item '{$itemCode}' was not found for the selected plant.") ->danger() ->send(); return; } $itemCharacteristic = ClassCharacteristic::where('plant_id', $plantId)->where('item_id', $item->id)->first(); if (! $itemCharacteristic) { Notification::make() ->title('Class characteristic not found') ->body("No class characteristic found for item '{$itemCode}'.") ->danger() ->send(); return; } $itemCharacteristicId = $itemCharacteristic->id; $stickerMappings = StickerMappingMaster::where('plant_id', $plantId) ->where('item_id', $item->id) ->get(); if (! $stickerMappings) { Notification::make() ->title('Sticker mapping not found') ->body("No sticker mapping found for this plant and class characteristic.") ->danger() ->send(); return; } $stickerOptions = []; // foreach ($stickerMappings as $stickerMapping) { // for ($i = 1; $i <= 8; $i++) { // $stickerStructureId = $stickerMapping->{"sticker_structure{$i}_id"}; // if ($stickerStructureId) { // $detail = StickerStructureDetail::where('id', $stickerStructureId) // ->first(); // if ($detail && $detail->sticker_id) { // $stickerOptions[$detail->sticker_id] = $detail->sticker_id; // } // } // } // } foreach ($stickerMappings as $stickerMapping) { for ($i = 1; $i <= 8; $i++) { $machineColumn = "sticker{$i}_machine_id"; $stickerMachineId = $stickerMapping->$machineColumn; if ((string) $stickerMachineId != (string) $machineId) { continue; } $structureColumn = "sticker_structure{$i}_id"; $stickerStructureId = $stickerMapping->$structureColumn; if (empty($stickerStructureId)) { continue; } $detail = StickerStructureDetail::find($stickerStructureId); if ($detail && $detail->sticker_id) { $stickerOptions[$detail->sticker_id] = $detail->sticker_id; } $set("sticker_structure{$i}_id", $stickerStructureId); } } $set('sticker_options', $stickerOptions); }), Select::make('sticker_id') ->label('Sticker ID') ->options(fn (callable $get) => $get('sticker_options') ?? []) ->reactive() ->afterStateUpdated(function ($state, callable $set) { if (blank($state)) { return; } $sticker = StickerStructureDetail::where('sticker_id', $state)->first(); if (! $sticker) { Notification::make() ->title('Sticker not found') ->body("Sticker ID '{$state}' was not found.") ->danger() ->send(); return; } $set('sticker_code', $state); }), Hidden::make('sticker_options') ->default([]), TextInput::make('from_serial_number') ->label('From Serial Number') ->reactive(), TextInput::make('to_serial_number') ->label('To Serial Number') ->reactive(), ]) ->columns(6), ]); } public function processSnoNo($qrcode) { $parts = explode('|', $qrcode, 2); $itemCode = $parts[0] ?? null; $serialNumber = $parts[1] ?? null; $plantId = $this->form->getState()['plant_id']; $plantId = trim($plantId) ?? null; $workCenter = $this->form->getState()['machine_id']; $prodOrderNo= $this->form->getState()['production_order']; $prodOrderNo = trim($prodOrderNo) ?? null; if (!$qrcode || !preg_match('/^\d+\|\d+$/', $qrcode)) { Notification::make() ->title('Invalid QR Code') ->body('QR code format should be like: 123456|12456456464') ->danger() ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $prodOrderNo, 'serial_number' => null, ]); return; } elseif (!preg_match('/^[A-Za-z0-9]+$/', $itemCode)) { Notification::make() ->title('Invalid Item Code') ->body('Item code should contain only alpha-numeric values.') ->danger() ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $prodOrderNo, 'serial_number' => null, ]); return; } elseif (!preg_match('/^[A-Za-z0-9]+$/', $serialNumber)) { Notification::make() ->title('Invalid Serial Number') ->body('Serial number should contain only alpha-numeric values.') ->danger() ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $prodOrderNo, 'serial_number' => null, ]); return; } $plant = Plant::find($plantId); $plantName = $plant ? $plant->name : null; $pOrderExist = ProductionOrder::where('plant_id', $plantId) ->where('production_order', $prodOrderNo) ->first(); if(!$pOrderExist){ Notification::make() ->title('Unknown Production Order') ->body("Production Order not found against plant '$plantName'.") ->danger() ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $prodOrderNo, 'serial_number' => null, ]); return; } $itemExist = Item::where('code', $itemCode)->first(); $itemAgaPlant = Item::where('code', $itemCode)->where('plant_id', $plantId)->first(); if(!$itemExist){ Notification::make() ->title('Unknown Item Code') ->body("Item code '$itemCode' not found.") ->danger() ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $prodOrderNo, 'serial_number' => null, ]); return; } elseif(!$itemAgaPlant){ Notification::make() ->title('Unknown Item Code') ->body("Item code '$itemCode' not found against the the plant '$plantName'.") ->danger() ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $prodOrderNo, 'serial_number' => null, ]); return; } elseif ($itemAgaPlant->id != $pOrderExist->item_id) { Notification::make() ->title('Item Code Mismatch') ->body("Item code '$itemCode' does not match the item associated with production order '$prodOrderNo'.") ->danger() ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $prodOrderNo, 'serial_number' => null, ]); return; } $productionOrders = ProductionOrder::where('plant_id', $plantId) ->where('production_order', $prodOrderNo) ->where('item_id', $itemAgaPlant->id) ->get(); $serialExist = null; foreach ($productionOrders as $productionOrder) { for ( $serial = (int) $productionOrder->from_serial_number; $serial <= (int) $productionOrder->to_serial_number; $serial++ ) { if ($serial == (int) $serialNumber) { $serialExist = $productionOrder; break 2; } } } if(!$serialExist){ Notification::make() ->title('Serial Number Not Found') ->body("Serial number '$serialNumber' not found for production order '$prodOrderNo', item '$itemCode' and plant '$plantName'.") ->danger() ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $prodOrderNo, 'serial_number' => null, ]); return; } //..Generate Sticker PDF and download it $this->ref_number = $this->form->getState()['production_order']; $this->serNo = $serialNumber; $user = Filament::auth()->user(); $operatorName = $user->name; $duplicate = StickerValidation::where('plant_id', $plantId) ->where('production_order', $this->ref_number) ->where('serial_number', $serialNumber) ->first(); if ($duplicate) { Notification::make() ->danger() ->title('Duplicate Serial Number') ->body("Serial number $serialNumber already exists for this plant and production order!") ->seconds(3) ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $this->ref_number, 'serial_number' => null, ]); return; } $itemC = Item::where('code', $itemCode) ->where('plant_id',$plantId) ->first(); $itemId = $itemC->id; $item = ClassCharacteristic::where('item_id', $itemId) ->where('plant_id',$plantId) ->first(); $itemI = $item->id; $mapping = StickerMappingMaster::where('plant_id', $plantId) ->where('sticker1_machine_id', $workCenter) ->where('item_characteristic_id', $itemI) ->first(); if (!$mapping) { Notification::make() ->danger() ->title('Sticker Mapping Not Found') ->body("No sticker mapping found for this item and plant.") ->send(); return; } $stickers = []; for ($i = 1; $i <= 8; $i++) { $machineColumn = "sticker{$i}_machine_id"; $ipColumn = "sticker{$i}_print_ip"; $stickerColumn = "sticker_structure{$i}_id"; $itemColumn = "item_characteristic_id"; if ( !empty($mapping->$machineColumn) && !empty($mapping->$stickerColumn) ) { $stickers[] = [ 'machine_id' => $mapping->$machineColumn, 'sticker_id' => $mapping->$stickerColumn, 'item_characteristic' => $mapping->$itemColumn, 'print_ip' => $mapping->$ipColumn, ]; } } if (empty($stickers)) { Notification::make() ->danger() ->title('No Sticker Configuration Found') ->body('No sticker and machine mappings configured for this item and plant.') ->send(); return; } StickerValidation::create([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $this->ref_number ?? null, 'serial_number' => $serialNumber, 'status' => 'Printed', // 'sticker_id' => $matchedSticker, 'created_by' => $operatorName, 'created_at' => now(), 'updated_at' => now(), ]); Notification::make() ->success() ->title('Sticker Recorded') ->body("Item: $itemCode, Serial: $serialNumber recorded successfully!") ->seconds(3) ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $this->ref_number, 'serial_number' => null, ]); $pdfUrls = []; foreach ($stickers as $sticker) { $structure = StickerStructureDetail::findOrFail($sticker['sticker_id']); $itemCharacteristic = ClassCharacteristic::where('plant_id', $plantId) ->where('id', $sticker['item_characteristic']) ->firstOrFail(); $dynamicElements = StickerDetail::where( 'sticker_structure_detail_id', $structure->id )->where('element_type', 'Dynamic')->get(); $pdfContent = (new StickerPdfService())->generatePdf1( $structure->sticker_id, $dynamicElements, $itemCharacteristic, $serialNumber, $itemCode, $plantId ); $tempPdfPath = storage_path('app/temp_sticker_' . uniqid() . '.pdf'); file_put_contents($tempPdfPath, $pdfContent); // $pdfUrl = route('sticker.preview', [ // 'path' => basename($tempPdfPath), // ]); $pdfUrls[] = route('sticker.preview', ['path' => basename($tempPdfPath)]); } $this->dispatch('open-sticker-pdf', urls: $pdfUrls); Notification::make() ->success() ->title('Sticker Printed') ->body("Sticker for Serial Number: $serialNumber printed successfully!") ->seconds(3) ->send(); } public function generateSticker() { $plantId = $this->form->getState()['plant_id']; $plantId = trim($plantId) ?? null; $workCenter = $this->form->getState()['machine_id']; $prodOrderNo= $this->form->getState()['production_order']; $prodOrderNo = trim($prodOrderNo) ?? null; $fromSno= $this->form->getState()['from_serial_number']; $fromSno = trim($fromSno) ?? null; $toSno= $this->form->getState()['to_serial_number']; $toSno = trim($toSno) ?? null; $serialExist = ProductionOrder::where('plant_id', $plantId) ->where('production_order', $prodOrderNo) ->where('from_serial_number', '=', $fromSno) ->where('to_serial_number', '=', $toSno) ->first(); if(!$serialExist){ Notification::make() ->title('Serial Number Range Not Found') ->body("Serial number range '$fromSno' to '$toSno' not found for production order '$prodOrderNo'.") ->danger() ->send(); $this->form->fill([ 'plant_id' => $plantId, 'machine_id' => $workCenter, 'production_order' => $prodOrderNo, 'from_serial_number' => null, 'to_serial_number' => null, ]); return; } else { if($serialExist){ $itemId = $serialExist->item_id; $itemCode = Item::where('id', $itemId) ->where('plant_id', $serialExist->plant_id) ->value('code'); } $this->ref_number = $this->form->getState()['production_order']; $fromSerNo = $this->form->getState()['from_serial_number']; $toSerNo = $this->form->getState()['to_serial_number']; $user = Filament::auth()->user(); $operatorName = $user->name; $itemC = Item::where('code', $itemCode) ->where('plant_id',$plantId) ->first(); $itemId = $itemC->id; $item = ItemCharacteristic::where('item_id', $itemId) ->where('plant_id',$plantId) ->first(); $itemI = $item->id; $mapping = StickerMappingMaster::where('plant_id', $plantId) ->where('sticker1_machine_id', $workCenter) ->where('item_characteristic_id', $itemI) ->first(); if (!$mapping) { Notification::make() ->danger() ->title('Sticker Mapping Not Found') ->body("No sticker mapping found for this item and plant.") ->send(); return; } $stickers = []; for ($i = 1; $i <= 8; $i++) { $machineColumn = "sticker{$i}_machine_id"; $ipColumn = "sticker{$i}_print_ip"; $stickerColumn = "sticker_structure{$i}_id"; $itemColumn = "item_characteristic_id"; if ( !empty($mapping->$machineColumn) && !empty($mapping->$stickerColumn) ) { $stickers[] = [ 'machine_id' => $mapping->$machineColumn, 'sticker_id' => $mapping->$stickerColumn, 'item_characteristic' => $mapping->$itemColumn, 'print_ip' => $mapping->$ipColumn, ]; } } if (empty($stickers)) { Notification::make() ->danger() ->title('No Sticker Configuration Found') ->body('No sticker and machine mappings configured for this item and plant.') ->send(); return; } $fromSerNo = (int) $this->form->getState()['from_serial_number']; $toSerNo = (int) $this->form->getState()['to_serial_number']; if ($fromSerNo > $toSerNo) { Notification::make() ->danger() ->title('Invalid Serial Number Range') ->body("From Serial Number must be less than or equal to To Serial Number.") ->send(); return; } $pdfUrls = []; $stickerService = new StickerPdfService(); foreach ($stickers as $sticker) { $structure = StickerStructureDetail::findOrFail($sticker['sticker_id']); $itemCharacteristic = ItemCharacteristic::where('plant_id',$plantId)->where('id',$sticker['item_characteristic'])->firstOrFail(); $elements = StickerDetail::where('sticker_structure_detail_id',$structure->id)->get(); $template = $stickerService->generateTemplate( $structure->sticker_id, $elements, $itemCharacteristic, $itemCode, $plantId ); $pdfContent = $stickerService->generateBulkFromTemplate( $template, $fromSerNo, $toSerNo, $itemCode ); $fileName ='bulk_sticker_' .$fromSerNo .'_' .$toSerNo .'_' .uniqid() .'.pdf'; $tempPdfPath = storage_path('app/' . $fileName); file_put_contents($tempPdfPath,$pdfContent); $pdfUrls[] = route('sticker.preview',['path' => $fileName,]); } $this->dispatch('open-sticker-pdf',urls: $pdfUrls); Notification::make() ->success() ->title('Sticker Printed') ->body("Sticker printed successfully!") ->seconds(3) ->send(); } } public function generateStickerId() { $state = $this->form->getState(); $plantId = trim($state['plant_id'] ?? ''); $machineId = trim($state['machine_id'] ?? ''); $stickerId = $state['sticker_id'] ?? null; $pOrder = $state['production_order'] ?? null; $fromSno = trim($state['from_serial_number'] ?? ''); $toSno = trim($state['to_serial_number'] ?? ''); $plantName = Plant::where('id', $plantId)->value('name'); if (!$stickerId) { Notification::make() ->danger() ->title('Sticker ID Not Selected') ->body('Please Choose a Sticker ID.') ->send(); return; } if ($fromSno == '' || $toSno == '') { Notification::make() ->danger() ->title('Serial Number Required') ->body('Please enter both From Serial Number and To Serial Number.') ->send(); return; } if (strlen($fromSno) < 9) { Notification::make() ->danger() ->title('Invalid From Serial Number') ->body("From Serial Number '$fromSno' should contain minimum 9 digits.") ->send(); return; } if (strlen($toSno) < 9) { Notification::make() ->danger() ->title('Invalid To Serial Number') ->body("To Serial Number '$toSno' should contain minimum 9 digits.") ->send(); return; } $fromSerNo = (int) $fromSno; $toSerNo = (int) $toSno; if ($fromSerNo > $toSerNo) { Notification::make() ->danger() ->title('Invalid Serial Number Range') ->body('From Serial Number must be less than or equal to To Serial Number.') ->send(); return; } $pOrderExist = ClassCharacteristic::where('plant_id',$plantId)->where('aufnr', $pOrder)->first(); if(!$pOrderExist){ Notification::make() ->danger() ->title('Unknown Production Order') ->body("Production Order '$pOrder' not found.") ->send(); return; } if($pOrderExist){ $pOrderExistData = ClassCharacteristic::where('plant_id', $plantId) ->where('aufnr', $pOrder) ->pluck('gernr') ->map(fn ($value) => (int) $value) ->toArray(); if (!in_array((int) $fromSerNo, $pOrderExistData, true) || !in_array((int) $toSerNo, $pOrderExistData, true)) { Notification::make() ->danger() ->title('Unknown Serial Number') ->body("The entered serial number range does not match Production Order '$pOrder' for plant '$plantName' in class characteristic.") ->send(); return; } } $updatePrintStatusCompleted = StickerOrder::where('plant_id', $plantId)->where('production_order', $pOrder)->where('sticker_id', $stickerId)->where('from_serial_number', $fromSerNo)->where('to_serial_number', $toSerNo)->where('sticker_id', $stickerId)->where('print_status', 'Printed')->first(); if ($updatePrintStatusCompleted) { Notification::make() ->danger() ->title('Duplicate Sticker') ->body("Already StickerId '$stickerId' generated successfully for Production Order '$pOrder' and plant '$plantName'.") ->send(); return; } $existingSticker = StickerOrder::where('plant_id', $plantId) ->where('production_order', $pOrder) ->where('sticker_id', $stickerId) ->where('print_status', 'Printed') ->where(function ($query) use ($fromSerNo, $toSerNo) { $query->whereIn('from_serial_number', [$fromSerNo, $toSerNo]) ->orWhereIn('to_serial_number', [$fromSerNo, $toSerNo]); }) ->first(); if ($existingSticker) { Notification::make() ->danger() ->title('Duplicate Sticker') ->body("Serial Number '$fromSerNo' or '$toSerNo' already exists in a generated sticker for Production Order '$pOrder' and plant '$plantName'.") ->send(); return; } $structure = StickerStructureDetail::where('sticker_id',$stickerId)->first(); if (!$structure) { Notification::make() ->danger() ->title('Sticker Structure Not Found') ->body("No sticker structure found for sticker ID '{$stickerId}'.") ->send(); return; } $stickerMappingMasterItems = StickerMappingMaster::where('plant_id', $plantId)->get(); // dd($plantId, $stickerMappingMasterItems); if (!$stickerMappingMasterItems) { Notification::make() ->danger() ->title('Sticker Mapping Not Found') ->body("No sticker mapping found for plant ID '{$plantId}'.") ->send(); return; } $structure = null; $stickerMappingMasterItem = null; foreach ($stickerMappingMasterItems as $mapping) { // Check sticker_structure1_id to sticker_structure8_id for ($i = 1; $i <= 8; $i++) { $column = "sticker_structure{$i}_id"; $structureId = $mapping->{$column}; if (empty($structureId)) { continue; } // Find structure detail $detail = StickerStructureDetail::find($structureId); if (!$detail) { continue; } // Check whether this structure belongs to selected sticker if ((string) $detail->sticker_id === (string) $stickerId) { $structure = $detail; // Keep the mapping record also $stickerMappingMasterItem = $mapping; break 2; } } } if (!$structure) { Notification::make() ->danger() ->title('Sticker Structure Not Found') ->body("No sticker structure found for selected sticker ID '{$stickerId}'.") ->send(); return; } $itemCharacteristicId = $stickerMappingMasterItem->item_id; $itemCode = Item::where('id', $itemCharacteristicId)->value('code'); if (!$itemCharacteristicId) { Notification::make() ->danger() ->title('Item Characteristic Not Found') ->body('No item characteristic is configured in sticker mapping.') ->send(); return; } $itemCharacteristic1 = ClassCharacteristic::where('plant_id', $plantId)->where('item_id',$itemCharacteristicId)->first(); if (!$itemCharacteristic1) { Notification::make() ->danger() ->title('Item Not Found') ->body("Item code '{$itemCode}' was not found in class characteristic.") ->send(); return; } $itemCharacteristicPodr = ClassCharacteristic::where('plant_id', $plantId)->where('aufnr', $pOrder)->where('item_id', $itemCharacteristicId)->first(); if (!$itemCharacteristicPodr) { Notification::make() ->danger() ->title('Item Not Found') ->body("Item code '{$itemCode}' with Job Number '{$pOrder}' was not found against plant '{$plantName}'.") ->send(); return; } $itemCodeMis = $pOrderExist->item_id; $itemCodeInPOrd = Item::where('id', $itemCodeMis)->where('plant_id', $plantId)->first(); $itemCodeInStickerMapping = Item::where('id', $itemCharacteristicId)->where('plant_id', $plantId)->first(); if($itemCodeMis != $itemCharacteristicId){ Notification::make() ->danger() ->title('Item Mismatch Found') ->body("sticker mapping Item code '{$itemCodeInPOrd->code}' and item code '{$itemCodeInStickerMapping->code}' for Job Number '{$pOrder}' was not mapped in sticker mapping against plant '{$plantName}'.") ->send(); return; } $itemCode = Item::where('id', $itemCharacteristicId)->where('plant_id',$plantId)->value('code'); if (!$itemCode) { Notification::make() ->danger() ->title('Item Not Found') ->body("Item code '{$itemCode}' found in item master.") ->send(); return; } //.. $matchedMachineId = null; for ($i = 1; $i <= 8; $i++) { $machineColumn = "sticker{$i}_machine_id"; if ((string) $stickerMappingMasterItem->{$machineColumn} == (string) $machineId) { $matchedMachineId = $stickerMappingMasterItem->{$machineColumn}; break; } } if (!$matchedMachineId) { Notification::make() ->danger() ->title('Machine Not Found') ->body("Machine '{$machineId}' is not mapped for Item Code '{$itemCode}' in the selected sticker mapping.") ->send(); return; } $itemCharacteristic = ClassCharacteristic::where('plant_id', $plantId) ->where('item_id', $itemCharacteristicId) ->where('machine_id', $matchedMachineId) ->where('aufnr', $pOrder) ->first(); $elements = StickerDetail::where('sticker_structure_detail_id',$structure->id)->get(); if ($elements->isEmpty()) { Notification::make() ->danger() ->title('Sticker Details Not Found') ->body('No sticker details configured for the selected sticker.') ->send(); return; } $stickerService = new StickerPdfService(); $template = $stickerService->generateTemplate( $structure->sticker_id, $elements, $itemCharacteristic, $itemCode, $plantId, $machineId ); $pdfContent = $stickerService->generateBulkFromTemplate( $template, $fromSerNo, $toSerNo, $itemCode, ); $fileName = 'bulk_sticker_'. $fromSerNo. '_'. $toSerNo. '_'. uniqid(). '.pdf'; $tempPdfPath = storage_path('app/' . $fileName); file_put_contents( $tempPdfPath, $pdfContent ); $pdfUrl = route( 'sticker.preview', [ 'path' => $fileName, ] ); $this->dispatch('open-sticker-pdf',urls: [$pdfUrl]); $totalStickers = ($toSerNo - $fromSerNo) + 1; $item = Item::where('id', $itemCharacteristicId)->where('plant_id', $plantId)->first(); $updatePrintStatus = StickerOrder::where('plant_id', $plantId)->where('production_order', $pOrder)->where('from_serial_number', $fromSerNo)->where('to_serial_number', $toSerNo)->first(); if (!$updatePrintStatus) { StickerOrder::create([ 'plant_id' => $plantId, 'item_id' => $item->id, 'production_order' => $pOrder, 'from_serial_number' => $fromSerNo, 'to_serial_number' => $toSerNo, 'sticker_id' => $stickerId, 'print_status' => 'Printed', ]); Notification::make() ->success() ->title('Sticker Generated') ->body("{$totalStickers} sticker(s) generated successfully.") ->seconds(3) ->send(); return; } } public static function canAccess(): bool { return Auth::check() && Auth::user()->can('view sticker bulk print page'); } }