'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, $isSerial) { $this->plantId = $plantId; $this->invoiceNumber = $invoiceNumber; $this->completedInvoice = true; $this->isSerial = $isSerial; $this->onCapFocus = false; $this->emptyInvoice = false; $this->hasSearched = false; $this->materialInvoice = false; $this->packageCount = 0; // $this->showCapacitorInput = false; $this->dispatch('focus-invoice-number'); } public function loadEmptyData($invoiceNumber, $plantId) { $this->plantId = $plantId; $this->invoiceNumber = $invoiceNumber; $this->completedInvoice = false; $this->onCapFocus = false; $this->emptyInvoice = true; $this->hasSearched = false; $this->materialInvoice = false; $this->packageCount = 0; // $this->showCapacitorInput = false; } public function loadData($invoiceNumber, $plantId, $onCapFocus) { $this->plantId = $plantId; $this->invoiceNumber = $invoiceNumber; $this->completedInvoice = false; $this->isSerial = true; $this->onCapFocus = $onCapFocus; $this->emptyInvoice = false; $this->hasSearched = true; $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(); $this->packageCount = 0; //Loop through and replace 'code' using related StickerMaster > Item > code foreach ($this->invoiceData as &$row) { $stickCount = 0; $scannedCount = 0; // $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'; $curStick = StickerMaster::where('id', $row['sticker_master_id'])->first(); if ($curStick) { if ($curStick->tube_sticker_motor == 1 || $curStick->tube_sticker_pump == 1 || $curStick->tube_sticker_pumpset == 1 || Str::length($curStick->panel_box_code) > 0) { if ($curStick->tube_sticker_motor == 1) { $stickCount++; } if ($curStick->tube_sticker_pump == 1) { $stickCount++; } if ($curStick->tube_sticker_pumpset == 1) { $stickCount++; } if (Str::length($curStick->panel_box_code) > 0) { $stickCount++; } } else if ($curStick->pack_slip_motor == 1 || $curStick->pack_slip_pump == 1 || $curStick->pack_slip_pumpset == 1) { if ($curStick->pack_slip_motor == 1) { $stickCount++; } if ($curStick->pack_slip_pump == 1) { $stickCount++; } if ($curStick->pack_slip_pumpset == 1) { $stickCount++; } } } if ($row['motor_scanned_status'] == 1) { $scannedCount++; } if ($row['pump_scanned_status'] == 1) { $scannedCount++; } if ($row['capacitor_scanned_status'] == 1) { $scannedCount++; } if ($row['scanned_status_set'] == 1) { $scannedCount++; } $this->packageCount += $stickCount - $scannedCount; } if ($onCapFocus) { $this->dispatch('focus-capacitor-input'); } else { $this->dispatch('focus-serial-number'); } } public function loadMaterialData($invoiceNumber, $plantId) { $this->plantId = $plantId; $this->invoiceNumber = $invoiceNumber; $this->completedInvoice = false; $this->isSerial = false; $this->onCapFocus = false; $this->emptyInvoice = false; $this->hasSearched = false; $this->materialInvoice = true; // $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 if ($matType === 3) { $row['material_type'] = 'Quantity'; } else { $row['material_type'] = 'N/A'; } } $this->dispatch('focus-serial-number'); } public function showCapacitorInputBox($itemCode, $serialNumber, $plantId) { $this->plantId = $plantId; $this->currentItemCode = $itemCode; $this->currentSerialNumber = $serialNumber; $this->showCapacitorInput = true; // $this->capacitorInput = ''; $this->completedInvoice = false; $this->isSerial = true; $this->onCapFocus = false; $this->emptyInvoice = false; $this->hasSearched = false; $this->materialInvoice = false; $this->dispatch('focus-capacitor-input'); } public function cancelCapacitorInput() { $this->showCapacitorInput = false; $this->dispatch('focus-serial-number'); } public function processCapacitorInput() { $user = Filament::auth()->user(); $operatorName = $user->name; 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) ->seconds(2) ->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) ->seconds(2) ->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', 'operator_id'=> $operatorName, ]); } else { $matchingValidation->update([ 'panel_box_supplier' => $supplier, 'panel_box_item_code' => $itemCode, 'panel_box_serial_number' => $serialNumber, 'capacitor_scanned_status' => 1, 'operator_id'=> $operatorName, ]); } } else { $matchingValidation->update([ 'panel_box_supplier' => $supplier, 'panel_box_item_code' => $itemCode, 'panel_box_serial_number' => $serialNumber, 'capacitor_scanned_status' => 1, 'scanned_status' => 'Scanned', 'operator_id'=> $operatorName, ]); } // Notification::make() // ->title('Success: Capacitor QR') // // ->title("Panel box code scanned: $itemCode") // ->body("'Capacitor' QR scanned status updated, Scan next QR.") // ->success() // commented // ->seconds(2) // ->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() ->seconds(2) ->send(); $this->loadCompletedData($matchingValidation->invoice_number, $matchingValidation->plant_id, true); } else { $this->loadData($matchingValidation->invoice_number, $matchingValidation->plant_id, false); } } break; } } $this->showCapacitorInput = false; $this->capacitorInput = ''; $this->dispatch('updateScannedQuantity'); //$this->loadData($this->invoiceNumber, $this->plantId); $this->dispatch('focus-serial-number'); } public function render() { return view('livewire.invoice-data-table'); } }