'loadData',]; protected $listeners = [ 'refreshCompletedInvoice' => 'loadCompletedData', 'refreshEmptyInvoice' => 'loadEmptyData', 'refreshInvoiceData' => 'loadData', 'refreshMaterialInvoiceData' => 'loadMaterialData', 'openCapacitorModal' => 'showCapacitorInputBox', ]; public $capacitorInput = ''; public $panel_box_supplier; public $panel_box_item_code; public $panel_box_serial_number; public string $currentItemCode = ''; public string $currentSerialNumber = ''; public function loadCompletedData($invoiceNumber, $plantId) { $this->plantId = $plantId; $this->invoiceNumber = $invoiceNumber; $this->completedInvoice = true; $this->emptyInvoice = false; $this->hasSearched = false; $this->materialInvoice = false; // $this->showCapacitorInput = false; } public function loadEmptyData($invoiceNumber, $plantId) { $this->plantId = $plantId; $this->invoiceNumber = $invoiceNumber; $this->emptyInvoice = true; $this->completedInvoice = false; $this->hasSearched = false; $this->materialInvoice = false; // $this->showCapacitorInput = false; } public function loadData($invoiceNumber, $plantId) { $this->plantId = $plantId; $this->invoiceNumber = $invoiceNumber; $this->hasSearched = true; $this->emptyInvoice = false; $this->completedInvoice = false; $this->materialInvoice = false; // $this->showCapacitorInput = false; //->where('serial_number', '!=', '') $this->invoiceData = InvoiceValidation::where('invoice_number', $this->invoiceNumber) ->where('plant_id', $plantId)->where('scanned_status', null) ->get() ->map(function ($record) { return [ 'sticker_master_id' => $record->sticker_master_id, 'serial_number' => $record->serial_number, 'motor_scanned_status' => $record->motor_scanned_status ?? '', 'pump_scanned_status' => $record->pump_scanned_status ?? '', 'capacitor_scanned_status' => $record->capacitor_scanned_status ?? '', 'scanned_status_set' => $record->scanned_status_set ?? '', 'scanned_status' => $record->scanned_status ?? '', 'panel_box_supplier' => $record->panel_box_supplier ?? '', 'panel_box_serial_number' => $record->panel_box_serial_number ?? '', 'created_at' => $record->created_at, 'operator_id' => $record->operator_id, ]; }) ->toArray(); //Loop through and replace 'code' using related StickerMaster > Item > code foreach ($this->invoiceData as &$row) { // $stickerMaster = \App\Models\StickerMaster::with('item')->find($row['sticker_master_id'] ?? null); $row['code'] = StickerMaster::with('item')->find($row['sticker_master_id'] ?? null)?->item?->code ?? 'N/A'; } } public function loadMaterialData($invoiceNumber, $plantId) { $this->plantId = $plantId; $this->invoiceNumber = $invoiceNumber; $this->materialInvoice = true; $this->emptyInvoice = false; $this->completedInvoice = false; $this->hasSearched = false; // $this->showCapacitorInput = false; //->where('serial_number', '!=', '') $this->invoiceData = InvoiceValidation::where('invoice_number', $this->invoiceNumber)->where('plant_id', $plantId)->where('serial_number', null) ->get() ->map(function ($record) { return [ 'sticker_master_id' => $record->sticker_master_id, // 'material_type' => StickerMaster::where('id', $record->sticker_master_id)->first()->material_type ?? '', 'quantity' => $record->quantity ?? '', 'serial_number' => $record->serial_number ?? '', 'batch_number' => $record->batch_number ?? '', 'created_at' => $record->created_at, 'operator_id' => $record->operator_id, ]; }) ->toArray(); //Loop through and replace 'code' using related StickerMaster > Item > code foreach ($this->invoiceData as &$row) { // $stickerMaster = \App\Models\StickerMaster::with('item')->find($row['sticker_master_id'] ?? null); $row['code'] = StickerMaster::with('item')->find($row['sticker_master_id'] ?? null)?->item?->code ?? 'N/A'; $matType = StickerMaster::where('id', $row['sticker_master_id'] ?? null)->first()->material_type ?? ''; if($matType === 1) { $row['material_type'] = 'Individual'; } else if($matType === 2) { $row['material_type'] = 'Bundle'; } else { $row['material_type'] = 'N/A'; } } } // public function showCapacitorInputBox() // { // $this->showCapacitorInput = true; // } public function showCapacitorInputBox($itemCode, $serialNumber, $plantId) { $this->plantId = $plantId; $this->currentItemCode = $itemCode; $this->currentSerialNumber = $serialNumber; $this->showCapacitorInput = true; // $this->capacitorInput = ''; $this->emptyInvoice = false; $this->completedInvoice = false; $this->hasSearched = false; $this->materialInvoice = false; } public function cancelCapacitorInput() { $this->showCapacitorInput = false; } public function processCapacitorInput() { if (!$this->capacitorInput) { return; } if (!preg_match('/^[^\/]+\/[^\/]+\/.+$/', $this->capacitorInput)) { Notification::make() ->title('Invalid Panel Box QR Format:') ->body('Scan the valid panel box QR code to proceed!') ->danger() ->duration(3000) ->send(); return; } $parts = explode('/', $this->capacitorInput); $supplier = $parts[0]; $itemCode = $parts[1]; $serialNumber = implode('/', array_slice($parts, 2)); // Keep rest of the string $existsInStickerMaster = StickerMaster::where('panel_box_code', $itemCode)->where('plant_id', $this->plantId)->whereHas('item', function ($query) { $query->where('code', $this->currentItemCode); }) ->exists(); if (!$existsInStickerMaster) { Notification::make() ->title('Unknown: Panel Box Code') ->body("Unknown panel box code: $itemCode found for item code: $this->currentItemCode") ->danger() ->duration(4000) ->send(); $this->capacitorInput = ''; return; } foreach ($this->invoiceData as &$row) { if ( ($row['code'] ?? '') === $this->currentItemCode && ($row['serial_number'] ?? '') === $this->currentSerialNumber ) { $row['panel_box_supplier'] = $supplier; $row['panel_box_item_code'] = $itemCode; $row['panel_box_serial_number'] = $serialNumber; $row['capacitor_scanned_status'] = 1; // $row['scanned_status_set'] = true; $matchingValidation = InvoiceValidation::with('stickerMaster.item') ->where('serial_number', $this->currentSerialNumber) ->where('plant_id', $this->plantId) ->get() ->first(function ($validation) { return $validation->stickerMaster?->item?->code === $this->currentItemCode; }); if ($matchingValidation) { $hasMotorQr = $matchingValidation->stickerMasterRelation->tube_sticker_motor ?? null; $hasPumpQr = $matchingValidation->stickerMasterRelation->tube_sticker_pump ?? null; $hasPumpSetQr = $matchingValidation->stickerMasterRelation->tube_sticker_pumpset ?? null; // $hasCapacitorQr = $matchingValidation->stickerMasterRelation->panel_box_code ?? null; $hadMotorQr = $matchingValidation->motor_scanned_status ?? null; $hadPumpQr = $matchingValidation->pump_scanned_status ?? null; $hadPumpSetQr = $matchingValidation->scanned_status_set ?? null; // $hadCapacitorQr = $matchingValidation->capacitor_scanned_status ?? null; $packCnt = 1; $scanCnt = 1; // if($hadMotorQr === $hasMotorQr && $hadPumpQr === $hasPumpQr && $hadPumpSetQr === $hasPumpSetQr) if($hasMotorQr || $hasPumpQr || $hasPumpSetQr) { $packCnt = $hasMotorQr ? $packCnt + 1 : $packCnt; $packCnt = $hasPumpQr ? $packCnt + 1 : $packCnt; $packCnt = $hasPumpSetQr ? $packCnt + 1 : $packCnt; $scanCnt = $hadMotorQr ? $scanCnt + 1: $scanCnt; $scanCnt = $hadPumpQr ? $scanCnt + 1: $scanCnt; $scanCnt = $hadPumpSetQr ? $scanCnt + 1: $scanCnt; if($packCnt === $scanCnt) { $matchingValidation->update([ 'panel_box_supplier' => $supplier, 'panel_box_item_code' => $itemCode, 'panel_box_serial_number' => $serialNumber, 'capacitor_scanned_status' => 1, 'scanned_status' => 'Scanned', ]); } else { $matchingValidation->update([ 'panel_box_supplier' => $supplier, 'panel_box_item_code' => $itemCode, 'panel_box_serial_number' => $serialNumber, 'capacitor_scanned_status' => 1, ]); } } else { $matchingValidation->update([ 'panel_box_supplier' => $supplier, 'panel_box_item_code' => $itemCode, 'panel_box_serial_number' => $serialNumber, 'capacitor_scanned_status' => 1, 'scanned_status' => 'Scanned', ]); } Notification::make() ->title('Success: Capacitor QR') // ->title("Panel box code scanned: $itemCode") ->body("'Capacitor' QR scanned status updated, Scan next QR.") ->success() ->duration(3000) ->send(); $totalQuantity = InvoiceValidation::where('invoice_number', $matchingValidation->invoice_number)->where('plant_id', $this->plantId)->count(); $scannedQuantity = InvoiceValidation::where('invoice_number', $matchingValidation->invoice_number)->where('plant_id', $this->plantId)->where('scanned_status', 'Scanned')->count(); // $this->form->fill([ // 'plant_id' => $matchingValidation->plant_id, // 'invoice_number' => $matchingValidation->invoice_number, // 'serial_number' => null, // 'total_quantity' => $totalQuantity, // 'scanned_quantity'=> $scannedQuantity, // ]); if($totalQuantity === $scannedQuantity) { Notification::make() ->title('Completed: Serial Invoice') ->body("Serial invoice '$matchingValidation->invoice_number' completed the scanning process.
Scan the next 'Serial Invoice' to proceed!") ->success() ->send(); $this->loadCompletedData($matchingValidation->invoice_number, $matchingValidation->plant_id); } else { $this->loadData($matchingValidation->invoice_number, $matchingValidation->plant_id); } } break; } } $this->showCapacitorInput = false; $this->capacitorInput = ''; } public function render() { return view('livewire.invoice-data-table'); } }