diff --git a/app/Livewire/SerialValidationData.php b/app/Livewire/SerialValidationData.php
new file mode 100644
index 0000000..6c5f2b9
--- /dev/null
+++ b/app/Livewire/SerialValidationData.php
@@ -0,0 +1,371 @@
+ '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->emptyInvoice = false;
+ // $this->hasSearched = false;
+ // $this->materialInvoice = false;
+ // // $this->showCapacitorInput = false;
+ // }
+
+ public function loadCompletedData($invoiceNumber, $plantId, $isSerial)
+ {
+
+ $this->plantId = $plantId;
+ $this->invoiceNumber = $invoiceNumber;
+ $this->completedInvoice = true;
+ $this->isSerial = $isSerial;
+ $this->emptyInvoice = false;
+ $this->hasSearched = false;
+ $this->materialInvoice = false;
+ // $this->showCapacitorInput = false;
+ }
+
+ public function loadEmptyData($invoiceNumber, $plantId)
+ {
+ $this->plantId = $plantId;
+ $this->invoiceNumber = $invoiceNumber;
+ $this->completedInvoice = false;
+ $this->emptyInvoice = true;
+ $this->hasSearched = false;
+ $this->materialInvoice = false;
+ // $this->showCapacitorInput = false;
+ }
+
+ public function loadData($invoiceNumber, $plantId)
+ {
+ $this->plantId = $plantId;
+ $this->invoiceNumber = $invoiceNumber;
+ $this->completedInvoice = false;
+ $this->isSerial = true;
+ $this->emptyInvoice = false;
+ $this->hasSearched = true;
+ $this->materialInvoice = false;
+ // $this->showCapacitorInput = false;
+
+ //->where('serial_number', '!=', '')
+ $this->invoiceData = SerialValidation::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->completedInvoice = false;
+ $this->isSerial = false;
+ $this->emptyInvoice = false;
+ $this->hasSearched = false;
+ $this->materialInvoice = true;
+ // $this->showCapacitorInput = false;
+
+ //->where('serial_number', '!=', '')
+ $this->invoiceData = SerialValidation::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';
+ }
+ }
+ }
+
+ // 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->completedInvoice = false;
+ $this->isSerial = true;
+ $this->emptyInvoice = false;
+ $this->hasSearched = false;
+ $this->materialInvoice = false;
+ $this->dispatch('focus-capacitor-input');
+ }
+
+ public function cancelCapacitorInput()
+ {
+ $this->showCapacitorInput = false;
+ }
+
+ 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 = SerialValidation::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 = SerialValidation::where('invoice_number', $matchingValidation->invoice_number)->where('plant_id', $this->plantId)->count();
+ $scannedQuantity = SerialValidation::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);
+ }
+ }
+ break;
+ }
+ }
+ $this->showCapacitorInput = false;
+ $this->capacitorInput = '';
+ $this->dispatch('focus-serial-number');
+ }
+
+ public function render()
+ {
+ return view('livewire.serial-validation-data');
+ }
+
+}
diff --git a/resources/views/livewire/serial-validation-data.blade.php b/resources/views/livewire/serial-validation-data.blade.php
new file mode 100644
index 0000000..dd26243
--- /dev/null
+++ b/resources/views/livewire/serial-validation-data.blade.php
@@ -0,0 +1,209 @@
+
+
+ @if ($isSerial) + Completed the scanning process for serial invoice number {{ $invoiceNumber }}. + @else + Completed the scanning process for material invoice number {{ $invoiceNumber }}. + @endif +
+No data found for invoice number {{ $invoiceNumber }}.
+| No | +Material Code | +Serial Number | +Motor Scanned Status | +Pump Scanned Status | +Capacitor Scanned Status | +Scanned Status Set | +Scanned Status | +Time Stamp | +Operator ID | +Panel Box Supplier | +Panel Box Serial Number | +
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ $index + 1 }} | +{{ $row['code'] ?? 'N/A' }} | +{{ $row['serial_number'] ?? 'N/A' }} | +{{ $row['motor_scanned_status'] ?? '' }} | +{{ $row['pump_scanned_status'] ?? '' }} | +{{ $row['capacitor_scanned_status'] ?? '' }} | +{{ $row['scanned_status_set'] ?? '' }} | +{{ $row['scanned_status'] ?? '' }} | +{{ $row['created_at'] ?? '' }} | +{{ $row['operator_id'] ?? '' }} | +{{ $row['panel_box_supplier'] ?? '' }} | +{{ $row['panel_box_serial_number'] ?? '' }} | +
| + No data found for invoice number {{ $invoiceNumber }}. + | +|||||||||||
| No | +Material Code | +Material Type | +Material Quantity | +Serial Number | +Batch Number | +TimeStamp | +Operator ID | +||
|---|---|---|---|---|---|---|---|---|---|
| {{ $index + 1 }} | +{{ $row['code'] ?? 'N/A' }} | +{{ $row['material_type'] ?? 'N/A' }} | +{{ $row['quantity'] ?? 'N/A' }} | +{{ $row['serial_number'] ?? 'N/A' }} | +{{ $row['batch_number'] ?? 'N/A' }} | +{{ $row['created_at'] ?? 'N/A' }} | +{{ $row['operator_id'] ?? 'N/A' }} | +||
| + No data found for invoice number {{ $invoiceNumber }}. + | +|||||||||