From 1fe0012a9b19495d64d111c64f749e4807ea999b Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Tue, 10 Mar 2026 09:28:53 +0530 Subject: [PATCH] Added stock data table livewire pages --- app/Livewire/StockDataTable.php | 429 ++++++++++++++++++ .../views/livewire/stock-data-table.blade.php | 308 +++++++++++++ 2 files changed, 737 insertions(+) create mode 100644 app/Livewire/StockDataTable.php create mode 100644 resources/views/livewire/stock-data-table.blade.php diff --git a/app/Livewire/StockDataTable.php b/app/Livewire/StockDataTable.php new file mode 100644 index 0000000..5b25bd3 --- /dev/null +++ b/app/Livewire/StockDataTable.php @@ -0,0 +1,429 @@ + 'loadData',]; + + protected $listeners = [ + 'refreshEmptyInvoice' => 'loadEmptyData', + 'refreshInvoiceData' => 'loadData', + 'refreshSfgData' => 'loadSfgData', + 'refreshSfgNonData' => 'loadSfgNonQuanData', + 'confirmStockUpdate', + ]; + + public $capacitorInput = ''; + + public $panel_box_supplier; + + public $panel_box_code; + + public $panel_box_serial_number; + + public string $currentItemCode = ''; + + public string $currentSerialNumber = ''; + + public $stickerMasterId; + + public function confirmStockUpdate($plantId, $location, $bin, $stickerMasterId, $batch, $docNo, $quantity) + { + + $record = NotInStock::where('plant_id', $plantId) + ->where('location', $location) + ->where('sticker_master_id', $stickerMasterId) + ->where('doc_no', $docNo) + ->first(); + + if (!$record) { + + NotInStock::create([ + 'plant_id' => $plantId, + 'location' => $location, + 'bin' => $bin, + 'sticker_master_id' => $stickerMasterId, + 'type' => '1', + 'serial_number' => $this->serialNumber ?? null, + 'batch' => $batch ?? null, + 'doc_no' => $docNo ?? null, + 'scanned_quantity' => $quantity ?? '0', + ]); + + Notification::make() + ->title('Record inserted successfully in not in stock table.') + ->success() + ->send(); + + } else { + + $record->update([ + 'scanned_quantity' => $record->scanned_quantity + $quantity, + 'batch' => $batch ?? null, + 'doc_no' => $docNo ?? null, + ]); + + Notification::make() + ->title('Record updated in not in stock table.') + ->success() + ->send(); + } + } + + public function loadCompletedData($location, $plantId, $isSerial) + { + $this->plantId = $plantId; + $this->location = $location; + $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($location, $plantId) + { + $this->plantId = $plantId; + $this->location = $location; + $this->completedInvoice = false; + $this->onCapFocus = false; + $this->emptyInvoice = true; + $this->hasSearched = false; + $this->materialInvoice = false; + $this->packageCount = 0; + // $this->showCapacitorInput = false; + } + + public function loadSfgData($location, $plantId, $itemCode,$docNo) + { + $this->isSfg = true; + $this->hasSearched = false; + // $this->materialInvoice = false; + // $this->completedInvoice = false; + // $this->emptyInvoice = false; + + $item = Item::where('plant_id', $plantId) + ->where('code', $itemCode) + ->first(); + + $itemId = $item->id; + + $stickerMaster = StickerMaster::where('plant_id', $plantId) + ->where('item_id', $itemId) + ->first(); + + $stickerMasterId = $stickerMaster->id; + + $record = StockDataMaster::with('stickerMaster.item') + ->where('plant_id', $plantId) + ->where('location', $location) + ->where('sticker_master_id', $stickerMasterId) + ->where('doc_no', $docNo) + ->where('type', '1') + ->first(); + + if ($record) { + + $itemCode = optional($record->stickerMaster->item)->code; + + $foundIndex = null; + + foreach ($this->scannedSfgData as $index => $row) { + + if ( + $row['location'] == $record->location && + $row['doc_no'] == $record->doc_no && + $row['item_code'] == $itemCode + ) { + $foundIndex = $index; + break; + } + } + + if ($foundIndex !== null) { + + $this->scannedSfgData[$foundIndex]['scanned_quantity'] = $record->scanned_quantity; + + } else { + + if (count($this->scannedSfgData) >= 100) { + return; + } + + $this->scannedSfgData[] = [ + 'serial_number' => $record->serial_number, + 'bin' => $record->bin, + 'item_code' => $itemCode, + 'batch' => $record->batch, + 'doc_no' => $record->doc_no, + 'quantity' => $record->quantity, + 'scanned_quantity' => $record->scanned_quantity, + 'location' => $record->location, + 'updated_by' => $record->updated_by, + ]; + } + } + } + + public function loadSfgNonQuanData($location, $plantId, $serialNumber, $itemCode){ + + $this->isnonQuanSfg = true; + + $record = StockDataMaster::with('stickerMaster.item') + ->where('plant_id', $plantId) + ->where('location', $location) + ->where('serial_number', $serialNumber) + ->whereHas('stickerMaster.item', function ($q) use ($itemCode) { + $q->where('code', $itemCode); + }) + ->where('type', '1') + ->orderBy('updated_at', 'desc') + ->first(); + + if ($record) { + + // foreach ($this->scannedSerials as $row) { + // if ($row['serial_number'] == $serialNumber) { + // continue; + // } + // } + + // $this->scannedSerials[] = [ + array_unshift($this->scannedSerials, [ + 'location' => $record->location, + 'bin' => $record->bin ?? '', + 'item_code' => $record->stickerMaster->item->code ?? '', + 'serial_number' => $serialNumber, + 'batch' => $record->batch ?? '', + 'doc_no' => $record->doc_no ?? '', + 'quantity' => $record->quantity ?? '', + 'scanned_quantity' => $record->scanned_quantity ?? '', + 'updated_by' => $record->updated_by ?? '', + ]); + // ]; + } + + } + + public function loadData($location, $plantId, $itemCode, $serialNumber) + { + $this->location = $location; + $this->plantId = $plantId; + $this->itemCode = $itemCode; + $this->serialNumber = $serialNumber; + + + $this->completedInvoice = false; + $this->isSerial = true; + $this->emptyInvoice = false; + $this->hasSearched = true; + $this->materialInvoice = false; + + $this->resetPage(); + $this->packageCount = 0; + + $item = Item::where('plant_id', $plantId) + ->where('code', $this->itemCode) + ->first(); + + $itemId = $item->id; + + $stickerMaster = StickerMaster::where('plant_id', $plantId) + ->where('item_id', $itemId) + ->first(); + + $stickerMasterId = $stickerMaster->id; + + $records = StockDataMaster::with('stickerMasterRelation') + ->where('location', $this->location) + ->where('type', '=', '0') + ->where('plant_id', $this->plantId) + ->where('sticker_master_id', $stickerMasterId) + ->where('serial_number', $this->serialNumber) + ->orderBy('updated_at', 'desc') + ->limit(100) + ->get(); + + foreach ($records as $record) { + + if ($record->scanned_status == 'Scanned') { + + if (!in_array($record->id, $this->scannedIds)) { + $this->scannedIds[] = $record->id; + } + + } + } + + $this->scannedIds = array_slice(array_unique($this->scannedIds), 0, 100); + + + $this->packageCount = $records->sum(function ($record) { + + $sm = $record->stickerMasterRelation; + + if (! $sm) { + return 0; + } + + $stickCount = 0; + $scannedCount = 0; + + + if ($sm->tube_sticker_motor == 1 || $sm->tube_sticker_pump == 1 || $sm->tube_sticker_pumpset == 1) { + + if ($sm->tube_sticker_motor == 1) { + $stickCount++; + if ($record->motor_scanned_status == 1) { + $scannedCount++; + } + } + + if ( + $sm->tube_sticker_pump == 1 || + ($sm->tube_sticker_pumpset != 1 && + $sm->tube_sticker_pump != 1 && + $sm->pack_slip_pump == 1) + ) { + $stickCount++; + if ($record->pump_scanned_status == 1) { + $scannedCount++; + } + } + + if ($sm->tube_sticker_pumpset == 1) { + $stickCount++; + if ($record->scanned_status_set == 1) { + $scannedCount++; + } + } + } elseif ($sm->pack_slip_motor == 1 || $sm->pack_slip_pump == 1 || $sm->pack_slip_pumpset == 1) { + if ($sm->pack_slip_motor == 1) { + $stickCount++; + if ($record->motor_scanned_status == 1) { + $scannedCount++; + } + } + + if ($sm->pack_slip_pump == 1) { + $stickCount++; + if ($record->pump_scanned_status == 1) { + $scannedCount++; + } + } + + if ($sm->pack_slip_pumpset == 1) { + $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 StockDataMaster::with('stickerMasterRelation.item') + // ->where('plant_id', $this->plantId) + // ->where('location', $this->location) + // ->where('type', '=', '0') + // ->where('scanned_status', 'Scanned') + // // ->where(function ($query) { + // // $query->whereNull('scanned_status') + // // ->orWhere('scanned_status', 'Scanned'); + // // }) + // // ->when($this->hasSearched, function ($query) { + // // $query->where('invoice_number', $this->invoiceNumber) + // // ->where('plant_id', $this->plantId) + // // ->where('scanned_status', '=', ''); + // // }) + // ->orderBy('updated_at', 'desc') + // ->paginate(6); + // } + + + public function getInvoiceRecordsProperty() + { + if (empty($this->scannedIds)) { + return collect(); + } + + return StockDataMaster::with('stickerMasterRelation.item') + ->whereIn('id', $this->scannedIds) + ->orderBy('updated_at', 'desc') + ->paginate(6); + } + public function render() + { + // return view('livewire.stock-data-table'); + return view('livewire.stock-data-table', [ + 'records' => $this->invoiceRecords, + 'scannedSfgData' => $this->scannedSfgData, + 'scannedSerials' => $this->scannedSerials + ]); + } +} diff --git a/resources/views/livewire/stock-data-table.blade.php b/resources/views/livewire/stock-data-table.blade.php new file mode 100644 index 0000000..15c2cfa --- /dev/null +++ b/resources/views/livewire/stock-data-table.blade.php @@ -0,0 +1,308 @@ +
+
+

+ @if ($hasSearched) + FG STOCK DATA TABLE + @elseif ($isSfg) + SFG STOCK DATA TABLE + @elseif ($isnonQuanSfg) + SFG STOCK DATA TABLE + @else + STOCK DATA TABLE + @endif +

+ +
+ +
+
+
+ + + @if ($hasSearched) +
+ +
+ + + + + + + + + + + + + + + + @forelse ($records as $index => $record) + + + + + + + + + + + + @empty + + + + @endforelse + +
NoMaterial CodeSerial NumberMotor Scanned StatusPump Scanned StatusScanned Status SetScanned StatusTime StampOperator ID
{{ $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->scanned_status_set ? '1' : '' }}{{ $record->scanned_status ?? '' }}{{ optional($record->created_at)->format('d-m-Y H:i:s') }}{{ $record->updated_by ?? '' }}
+ No scanned data found for location {{ $location }} +
+ {{--
+ {{ $records->onEachSide(3)->links() }} +
--}} +
+ @endif + + @if($isSfg) + +
+ + + + + + + + + + + + + + + + + + + + + @forelse($scannedSfgData as $index => $row) + + + + + + + + + + + + + + + @empty + + + + @endforelse + +
NoLocationBinItem CodeSerial NumberBatchDocument NumberTotal QuantityScanned QuantityOperator ID
{{ $index+1 }}{{ $row['location'] }}{{ $row['bin'] }}{{ $row['item_code'] }}{{ $row['serial_number'] }}{{ $row['batch'] }}{{ $row['doc_no'] }}{{ $row['quantity'] }}{{ $row['scanned_quantity'] }}{{ $row['updated_by'] }}
+ No scanned SFG data +
+
+ @endif + + @if($isnonQuanSfg) + +
+ + + + + + + + + + + + + + + + + + + + + @forelse($scannedSerials as $index => $row) + + + + + + + + + + + + + + + @empty + + + + @endforelse + +
NoLocationBinItem CodeSerial NumberBatchDocument NumberTotal QuantityScanned QuantityOperator ID
{{ $index+1 }}{{ $row['location'] }}{{ $row['bin'] }}{{ $row['item_code'] }}{{ $row['serial_number'] }}{{ $row['batch'] }}{{ $row['doc_no'] }}{{ $row['quantity'] }}{{ $row['scanned_quantity'] }}{{ $row['updated_by'] }}
+ No scanned SFG data +
+
+ @endif + + {{-- Modal for Capacitor Input --}} +
+ + @if($showCapacitorInput) +
+
+

+ Scan the Panel Box Supplier/Item Code/Serial Number +

+ + + +
+ +
+
+
+ {{-- Add this script to focus on the input --}} + + {{-- --}} + @endif +
+ + {{-- Modal for material invoice--}} + @if($materialInvoice) + {{--
--}} +
+ {{-- --}} +
+ + + + + + + + + + + + + + @forelse ($invoiceData as $index => $row) + + + + + + + + + + + @empty + + + + @endforelse + +
NoMaterial CodeMaterial TypeMaterial QuantitySerial NumberBatch NumberTimeStampOperator ID
{{ $index + 1 }}{{ $row['code'] ?? 'N/A' }}{{ $row['material_type'] ?? 'N/A' }} + @if(($row['material_type'] ?? '') === 'Individual' || ($row['material_type'] ?? '') === 'Bundle') + {{ number_format((float)($row['quantity'] ?? 0), 0) }} + @else + {{ $row['quantity'] ?? 'N/A' }} + @endif + {{ $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 }}. +
+
+ @endif +
+{{-- --}} + + + -- 2.49.1