Files
pds/app/Livewire/StockDataTable.php
dhanabalan 6dff4fb77e
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Gemini PR Review / Gemini PR Review (pull_request) Has been cancelled
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Has been cancelled
Laravel Larastan / larastan (pull_request) Has been cancelled
Laravel Pint / pint (pull_request) Has been cancelled
Added serila number in method confirm serila update in stock data livewire page
2026-03-11 13:05:31 +05:30

559 lines
17 KiB
PHP

<?php
namespace App\Livewire;
use App\Models\DuplicateStock;
use App\Models\Item;
use App\Models\NotInStock;
use App\Models\StickerMaster;
use App\Models\StockDataMaster;
use Filament\Notifications\Notification;
use Livewire\Component;
use Livewire\WithPagination;
class StockDataTable extends Component
{
public $invoiceData = [];
use WithPagination;
protected $paginationTheme = 'tailwind';
// public $invoiceRecords;
public $plantId = 0;
public $package = [];
public $scannedIds = [];
public $scannedRecords = [];
public $scannedSerials = [];
public $packageCount = 0;
public string $location = '';
public bool $completedInvoice = false;
public bool $isSerial = false;
public $isnonQuanSfg = false;
public bool $onCapFocus = false;
public bool $emptyInvoice = false;
public bool $hasSearched = false;
public bool $materialInvoice = false;
public bool $showCapacitorInput = false;
public bool $isSfg = false;
public $itemCode, $serialNumber, $serial_number;
public $scannedSfgData = [];
// protected $listeners = ['refreshInvoiceData' => 'loadData',];
protected $listeners = [
'refreshEmptyInvoice' => 'loadEmptyData',
'refreshInvoiceData' => 'loadData',
'refreshSfgData' => 'loadSfgData',
'refreshSfgNonData' => 'loadSfgNonQuanData',
'confirmStockUpdate',
'confirmSerialUpdate',
'confirmSerialFGUpdate',
'confirmDuplicateUpdate'
];
public $capacitorInput = '';
public $panel_box_supplier;
public $panel_box_code;
public $panel_box_serial_number;
public string $currentItemCode = '';
public string $currentSerialNumber = '';
public $stickerMasterId;
public $sNo;
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)
->where('bin', $bin)
->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 confirmSerialUpdate($plantId, $location, $bin, $serial_number, $stickerMasterId, $batch, $docNo, $quantity)
{
$sNo = $serial_number;
$record = NotInStock::where('plant_id', $plantId)
->where('location', $location)
->where('sticker_master_id', $stickerMasterId)
->where('serial_number', $sNo)
->where('bin', $bin)
->first();
if (!$record) {
NotInStock::create([
'plant_id' => $plantId,
'location' => $location,
'bin' => $bin,
'sticker_master_id' => $stickerMasterId,
'type' => '1',
'serial_number' => $sNo ?? null,
'batch' => $batch ?? null,
'doc_no' => $docNo ?? null,
'scanned_quantity' => $quantity ?? '1',
]);
Notification::make()
->title('Record inserted successfully in not in stock table.')
->success()
->send();
} else {
$record->update([
'batch' => $batch ?? null,
]);
Notification::make()
->title('Record updated in not in stock table.')
->success()
->send();
}
}
public function confirmDuplicateUpdate($plantId, $location, $bin, $serial_number, $stickerMasterId, $batch, $docNo, $quantity)
{
$sNo = $serial_number;
$stockRecord = StockDataMaster::where('serial_number', $sNo)
->where('plant_id', $plantId)
->first();
if (!$stockRecord) {
return;
}
$record = DuplicateStock::where('stock_data_master_id', $stockRecord->id)->first();
if (!$record) {
DuplicateStock::create([
'stock_data_master_id' => $stockRecord->id,
]);
Notification::make()
->title('Record inserted successfully in duplicate stock table.')
->success()
->send();
} else {
DuplicateStock::create([
'stock_data_master_id' => $stockRecord->id,
]);
Notification::make()
->title('Record inserted successfully in duplicate stock table.')
->success()
->send();
}
}
public function confirmSerialFGUpdate($plantId, $location, $bin, $serial_number, $stickerMasterId)
{
$sNo = $serial_number;
$record = NotInStock::where('plant_id', $plantId)
->where('location', $location)
->where('sticker_master_id', $stickerMasterId)
->where('serial_number', $sNo)
->where('bin', $bin)
->first();
if (!$record) {
NotInStock::create([
'plant_id' => $plantId,
'location' => $location,
'bin' => $bin,
'sticker_master_id' => $stickerMasterId,
'type' => '0',
'serial_number' => $sNo ?? null,
'batch' => $batch ?? null,
'doc_no' => $docNo ?? null,
'scanned_quantity' => $quantity ?? '1',
]);
Notification::make()
->title('Record inserted successfully in not in stock table.')
->success()
->send();
} else {
$record->update([
'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
]);
}
}