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)
+
+
+
+
+
+ | No |
+ Material Code |
+ Serial Number |
+ Motor Scanned Status |
+ Pump Scanned Status |
+ Scanned Status Set |
+ Scanned Status |
+ Time Stamp |
+ Operator ID |
+
+
+
+
+ @forelse ($records as $index => $record)
+
+ | {{ $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 ?? '' }} |
+
+ @empty
+
+ |
+ No scanned data found for location {{ $location }}
+ |
+
+ @endforelse
+
+
+ {{--
+ {{ $records->onEachSide(3)->links() }}
+
--}}
+
+ @endif
+
+ @if($isSfg)
+
+
+
+
+
+
+
+ | No |
+ Location |
+ Bin |
+ Item Code |
+ Serial Number |
+ Batch |
+ Document Number |
+ Total Quantity |
+ Scanned Quantity |
+ Operator ID |
+
+
+
+
+
+ @forelse($scannedSfgData as $index => $row)
+
+
+ | {{ $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'] }} |
+
+
+ @empty
+
+ |
+ No scanned SFG data
+ |
+
+ @endforelse
+
+
+
+ @endif
+
+ @if($isnonQuanSfg)
+
+
+
+
+
+
+
+ | No |
+ Location |
+ Bin |
+ Item Code |
+ Serial Number |
+ Batch |
+ Document Number |
+ Total Quantity |
+ Scanned Quantity |
+ Operator ID |
+
+
+
+
+
+ @forelse($scannedSerials as $index => $row)
+
+
+ | {{ $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'] }} |
+
+
+ @empty
+
+ |
+ No scanned SFG data
+ |
+
+ @endforelse
+
+
+
+ @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)
+ {{-- --}}
+
+ {{--
--}}
+
+
+
+ | No |
+ Material Code |
+ Material Type |
+ Material Quantity |
+ Serial Number |
+ Batch Number |
+ TimeStamp |
+ Operator ID |
+
+
+
+ @forelse ($invoiceData as $index => $row)
+
+ | {{ $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' }} |
+
+ @empty
+
+ |
+ No data found for invoice number {{ $invoiceNumber }}.
+ |
+
+ @endforelse
+
+
+
+ @endif
+
+{{-- --}}
+
+
+