From dae87a6fbac86cb51213892f7b8208d172893f8d Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Fri, 5 Jun 2026 11:21:17 +0530 Subject: [PATCH] Added page number options in serial livewire --- app/Livewire/SerialValidationData.php | 305 ++++++++++++------ .../livewire/serial-validation-data.blade.php | 91 +++--- 2 files changed, 252 insertions(+), 144 deletions(-) diff --git a/app/Livewire/SerialValidationData.php b/app/Livewire/SerialValidationData.php index 057d981..e27d919 100644 --- a/app/Livewire/SerialValidationData.php +++ b/app/Livewire/SerialValidationData.php @@ -2,20 +2,24 @@ namespace App\Livewire; +use App\Models\SerialValidation; use App\Models\StickerMaster; use Filament\Facades\Filament; use Filament\Notifications\Notification; use Livewire\Component; -use App\Models\SerialValidation; - +use Livewire\WithPagination; class SerialValidationData extends Component { + + use WithPagination; + public $invoiceData = []; public $plantId = 0; public string $invoiceNumber = ''; + public string $serialNumber = ''; public bool $completedInvoice = false; @@ -30,22 +34,22 @@ class SerialValidationData extends Component public bool $showCapacitorInput = false; - // protected $listeners = ['refreshInvoiceData' => 'loadData',]; + // protected $listeners = ['refreshInvoiceData' => 'loadData',]; protected $listeners = [ 'refreshCompletedInvoice' => 'loadCompletedData', 'refreshEmptyInvoice' => 'loadEmptyData', 'refreshInvoiceData' => 'loadData', 'refreshMaterialInvoiceData' => 'loadMaterialData', - 'focusCapacitor' => 'focusCapacitorInput' - //'openCapacitorModal' => 'showCapacitorInputBox', + 'focusCapacitor' => 'focusCapacitorInput', + // 'openCapacitorModal' => 'showCapacitorInputBox', ]; public $capacitorInput = ''; public $panel_box_supplier; - public $panel_box_item_code; + public $panel_box_code; public $panel_box_serial_number; @@ -96,43 +100,155 @@ class SerialValidationData extends Component // $this->showCapacitorInput = false; } - public function loadData($invoiceNumber, $plantId) + // 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_code' => $record->panel_box_code ?? '', + // '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 loadData($invoiceNumber, $plantId, $onCapFocus = false) { - $this->plantId = $plantId; $this->invoiceNumber = $invoiceNumber; + $this->plantId = $plantId; + $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 = 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(); + $this->resetPage(); + $this->packageCount = 0; - //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'; - } + $records = SerialValidation::with('stickerMasterRelation') + ->where('invoice_number', $this->invoiceNumber) + ->where('plant_id', $this->plantId) + ->get(); + + $this->packageCount = $records->sum(function ($record) { + + $sm = $record->stickerMasterRelation; + + if (! $sm) { + return 0; + } + + $stickCount = 0; + $scannedCount = 0; + + if (! empty($sm->panel_box_code)) { + $stickCount++; + + if ($record->capacitor_scanned_status == 1) { + $scannedCount++; + } + } + + // $sm->tube_sticker_motor == 1 || $sm->tube_sticker_pump == 1 || $sm->tube_sticker_pumpset == 1 + if (! empty($sm->tube_sticker_motor) || ! empty($sm->tube_sticker_pump) || ! empty($sm->tube_sticker_pumpset)) { + + if (! empty($sm->tube_sticker_motor)) { + $stickCount++; + if ($record->motor_scanned_status == 1) { + $scannedCount++; + } + } + + // ($sm->tube_sticker_pumpset != 1 && $sm->tube_sticker_pump != 1 && $sm->pack_slip_pump == 1) + if (! empty($sm->tube_sticker_pump) || (empty($sm->tube_sticker_pumpset) && empty($sm->tube_sticker_pump) && ! empty($sm->pack_slip_pump))) { + $stickCount++; + if ($record->pump_scanned_status == 1) { + $scannedCount++; + } + } + + if (! empty($sm->tube_sticker_pumpset)) { + $stickCount++; + if ($record->scanned_status_set == 1) { + $scannedCount++; + } + } + } elseif (! empty($sm->pack_slip_motor) || ! empty($sm->pack_slip_pump) || ! empty($sm->pack_slip_pumpset)) { + if (! empty($sm->pack_slip_motor)) { + $stickCount++; + if ($record->motor_scanned_status == 1) { + $scannedCount++; + } + } + + if (! empty($sm->pack_slip_pump)) { + $stickCount++; + if ($record->pump_scanned_status == 1) { + $scannedCount++; + } + } + + if (! empty($sm->pack_slip_pumpset)) { + $stickCount++; + if ($record->scanned_status_set == 1) { + $scannedCount++; + } + } + } + + return max($stickCount - $scannedCount, 0); + }); + + $this->dispatch( + $onCapFocus ? 'focus-capacitor-input' : 'focus-serial-number' + ); + } + + public function getInvoiceRecordsProperty() + { + return SerialValidation::with('stickerMasterRelation.item') + ->where('invoice_number', $this->invoiceNumber) + ->where('plant_id', $this->plantId) + ->where(function ($query) { + $query->whereNull('scanned_status') + ->orWhere('scanned_status', ''); + }) + // ->when($this->hasSearched, function ($query) { + // $query->where('invoice_number', $this->invoiceNumber) + // ->where('plant_id', $this->plantId) + // ->where('scanned_status', '=', ''); + // }) + ->paginate(6); } public function loadMaterialData($invoiceNumber, $plantId) @@ -146,43 +262,36 @@ class SerialValidationData extends Component $this->materialInvoice = true; // $this->showCapacitorInput = false; - //->where('serial_number', '!=', '') + // ->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(); + ->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 + // 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) - { + // $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) - { + } elseif ($matType === 2) { $row['material_type'] = 'Bundle'; - } - else if($matType === 3) - { + } elseif ($matType === 3) { $row['material_type'] = 'Quantity'; - } - else - { + } else { $row['material_type'] = 'N/A'; - } + } } } @@ -216,11 +325,11 @@ class SerialValidationData extends Component $user = Filament::auth()->user(); $operatorName = $user->name; - if (!$this->capacitorInput) { + if (! $this->capacitorInput) { return; } - if (!preg_match('/^[^\/]+\/[^\/]+\/.+$/', $this->capacitorInput)) { + if (! preg_match('/^[^\/]+\/[^\/]+\/.+$/', $this->capacitorInput)) { Notification::make() ->title('Invalid Panel Box QR Format:') ->body('Scan the valid panel box QR code to proceed!') @@ -228,6 +337,7 @@ class SerialValidationData extends Component // ->duration(3000) ->seconds(2) ->send(); + return; } @@ -239,9 +349,9 @@ class SerialValidationData extends Component $existsInStickerMaster = StickerMaster::where('panel_box_code', $itemCode)->where('plant_id', $this->plantId)->whereHas('item', function ($query) { $query->where('code', $this->currentItemCode); }) - ->exists(); + ->exists(); - if (!$existsInStickerMaster) { + if (! $existsInStickerMaster) { Notification::make() ->title('Unknown: Panel Box Code') ->body("Unknown panel box code: $itemCode found for item code: $this->currentItemCode") @@ -250,6 +360,7 @@ class SerialValidationData extends Component ->seconds(2) ->send(); $this->capacitorInput = ''; + return; } @@ -259,7 +370,7 @@ class SerialValidationData extends Component ($row['serial_number'] ?? '') === $this->currentSerialNumber ) { $row['panel_box_supplier'] = $supplier; - $row['panel_box_item_code'] = $itemCode; + $row['panel_box_code'] = $itemCode; $row['panel_box_serial_number'] = $serialNumber; $row['capacitor_scanned_status'] = 1; // $row['scanned_status_set'] = true; @@ -286,47 +397,41 @@ class SerialValidationData extends Component $packCnt = 1; $scanCnt = 1; // if($hadMotorQr === $hasMotorQr && $hadPumpQr === $hasPumpQr && $hadPumpSetQr === $hasPumpSetQr) - if($hasMotorQr || $hasPumpQr || $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; + $scanCnt = $hadMotorQr ? $scanCnt + 1 : $scanCnt; + $scanCnt = $hadPumpQr ? $scanCnt + 1 : $scanCnt; + $scanCnt = $hadPumpSetQr ? $scanCnt + 1 : $scanCnt; - if($packCnt === $scanCnt) - { + if ($packCnt === $scanCnt) { $matchingValidation->update([ 'panel_box_supplier' => $supplier, - 'panel_box_item_code' => $itemCode, + 'panel_box_code' => $itemCode, 'panel_box_serial_number' => $serialNumber, 'capacitor_scanned_status' => 1, 'scanned_status' => 'Scanned', - 'operator_id'=> $operatorName, + 'operator_id' => $operatorName, ]); - } - else - { + } else { $matchingValidation->update([ 'panel_box_supplier' => $supplier, - 'panel_box_item_code' => $itemCode, + 'panel_box_code' => $itemCode, 'panel_box_serial_number' => $serialNumber, 'capacitor_scanned_status' => 1, - 'operator_id'=> $operatorName, + 'operator_id' => $operatorName, ]); } - } - else - { + } else { $matchingValidation->update([ 'panel_box_supplier' => $supplier, - 'panel_box_item_code' => $itemCode, + 'panel_box_code' => $itemCode, 'panel_box_serial_number' => $serialNumber, 'capacitor_scanned_status' => 1, 'scanned_status' => 'Scanned', - 'operator_id'=> $operatorName, + 'operator_id' => $operatorName, ]); } @@ -341,15 +446,14 @@ class SerialValidationData extends Component $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, - // ]); + // 'plant_id' => $matchingValidation->plant_id, + // 'invoice_number' => $matchingValidation->invoice_number, + // 'serial_number' => null, + // 'total_quantity' => $totalQuantity, + // 'scanned_quantity'=> $scannedQuantity, + // ]); - if($totalQuantity === $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!") @@ -357,9 +461,7 @@ class SerialValidationData extends Component ->seconds(2) ->send(); $this->loadCompletedData($matchingValidation->invoice_number, $matchingValidation->plant_id, true); - } - else - { + } else { $this->loadData($matchingValidation->invoice_number, $matchingValidation->plant_id); } } @@ -373,7 +475,8 @@ class SerialValidationData extends Component public function render() { - return view('livewire.serial-validation-data'); + return view('livewire.serial-validation-data', [ + 'records' => $this->invoiceRecords, + ]); } - } diff --git a/resources/views/livewire/serial-validation-data.blade.php b/resources/views/livewire/serial-validation-data.blade.php index 9be0f81..ff2240f 100644 --- a/resources/views/livewire/serial-validation-data.blade.php +++ b/resources/views/livewire/serial-validation-data.blade.php @@ -45,52 +45,57 @@ {{-- Modal for serial invoice--}} @if ($hasSearched) -
- {{-- --}} - {{--
--}} -
+
+
+
- - - - - - - - - - - - - + + + + + + + + + + + + {{-- --}} + + + + + + + @forelse ($records as $index => $record) + + + + + + + + + + + + {{-- --}} + + - - - @forelse ($invoiceData as $index => $row) - - - - - - - - - - - - - - - @empty - - - - @endforelse - -
NoMaterial CodeSerial NumberMotor Scanned StatusPump Scanned StatusCapacitor Scanned StatusScanned Status SetScanned StatusTime StampOperator IDPanel Box SupplierPanel Box Serial Number
NoMaterial CodeSerial NumberMotor Scanned StatusPump Scanned StatusCapacitor Scanned StatusScanned Status SetScanned StatusTime StampOperator IDPanel Box CodePanel Box SupplierPanel Box Serial Number
{{ $records->firstItem() + $index }}{{ $record->stickerMasterRelation?->item?->code ?? 'N/A' }}{{ $record->serial_number ?? 'N/A' }}{{ $record->motor_scanned_status ? '1' : '' }}{{ $record->pump_scanned_status ? '1' : '' }}{{ $record->capacitor_scanned_status ? '1' : '' }}{{ $record->scanned_status_set ? '1' : '' }}{{ $record->scanned_status ?? '' }}{{ optional($record->created_at)->format('d-m-Y H:i:s') }}{{ $record->operator_id ?? '' }}{{ $record->panel_box_code ?? '' }}{{ $record->panel_box_supplier ?? '' }}{{ $record->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 the invoice number {{ $invoiceNumber }}. -
+ @empty + + + No data found for invoice {{ $invoiceNumber }} + + + @endforelse + + +
+ {{ $records->onEachSide(3)->links() }}
+
@endif {{-- Modal for Capacitor Input --}}