statePath('filters') ->schema([ Section::make('') // You can give your section a title or leave it blank ->schema([ Select::make('plant_id') ->label('Plant') //->options(Plant::pluck('name', 'id')) ->options(function (callable $get) { $userHas = Filament::auth()->user()->plant_id; return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); }) ->reactive() ->required(), TextInput::make('scan_invoice') ->label('Scan Invoice') ->required() ->reactive() ->extraAttributes([ 'wire:keydown.enter' => 'processInvoiceNo($event.target.value)', ]), TextInput::make('scan_quantity') ->label('Scanned Quantity ') ->readOnly() ->reactive(), TextInput::make('pending_quantity') ->label('Pending Quantity') ->readOnly() ->reactive(), TextInput::make('total_sno_quantity') ->label('Invoice Quantity') ->readOnly() ->reactive(), ]) ->columns(5) ]); } public function processInvoiceNo($invoiceNo) { $plantId = $this->form->getState()['plant_id']; if(!$invoiceNo) { Notification::make() ->title("Invoice number '$invoiceNo' can't be empty!") ->danger() ->duration(5000) ->send(); $this->dispatch('loadData', '', [], [], [], [], $plantId); $this->form->fill([ 'plant_id' => $plantId, 'scan_invoice' => $invoiceNo, 'total_sno_quantity' => 0, 'pending_quantity' => 0, 'scan_quantity' => 0 ]); return; } $invoiceExists = LocatorInvoiceValidation::where('plant_id', $plantId) ->where('invoice_number', $invoiceNo) ->first(); if(!$invoiceExists) { Notification::make() ->title("Invoice number '$invoiceNo' does not exist in locator invoice table!") ->danger() ->duration(5000) ->send(); $this->dispatch('loadData', '', [], [], [], [], $plantId); $this->form->fill([ 'plant_id' => $plantId, 'scan_invoice' => null,//$invoiceNo, 'total_sno_quantity' => 0, 'pending_quantity' => 0, 'scan_quantity' => 0 ]); return; } $invoiceCompleted = LocatorInvoiceValidation::where('plant_id', $plantId) ->where('invoice_number', $invoiceNo) ->whereNull('scanned_status') ->orWhere('scanned_status', '=','') ->first(); if(!$invoiceCompleted) { // $count = LocatorInvoiceValidation::where('invoice_number', $invoiceNo) // ->where('plant_id', $plantId) // ->count(); Notification::make() ->title("Invoice number '$invoiceNo' already completed the scanning process..!") ->success() ->duration(5000) ->send(); $this->dispatch('loadData', '', [], [], [], [], $plantId); $this->form->fill([ 'plant_id' => $plantId, 'scan_invoice' => null,//$invoiceNo, 'total_sno_quantity' => 0,//$count, 'pending_quantity' => 0,//0, 'scan_quantity' => 0//$count ]); return; } $serialNumbers = LocatorInvoiceValidation::where('plant_id', $plantId) ->where('invoice_number', $invoiceNo) ->pluck('serial_number'); $notFoundSerials = []; $incompleteSerials = []; $scannedSerials = []; $foundSerials = []; foreach ($serialNumbers as $serial) { $locatorRecord = LocatorInvoiceValidation::where('serial_number', $serial) ->where('plant_id', $plantId) ->first(); //$scannedStatus = $locatorRecord->scanned_status ?? null; if ($locatorRecord->scanned_status == 'Scanned') { $scannedSerials[] = $serial; continue; } $palletRecord = palletValidation::where('serial_number', $serial) ->where('plant_id', $plantId) ->first(); if (!$palletRecord) { $notFoundSerials[] = $serial; continue; } $palletStatus = $palletRecord->pallet_status ?? null; if (strlen($palletRecord->pallet_number) > 1 && ($palletStatus == '' || $palletStatus == null)) { $incompleteSerials[] = $serial; continue; } $foundSerials[] = $serial; } $count = LocatorInvoiceValidation::where('invoice_number', $invoiceNo) ->where('plant_id', $plantId) ->count(); $pendingCount = LocatorInvoiceValidation::where('invoice_number', $invoiceNo) ->where('plant_id', $plantId) ->whereNull('scanned_status') ->orWhere('scanned_status', '=', '') ->count(); $scannedCount = LocatorInvoiceValidation::where('invoice_number', $invoiceNo) ->where('plant_id', $plantId) ->where('scanned_status', '=', 'Scanned') ->count(); $this->form->fill([ 'plant_id' => $plantId, 'scan_invoice' => $invoiceNo, 'total_sno_quantity' => $count, 'pending_quantity' => $pendingCount, 'scan_quantity' => $scannedCount, ]); $this->dispatch('loadData', $invoiceNo, $notFoundSerials, $incompleteSerials, $scannedSerials, $foundSerials, $plantId); } public static function canAccess(): bool { return Auth::check() && Auth::user()->can('view invoice finder page'); } }