diff --git a/app/Filament/Resources/ReworkLocatorInvoiceValidationResource.php b/app/Filament/Resources/ReworkLocatorInvoiceValidationResource.php index 332f8f1..4f05334 100644 --- a/app/Filament/Resources/ReworkLocatorInvoiceValidationResource.php +++ b/app/Filament/Resources/ReworkLocatorInvoiceValidationResource.php @@ -5,30 +5,28 @@ namespace App\Filament\Resources; use App\Filament\Exports\ReworkLocatorInvoiceValidationExporter; use App\Filament\Imports\ReworkLocatorInvoiceValidationImporter; use App\Filament\Resources\ReworkLocatorInvoiceValidationResource\Pages; -use App\Filament\Resources\ReworkLocatorInvoiceValidationResource\RelationManagers; -use App\Models\InvoiceValidation; use App\Models\LocatorInvoiceValidation; use App\Models\PalletValidation; use App\Models\Plant; use App\Models\ReworkLocatorInvoiceValidation; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\Section; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Form; +use Filament\Forms\Get; +use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; +use Filament\Tables\Filters\Filter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Forms\Components\ToggleButtons; -use Filament\Forms\Get; -use Filament\Notifications\Notification; -use Filament\Tables\Actions\ExportAction; -use Filament\Tables\Actions\ImportAction; -use Filament\Forms\Components\DateTimePicker; -use Filament\Tables\Filters\Filter; -use Filament\Forms\Components\TextInput; -use Filament\Forms\Components\Select; class ReworkLocatorInvoiceValidationResource extends Resource { @@ -45,238 +43,163 @@ class ReworkLocatorInvoiceValidationResource extends Resource return $form ->schema([ Section::make('') - ->schema([ - Forms\Components\Select::make('plant_id') - ->label('Plant') - ->reactive() - ->relationship('plant', 'name') - ->disabled(fn (Get $get) => $get('rework_type')) - ->required() - ->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(); - }) - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $plantId = $get('plant_id'); - if ($plantId) - { - $set('plant', $plantId); - $set('invoice_number', null); - $set('scan_pallet_no', null); - $set('scan_serial_no', null); - $set('rework_type', null); - } - else - { - $set('plant', null); - $set('invoice_number', null); - $set('scan_pallet_no', null); - $set('scan_serial_no', null); - $set('rework_type', null); - } - }), - Forms\Components\Hidden::make('plant') - ->reactive(), - Forms\Components\TextInput::make('invoice_number') - ->label('Scan Invoice No') - ->required( fn ($get) => $get('rework_type') == 'invoice') - ->readOnly(fn (callable $get) => (!$get('plant') || $get('rework_type') != 'invoice' || $get('scan_pallet_no') || $get('scan_serial_no'))) - // ->readOnly(fn ($get) => $get('rework_type') == 'pallet') - ->reactive() - ->extraAttributes([ - 'wire:keydown.enter' => 'processInvoiceRework($event.target.value)', - ]), - Forms\Components\TextInput::make('scan_pallet_no') - ->label('Scan Pallet No') - ->required( fn ($get) => $get('rework_type') == 'pallet') - ->readOnly(fn ($get) => $get('rework_type') == 'invoice') - ->minLength(10) - ->reactive() - ->readOnly(fn (callable $get) => (!$get('plant') || !$get('rework_type') || ($get('rework_type') == 'invoice' && !$get('invoice_number')) || $get('scan_serial_no'))) - ->extraAttributes([ - 'wire:keydown.enter' => 'processPalletno($event.target.value)', - ]), - Forms\Components\TextInput::make('scan_serial_no') - ->label('Scan Serial No') - ->readOnly(fn (callable $get) => (!$get('plant') || !$get('rework_type') || ($get('rework_type') == 'invoice' && !$get('invoice_number')) || ($get('rework_type') == 'invoice' && $get('scan_pallet_no')) || ($get('rework_type') == 'pallet' && !$get('scan_pallet_no')))) - ->minLength(9) - ->reactive() - ->extraAttributes([ - 'wire:keydown.enter' => 'processSno($event.target.value)', - ]), - Forms\Components\Radio::make('rework_type') - ->label('Rework Type') - ->options([ - 'invoice' => 'Invoice', - 'pallet' => 'Pallet', - ]) - ->reactive() - ->required() - ->disabled(fn (Get $get) => ($get('invoice_number') || $get('scan_pallet_no') || $get('scan_serial_no'))) - ->hidden(fn (callable $get) => !$get('plant')) - ->inline() - ->inlineLabel(false) - // ->default('invoice') - ->afterStateUpdated(function ($state, callable $set) { - if ($state == 'pallet') { - $set('reworkType', $state); - $set('invoice_number', null); - $set('scan_pallet_no', null); - $set('scan_serial_no', null); - } elseif ($state == 'invoice') { - $set('reworkType', $state); - $set('invoice_number', null); - $set('scan_pallet_no', null); - $set('scan_serial_no', null); - } - else { - $set('reworkType', null); - $set('invoice_number', null); - $set('scan_pallet_no', null); - $set('scan_serial_no', null); - } - }), - Forms\Components\Hidden::make('reworkType') - ->reactive(), + ->schema([ + Forms\Components\Select::make('plant_id') + ->label('Plant') + ->reactive() + ->relationship('plant', 'name') + ->disabled(fn (Get $get) => $get('rework_type')) + ->required() + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; - ToggleButtons::make('update_invoice') - ->label('Rework entire invoice?') - ->boolean() - ->grouped() - ->reactive() - ->hidden(fn (callable $get) => (!$get('plant') || $get('rework_type') != 'invoice' || !$get('invoice_number') || $get('update_invoice') == '0' || $get('scan_pallet_no') || $get('scan_serial_no'))) - ->afterStateUpdated(function ($state, callable $set, callable $get, $livewire) { - $plantId = $get('plant'); - - $invoiceNumber = $get('invoice_number'); - - $rows = LocatorInvoiceValidation::where('invoice_number', $invoiceNumber) - ->where('plant_id', $plantId) - ->get(); - - $notCompletedCount = LocatorInvoiceValidation::where('invoice_number', $invoiceNumber) - ->where('plant_id', $plantId) - ->where(function($query) { - $query->whereNull('scanned_status') - ->orWhere('scanned_status', ''); - }) - ->count(); - - $isScanningComplete = true; - foreach ($rows as $row) - { - if ($row->scanned_status != 'Scanned') { - $isScanningComplete = false; - break; + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); + }) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $plantId = $get('plant_id'); + if ($plantId) { + $set('plant', $plantId); + $set('invoice_number', null); + $set('scan_pallet_no', null); + $set('scan_serial_no', null); + $set('rework_type', null); + } else { + $set('plant', null); + $set('invoice_number', null); + $set('scan_pallet_no', null); + $set('scan_serial_no', null); + $set('rework_type', null); } - } - - if (!$isScanningComplete) - { - Notification::make() - ->title("Scanned invoice number: '$invoiceNumber' does not completed the scanning process!
Has '$notCompletedCount' pending serial number to scan!
Please, scan the valid completed invoice number to proceed...") - ->danger() - ->duration(5000) - ->send(); - - $set('invoice_number', null); - $set('update_invoice', null); - return; - } - }), - - ToggleButtons::make('update_pallet') - ->label('Rework entire pallet?') - ->boolean() - ->grouped() - ->reactive() - ->hidden(fn (callable $get) => (!$get('plant') || $get('rework_type') != 'pallet' || $get('update_pallet') == '0' || !$get('scan_pallet_no') || $get('scan_serial_no'))) - ->afterStateUpdated(function ($state, callable $set, callable $get, $livewire) { - $plantId = $get('plant'); - - $palletNumber = trim($get('scan_pallet_no')); - $serialNo = trim($get('scan_serial_no')); - $updatePalletStatus = $get('update_pallet') ?? null; - - if ($updatePalletStatus == 0) - { - return; - } - - if (strlen($palletNumber) < 10) - { - Notification::make() - ->title("Invalid: Pallet Number") - ->body("Pallet number '$palletNumber' must be at least 10 digits.") - ->danger() - ->duration(5000) - ->send(); - - $livewire->dispatch('loadData', '', '', $plantId, 'pallet'); - $set('scan_serial_no', null); - $set('scan_pallet_no', null); - $set('update_pallet', null); - return; - } - - $PalletSerialNumbers = PalletValidation::where('plant_id', $plantId)->where('pallet_number', $palletNumber)->first(); - - if (!$PalletSerialNumbers) - { - Notification::make() - ->title('Pallet Not Found') - ->body("Pallet number '$palletNumber' doesn't exist in pallet table!

Scan the valid exist 'Pallet Number' to proceed..!") - ->danger() - ->duration(5000) - ->send(); - - $livewire->dispatch('loadData', '', '', $plantId, 'pallet'); - $set('scan_serial_no', null); - $set('scan_pallet_no', null); - $set('update_pallet', null); - return; - } - - $rows = PalletValidation::where('pallet_number', $palletNumber) - ->where('plant_id', $plantId) - ->get(); - - $isScanningComplete = true; - foreach ($rows as $row) - { - if ($row->pallet_status != 'Completed') { - $isScanningComplete = false; - break; + }), + Forms\Components\Hidden::make('plant') + ->reactive(), + Forms\Components\TextInput::make('invoice_number') + ->label('Scan Invoice No') + ->required(fn ($get) => $get('rework_type') == 'invoice') + ->readOnly(fn (callable $get) => (! $get('plant') || $get('rework_type') != 'invoice' || $get('scan_pallet_no') || $get('scan_serial_no'))) + // ->readOnly(fn ($get) => $get('rework_type') == 'pallet') + ->reactive() + ->extraAttributes([ + 'wire:keydown.enter' => 'processInvoiceRework($event.target.value)', + ]), + Forms\Components\TextInput::make('scan_pallet_no') + ->label('Scan Pallet No') + ->required(fn ($get) => $get('rework_type') == 'pallet') + ->readOnly(fn ($get) => $get('rework_type') == 'invoice') + ->minLength(10) + ->reactive() + ->readOnly(fn (callable $get) => (! $get('plant') || ! $get('rework_type') || ($get('rework_type') == 'invoice' && ! $get('invoice_number')) || $get('scan_serial_no'))) + ->extraAttributes([ + 'wire:keydown.enter' => 'processPalletno($event.target.value)', + ]), + Forms\Components\TextInput::make('scan_serial_no') + ->label('Scan Serial No') + ->readOnly(fn (callable $get) => (! $get('plant') || ! $get('rework_type') || ($get('rework_type') == 'invoice' && ! $get('invoice_number')) || ($get('rework_type') == 'invoice' && $get('scan_pallet_no')) || ($get('rework_type') == 'pallet' && ! $get('scan_pallet_no')))) + ->minLength(9) + ->reactive() + ->extraAttributes([ + 'wire:keydown.enter' => 'processSno($event.target.value)', + ]), + Forms\Components\Radio::make('rework_type') + ->label('Rework Type') + ->options([ + 'invoice' => 'Invoice', + 'pallet' => 'Pallet', + ]) + ->reactive() + ->required() + ->disabled(fn (Get $get) => ($get('invoice_number') || $get('scan_pallet_no') || $get('scan_serial_no'))) + ->hidden(fn (callable $get) => ! $get('plant')) + ->inline() + ->inlineLabel(false) + // ->default('invoice') + ->afterStateUpdated(function ($state, callable $set) { + if ($state == 'pallet') { + $set('reworkType', $state); + $set('invoice_number', null); + $set('scan_pallet_no', null); + $set('scan_serial_no', null); + } elseif ($state == 'invoice') { + $set('reworkType', $state); + $set('invoice_number', null); + $set('scan_pallet_no', null); + $set('scan_serial_no', null); + } else { + $set('reworkType', null); + $set('invoice_number', null); + $set('scan_pallet_no', null); + $set('scan_serial_no', null); } - } + }), + Forms\Components\Hidden::make('reworkType') + ->reactive(), - if(count($rows) <= 0) { - $isScanningComplete = false; - } + ToggleButtons::make('update_invoice') + ->label('Rework entire invoice?') + ->boolean() + ->grouped() + ->reactive() + ->hidden(fn (callable $get) => (! $get('plant') || $get('rework_type') != 'invoice' || ! $get('invoice_number') || $get('update_invoice') == '0' || $get('scan_pallet_no') || $get('scan_serial_no'))) + ->afterStateUpdated(function ($state, callable $set, callable $get, $livewire) { + $plantId = $get('plant'); - if (!$isScanningComplete) - { - Notification::make() - ->title('Pallet Not Completed') - ->body("Scanned pallet number '$palletNumber' doesn't completed the master packing!

Please, scan the valid completed pallet number to proceed..!") - ->danger() - ->duration(5000) - ->send(); + $invoiceNumber = $get('invoice_number'); - $livewire->dispatch('loadData', '', '', $plantId, 'pallet'); - $set('scan_serial_no', null); - $set('scan_pallet_no', null); - $set('update_pallet', null); - return; - } - else - { - $locatExist = ($PalletSerialNumbers->locator_number != null && $PalletSerialNumbers->locator_number != '') ? $PalletSerialNumbers->locator_number : ''; - if ($locatExist) - { + $rows = LocatorInvoiceValidation::where('invoice_number', $invoiceNumber) + ->where('plant_id', $plantId) + ->get(); + + $notCompletedCount = LocatorInvoiceValidation::where('invoice_number', $invoiceNumber) + ->where('plant_id', $plantId) + ->where(function ($query) { + $query->whereNull('scanned_status') + ->orWhere('scanned_status', ''); + }) + ->count(); + + $isScanningComplete = true; + foreach ($rows as $row) { + if ($row->scanned_status != 'Scanned') { + $isScanningComplete = false; + break; + } + } + + if (! $isScanningComplete) { Notification::make() - ->title('Locator Pallet Found') - ->body("Scanned pallet number '$palletNumber' exist in locator number '$locatExist'.

Remove scanned 'Pallet' from 'Locator' to proceed re-master packing..!") + ->title("Scanned invoice number: '$invoiceNumber' does not completed the scanning process!
Has '$notCompletedCount' pending serial number to scan!
Please, scan the valid completed invoice number to proceed...") + ->danger() + ->duration(5000) + ->send(); + + $set('invoice_number', null); + $set('update_invoice', null); + + return; + } + }), + + ToggleButtons::make('update_pallet') + ->label('Rework entire pallet?') + ->boolean() + ->grouped() + ->reactive() + ->hidden(fn (callable $get) => (! $get('plant') || $get('rework_type') != 'pallet' || $get('update_pallet') == '0' || ! $get('scan_pallet_no') || $get('scan_serial_no'))) + ->afterStateUpdated(function ($state, callable $set, callable $get, $livewire) { + $plantId = $get('plant'); + + $palletNumber = trim($get('scan_pallet_no')); + $serialNo = trim($get('scan_serial_no')); + $updatePalletStatus = $get('update_pallet') ?? null; + + if ($updatePalletStatus == 0) { + return; + } + + if (strlen($palletNumber) < 10) { + Notification::make() + ->title('Invalid: Pallet Number') + ->body("Pallet number '$palletNumber' must be at least 10 digits.") ->danger() ->duration(5000) ->send(); @@ -285,71 +208,134 @@ class ReworkLocatorInvoiceValidationResource extends Resource $set('scan_serial_no', null); $set('scan_pallet_no', null); $set('update_pallet', null); + return; } - else - { - if (strlen($serialNo) > 0 && (strlen($serialNo) < 9 || strlen($serialNo) > 20)) - { + + $PalletSerialNumbers = PalletValidation::where('plant_id', $plantId)->where('pallet_number', $palletNumber)->first(); + + if (! $PalletSerialNumbers) { + Notification::make() + ->title('Pallet Not Found') + ->body("Pallet number '$palletNumber' doesn't exist in pallet table!

Scan the valid exist 'Pallet Number' to proceed..!") + ->danger() + ->duration(5000) + ->send(); + + $livewire->dispatch('loadData', '', '', $plantId, 'pallet'); + $set('scan_serial_no', null); + $set('scan_pallet_no', null); + $set('update_pallet', null); + + return; + } + + $rows = PalletValidation::where('pallet_number', $palletNumber) + ->where('plant_id', $plantId) + ->get(); + + $isScanningComplete = true; + foreach ($rows as $row) { + if ($row->pallet_status != 'Completed') { + $isScanningComplete = false; + break; + } + } + + if (count($rows) <= 0) { + $isScanningComplete = false; + } + + if (! $isScanningComplete) { + Notification::make() + ->title('Pallet Not Completed') + ->body("Scanned pallet number '$palletNumber' doesn't completed the master packing!

Please, scan the valid completed pallet number to proceed..!") + ->danger() + ->duration(5000) + ->send(); + + $livewire->dispatch('loadData', '', '', $plantId, 'pallet'); + $set('scan_serial_no', null); + $set('scan_pallet_no', null); + $set('update_pallet', null); + + return; + } else { + $locatExist = ($PalletSerialNumbers->locator_number != null && $PalletSerialNumbers->locator_number != '') ? $PalletSerialNumbers->locator_number : ''; + if ($locatExist) { Notification::make() - ->title("Invalid: Serial Number") - ->body("Serial number '$serialNo' should contain minimum 9 digits and maximum 20 digits.") + ->title('Locator Pallet Found') + ->body("Scanned pallet number '$palletNumber' exist in locator number '$locatExist'.

Remove scanned 'Pallet' from 'Locator' to proceed re-master packing..!") ->danger() ->duration(5000) ->send(); - $livewire->dispatch('loadData', '', $palletNumber, $plantId, 'pallet'); - $set('scan_serial_no', null); - $set('update_pallet', null); - return; - } - else if (strlen($serialNo) > 0 && !ctype_alnum($serialNo)) - { - Notification::make() - ->title("Invalid: Serial Number") - ->body("Serial number '$serialNo' must contain alpha-numeric values only.") - ->danger() - ->duration(5000) - ->send(); - - $livewire->dispatch('loadData', '', $palletNumber, $plantId, 'pallet'); - $set('scan_serial_no', null); - $set('update_pallet', null); - return; - } - - if ($updatePalletStatus == 1) - { - foreach ($rows as $row) - { - $row->forceDelete(); // Delete the row from the original table - } - - Notification::make() - ->title('Completed: Rework Pallet') - ->body("Scanned pallet number '$palletNumber' successfully removed from pallet table.

Please, scan the next pallet number to re-master packing..!") - ->success() - ->duration(800) - ->send(); - $livewire->dispatch('loadData', '', '', $plantId, 'pallet'); $set('scan_serial_no', null); $set('scan_pallet_no', null); $set('update_pallet', null); + return; + } else { + if (strlen($serialNo) > 0 && (strlen($serialNo) < 9 || strlen($serialNo) > 20)) { + Notification::make() + ->title('Invalid: Serial Number') + ->body("Serial number '$serialNo' should contain minimum 9 digits and maximum 20 digits.") + ->danger() + ->duration(5000) + ->send(); + + $livewire->dispatch('loadData', '', $palletNumber, $plantId, 'pallet'); + $set('scan_serial_no', null); + $set('update_pallet', null); + + return; + } elseif (strlen($serialNo) > 0 && ! ctype_alnum($serialNo)) { + Notification::make() + ->title('Invalid: Serial Number') + ->body("Serial number '$serialNo' must contain alpha-numeric values only.") + ->danger() + ->duration(5000) + ->send(); + + $livewire->dispatch('loadData', '', $palletNumber, $plantId, 'pallet'); + $set('scan_serial_no', null); + $set('update_pallet', null); + + return; + } + + if ($updatePalletStatus == 1) { + foreach ($rows as $row) { + $row->forceDelete(); // Delete the row from the original table + } + + Notification::make() + ->title('Completed: Rework Pallet') + ->body("Scanned pallet number '$palletNumber' successfully removed from pallet table.

Please, scan the next pallet number to re-master packing..!") + ->success() + ->duration(800) + ->send(); + + $livewire->dispatch('loadData', '', '', $plantId, 'pallet'); + $set('scan_serial_no', null); + $set('scan_pallet_no', null); + $set('update_pallet', null); + + return; + } } } - } - }), - Forms\Components\Hidden::make('created_by') - ->default(Filament::auth()->user()?->name), - Forms\Components\Hidden::make('scanned_by') - ->default(Filament::auth()->user()?->name), - Forms\Components\TextInput::make('id') - ->hidden() - ->readOnly(), - ]) - ->columns(5) + }), + Forms\Components\Hidden::make('created_by') + ->default(Filament::auth()->user()?->name), + Forms\Components\Hidden::make('scanned_by') + ->default(Filament::auth()->user()?->name), + Forms\Components\TextInput::make('id') + ->hidden() + ->readOnly(), + ]) + ->columns(5), ]); } @@ -364,6 +350,7 @@ class ReworkLocatorInvoiceValidationResource extends Resource $paginator = $livewire->getTableRecords(); $perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10; $currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1; + return ($currentPage - 1) * $perPage + $rowLoop->iteration; }), Tables\Columns\TextColumn::make('plant.name') @@ -444,207 +431,221 @@ class ReworkLocatorInvoiceValidationResource extends Resource ->importer(ReworkLocatorInvoiceValidationImporter::class) ->label('Import Rework Invoice') ->color('warning') - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import rework invoice validation'); }), ExportAction::make() ->exporter(ReworkLocatorInvoiceValidationExporter::class) ->label('Export Rework Invoice') ->color('warning') - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export rework invoice validation'); }), ]) - // ->filters([ - // Tables\Filters\TrashedFilter::make(), - // ]) ->filters([ Tables\Filters\TrashedFilter::make(), Filter::make('advanced_filters') - ->label('Advanced Filters') - ->form([ - Select::make('Plant') - ->label('Select Plant') - ->nullable() - // ->options(function () { - // return Plant::pluck('name', 'id'); - // }) - ->options(function (callable $get) { + ->label('Advanced Filters') + ->form([ + Select::make('Plant') + ->label('Select Plant') + ->nullable() + // ->options(function () { + // return 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() + ->afterStateUpdated(function ($state, callable $set, callable $get): void { + $set('pallet_number', null); + $set('invoice_number', null); + $set('serial_number', null); + $set('scanned_status', null); + $set('locator_number', null); + $set('created_from', null); + $set('created_to', null); + $set('created_by', null); + $set('scanned_from', null); + $set('scanned_to', null); + $set('scanned_by', null); + }), + Select::make('invoice_number') + ->label('Invoice Number') + ->options(function (callable $get) { + $plantId = $get('Plant'); + if (! $plantId) { + return []; + } + + return ReworkLocatorInvoiceValidation::where('plant_id', $plantId) + ->whereNotNull('invoice_number') + ->where('invoice_number', '!=', '') + ->orderBy('invoice_number', 'asc') + ->get() + ->unique('invoice_number') + ->pluck('invoice_number', 'invoice_number') + ->toArray(); + }) + ->searchable() + ->reactive(), + TextInput::make('serial_number') + ->label('Serial Number') + ->placeholder(placeholder: 'Enter Serial Number'), + Select::make('pallet_number') + ->label('Pallet Number') + ->options(function (callable $get) { + $plantId = $get('Plant'); + if (! $plantId) { + return []; + } + + return ReworkLocatorInvoiceValidation::where('plant_id', $plantId) + ->whereNotNull('pallet_number') + ->where('pallet_number', '!=', '') + ->orderBy('pallet_number', 'asc') + ->get() + ->unique('pallet_number') + ->pluck('pallet_number', 'pallet_number') + ->toArray(); + }) + ->searchable() + ->reactive(), + Select::make('locator_number') + ->label('Locator Number') + ->options(function (callable $get) { + $plantId = $get('Plant'); + if (! $plantId) { + return []; + } + + return ReworkLocatorInvoiceValidation::where('plant_id', $plantId) + ->whereNotNull('locator_number') + ->where('locator_number', '!=', '') + ->orderBy('locator_number', 'asc') + ->get() + ->unique('locator_number') + ->pluck('locator_number', 'locator_number') + ->toArray(); + }) + ->searchable() + ->reactive(), + Select::make('scanned_status') + ->label('Scanned Status') + ->options([ + 'Scanned' => 'Scanned', + ]), + DateTimePicker::make(name: 'rework_from') + ->label('Rework From') + ->placeholder(placeholder: 'Select From DateTime') + ->reactive() + ->native(false), + DateTimePicker::make('rework_to') + ->label('Rework To') + ->placeholder(placeholder: 'Select To DateTime') + ->reactive() + ->native(false), + TextInput::make('rework_by') + ->label('Rework By') + ->placeholder(placeholder: 'Enter Rework By'), + ]) + ->query(function ($query, array $data) { + // Hide all records initially if no filters are applied + if (empty($data['Plant']) && empty($data['invoice_number']) && empty($data['serial_number']) && empty($data['pallet_number']) && empty($data['locator_number']) && empty($data['scanned_status']) && empty($data['rework_from']) && empty($data['rework_to']) && empty($data['rework_by'])) { + return $query->whereRaw('1 = 0'); + } + + if (! empty($data['Plant'])) { // $plant = $data['Plant'] ?? null + $query->where('plant_id', $data['Plant']); + } else { $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() - ->afterStateUpdated(function ($state, callable $set, callable $get): void { - $set('pallet_number', null); - $set('invoice_number', null); - $set('serial_number', null); - $set('scanned_status', null); - $set('locator_number', null); - $set('created_from', null); - $set('created_to', null); - $set('created_by', null); - $set('scanned_from', null); - $set('scanned_to', null); - $set('scanned_by', null); - }), - Select::make('invoice_number') - ->label('Invoice Number') - ->options(function (callable $get) { - $plantId = $get('Plant'); - if (!$plantId) { - return []; + + if ($userHas && strlen($userHas) > 0) { + return $query->whereRaw('1 = 0'); } - return ReworkLocatorInvoiceValidation::where('plant_id', $plantId) - ->whereNotNull('invoice_number') - ->where('invoice_number','!=', '') - ->orderBy('invoice_number', 'asc') - ->get() - ->unique('invoice_number') - ->pluck('invoice_number', 'invoice_number') - ->toArray(); - }) - ->searchable() - ->reactive(), - TextInput::make('serial_number') - ->label('Serial Number') - ->placeholder(placeholder: 'Enter Serial Number'), - Select::make('pallet_number') - ->label('Pallet Number') - ->options(function (callable $get) { - $plantId = $get('Plant'); - if (!$plantId) { - return []; + } + + if (! empty($data['invoice_number'])) { + $query->where('invoice_number', $data['invoice_number']); + } + + if (! empty($data['serial_number'])) { + $query->where('serial_number', $data['serial_number']); + } + + if (! empty($data['pallet_number'])) { + $query->where('pallet_number', $data['pallet_number']); + } + + if (! empty($data['locator_number'])) { + $query->where('locator_number', $data['locator_number']); + } + if (! empty($data['scanned_status'])) { + $query->where('scanned_status', $data['scanned_status']); + } + + if (! empty($data['rework_from'])) { + $query->where('reworked_at', '>=', $data['rework_from']); + } + + if (! empty($data['rework_to'])) { + $query->where('reworked_at', '<=', $data['rework_to']); + } + + if (! empty($data['rework_by'])) { + $query->where('reworked_by', $data['rework_by']); + } + + }) + ->indicateUsing(function (array $data) { + $indicators = []; + + if (! empty($data['Plant'])) { + $indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name'); + } else { + $userHas = Filament::auth()->user()->plant_id; + + if ($userHas && strlen($userHas) > 0) { + return 'Plant: Choose plant to filter records.'; } - return ReworkLocatorInvoiceValidation::where('plant_id', $plantId) - ->whereNotNull('pallet_number') - ->where('pallet_number','!=', '') - ->orderBy('pallet_number', 'asc') - ->get() - ->unique('pallet_number') - ->pluck('pallet_number', 'pallet_number') - ->toArray(); - }) - ->searchable() - ->reactive(), - Select::make('locator_number') - ->label('Locator Number') - ->options(function (callable $get) { - $plantId = $get('Plant'); - if (!$plantId) { - return []; - } - return ReworkLocatorInvoiceValidation::where('plant_id', $plantId) - ->whereNotNull('locator_number') - ->where('locator_number','!=', '') - ->orderBy('locator_number', 'asc') - ->get() - ->unique('locator_number') - ->pluck('locator_number', 'locator_number') - ->toArray(); - }) - ->searchable() - ->reactive(), - Select::make('scanned_status') - ->label('Scanned Status') - ->options([ - 'Scanned' => 'Scanned', - ]), - DateTimePicker::make(name: 'rework_from') - ->label('Rework From') - ->placeholder(placeholder: 'Select From DateTime') - ->reactive() - ->native(false), - DateTimePicker::make('rework_to') - ->label('Rework To') - ->placeholder(placeholder: 'Select To DateTime') - ->reactive() - ->native(false), - TextInput::make('rework_by') - ->label('Rework By') - ->placeholder(placeholder: 'Enter Rework By'), - ]) - ->query(function ($query, array $data) { - // Hide all records initially if no filters are applied - if (empty($data['Plant']) && empty($data['invoice_number']) && empty($data['serial_number']) && empty($data['pallet_number']) && empty($data['locator_number']) && empty($data['scanned_status']) && empty($data['rework_from']) && empty($data['rework_to']) && empty($data['rework_by'])) { - return $query->whereRaw('1 = 0'); - } + } - if (!empty($data['Plant'])) { //$plant = $data['Plant'] ?? null - $query->where('plant_id', $data['Plant']); - } + if (! empty($data['invoice_number'])) { + $indicators[] = 'Invoice Number: '.$data['invoice_number']; + } - if (!empty($data['invoice_number'])) { - $query->where('invoice_number', $data['invoice_number']); - } + if (! empty($data['serial_number'])) { + $indicators[] = 'Serial Number: '.$data['serial_number']; + } - if (!empty($data['serial_number'])) { - $query->where('serial_number', $data['serial_number']); - } + if (! empty($data['pallet_number'])) { + $indicators[] = 'Pallet Number: '.$data['pallet_number']; + } - if (!empty($data['pallet_number'])) { - $query->where('pallet_number', $data['pallet_number']); - } + if (! empty($data['locator_number'])) { + $indicators[] = 'Locator Number: '.$data['locator_number']; + } - if (!empty($data['locator_number'])) { - $query->where('locator_number', $data['locator_number']); - } - if (!empty($data['scanned_status'])) { - $query->where('scanned_status', $data['scanned_status']); - } + if (! empty($data['scanned_status'])) { + $indicators[] = 'Scanned Status: '.$data['scanned_status']; + } - if (!empty($data['rework_from'])) { - $query->where('reworked_at', '>=', $data['rework_from']); - } + if (! empty($data['rework_from'])) { + $indicators[] = 'From: '.$data['rework_from']; + } - if (!empty($data['rework_to'])) { - $query->where('reworked_at', '<=', $data['rework_to']); - } + if (! empty($data['rework_to'])) { + $indicators[] = 'To: '.$data['rework_to']; + } - if (!empty($data['rework_by'])) { - $query->where('reworked_by', $data['rework_by']); - } + if (! empty($data['rework_by'])) { + $indicators[] = 'Reworked By: '.$data['rework_by']; + } - }) - ->indicateUsing(function (array $data) { - $indicators = []; - - if (!empty($data['Plant'])) { - $indicators[] = 'Plant: ' . Plant::where('id', $data['Plant'])->value('name'); - } - - if (!empty($data['invoice_number'])) { - $indicators[] = 'Invoice Number: ' . $data['invoice_number']; - } - - if (!empty($data['serial_number'])) { - $indicators[] = 'Serial Number: ' . $data['serial_number']; - } - - if (!empty($data['pallet_number'])) { - $indicators[] = 'Pallet Number: ' . $data['pallet_number']; - } - - if (!empty($data['locator_number'])) { - $indicators[] = 'Locator Number: ' . $data['locator_number']; - } - - if (!empty($data['scanned_status'])) { - $indicators[] = 'Scanned Status: ' . $data['scanned_status']; - } - - if (!empty($data['rework_from'])) { - $indicators[] = 'From: ' . $data['rework_from']; - } - - if (!empty($data['rework_to'])) { - $indicators[] = 'To: ' . $data['rework_to']; - } - - if (!empty($data['rework_by'])) { - $indicators[] = 'Reworked By: ' . $data['rework_by']; - } - return $indicators; - }) + return $indicators; + }), ]) ->filtersFormMaxHeight('280px') ->actions([