diff --git a/app/Filament/Resources/PalletValidationResource.php b/app/Filament/Resources/PalletValidationResource.php index 242c29c..395bfc8 100644 --- a/app/Filament/Resources/PalletValidationResource.php +++ b/app/Filament/Resources/PalletValidationResource.php @@ -5,31 +5,24 @@ namespace App\Filament\Resources; use App\Filament\Exports\PalletValidationExporter; use App\Filament\Imports\PalletValidationImporter; use App\Filament\Resources\PalletValidationResource\Pages; -use App\Filament\Resources\PalletValidationResource\RelationManagers; -use App\Models\Item; use App\Models\LocatorInvoiceValidation; use App\Models\PalletValidation; use App\Models\Plant; -use App\Models\StickerMaster; 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\Form; 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\Actions; -use Filament\Tables\Actions\ExportAction; -use Filament\Tables\Actions\ImportAction; -use Log; -use Filament\Tables\Actions\Action; -use Filament\Forms\Components\DateTimePicker; -use Filament\Tables\Filters\Filter; -use Filament\Forms\Components\Select; -use Filament\Forms\Components\TextInput; - class PalletValidationResource extends Resource { @@ -47,148 +40,147 @@ class PalletValidationResource extends Resource return $form ->schema([ Section::make('') - ->schema([ - Forms\Components\Select::make('plant_id') - ->label('Plant') - ->relationship('plant', 'name') - ->required() - ->reactive() - ->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) { - $set('pallet_number', null); - $set('serial_number', null); - $set('removeSno_number', null); - $set('Sno_quantity', 0); - $set('pending_pallet_list', null); - }), - Forms\Components\TextInput::make('pallet_number') - ->label('Scan Pallet No') - ->reactive() - ->required() - ->readonly() //fn ($get) => (bool)$get('pallet_number_locked') || $get('serial_number') || $get('removeSno_number') - ->extraAttributes([ - 'x-data' => '{ value: "" }', - 'x-model' => 'value', - 'x-on:keydown.enter.prevent' => '$wire.processPalletNo()', - ]) - ->suffixAction(fn ($get,$set) => - Forms\Components\Actions\Action::make('addPallet') - ->label('') - ->button() - ->icon('heroicon-o-plus') - ->color('primary') - ->extraAttributes([ - 'class' => 'p-1 w-7 h-7', - ]) - ->action(function ($get, $set, $livewire) { - $plantId = $get('plant_id'); + ->schema([ + Forms\Components\Select::make('plant_id') + ->label('Plant') + ->relationship('plant', 'name') + ->required() + ->reactive() + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; - session(['pallet_clicked_time' => now()->toDateTimeString()]); - - session(['pallet_created_by' => Filament::auth()->user()->name]); - - $year = now()->format('y'); - $month = now()->format('m'); - $prefix = "EP-{$year}{$month}"; - - $lastPallet1 = PalletValidation::where('pallet_number', 'like', "{$prefix}%")->orderByDesc('pallet_number')->first(); //->where('plant_id', $plantId) - $lastPallet2 = LocatorInvoiceValidation::where('pallet_number', 'like', "{$prefix}%")->orderByDesc('pallet_number')->first(); - $newNumber = '001'; // $lastPallet ? str_pad(intval(substr($lastPallet->pallet_number, -3)) + 1, 3, '0', STR_PAD_LEFT) : '001'; - if ($lastPallet1 && $lastPallet2) { - $serialPart1 = substr($lastPallet1->pallet_number, strlen($prefix)); - $serialPart2 = substr($lastPallet2->pallet_number, strlen($prefix)); - if (intval($serialPart1) > intval($serialPart2)) { - $newNumber = str_pad(intval($serialPart1) + 1, strlen($serialPart1), '0', STR_PAD_LEFT); - } else { - $newNumber = str_pad(intval($serialPart2) + 1, strlen($serialPart2), '0', STR_PAD_LEFT); - } - } - else if ($lastPallet1) { - $serialPart1 = substr($lastPallet1->pallet_number, strlen($prefix)); - // OR - // $serialPart = str_replace($prefix, '', $lastPallet->pallet_number); - $newNumber = str_pad(intval($serialPart1) + 1, strlen($serialPart1), '0', STR_PAD_LEFT); - } - else if ($lastPallet2) { - $serialPart2 = substr($lastPallet2->pallet_number, strlen($prefix)); - // OR - // $serialPart = str_replace($prefix, '', $lastPallet->pallet_number); - $newNumber = str_pad(intval($serialPart2) + 1, strlen($serialPart2), '0', STR_PAD_LEFT); - } - - $newPalletNumber = "{$prefix}{$newNumber}"; - - $set('pallet_number', $newPalletNumber); - $set('pallet_number_locked', true); - $set('plant_id', $plantId); - - $livewire->redirectToQrPdf($newPalletNumber); - }) - ), - - Forms\Components\TextInput::make('serial_number') - ->label('Scan Serial No') - ->reactive() - ->minLength(9) - ->readOnly(fn (callable $get) => !$get('pallet_number') || $get('removeSno_number')) - ->extraAttributes([ - 'x-on:keydown.enter.prevent' => '$wire.processPalletSNo()', - ]), - Forms\Components\TextInput::make('removeSno_number') - ->label('Remove Serial No') - ->reactive() - ->minLength(9) - ->readOnly(fn (callable $get) => !$get('pallet_number') || $get('serial_number')) - ->extraAttributes([ - 'x-data' => '{ value: "" }', - 'x-model' => 'value', - 'x-on:keydown.enter.prevent' => '$wire.processRemoveSNo()', - ]), - - Forms\Components\TextInput::make('Sno_quantity') - ->label('SNo. Quantity') - ->readOnly() - ->default('0'), - Forms\Components\Hidden::make('created_by') - ->default(Filament::auth()->user()?->name), - Forms\Components\Hidden::make('scanned_by') - ->default(Filament::auth()->user()?->name), - Forms\Components\Hidden::make('pallet_number_locked') - ->default(false), - Forms\Components\Select::make('pending_pallet_list') - ->label('Pending Pallet List') - ->reactive() - ->afterStateUpdated(function ($state, callable $set) { - $set('pallet_number', $state); - $set('pallet_number_locked', false); - }) - ->options(function ($get) { - - $plantId = $get('plant_id'); - - if (!$plantId) { - return []; - } - return PalletValidation::query() - ->where('plant_id', $plantId) - ->where(function($query) { - $query->whereNull('pallet_status') - ->orWhere('pallet_status', ''); + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); }) - ->whereNotNull('pallet_number') - ->orderBy('pallet_number', 'asc') - ->pluck('pallet_number') - ->unique() - ->mapWithKeys(fn($number) => [$number => $number]) - ->toArray(); - }), + ->afterStateUpdated(function ($state, callable $set) { + $set('pallet_number', null); + $set('serial_number', null); + $set('removeSno_number', null); + $set('Sno_quantity', 0); + $set('pending_pallet_list', null); + }), + Forms\Components\TextInput::make('pallet_number') + ->label('Scan Pallet No') + ->reactive() + ->required() + ->readonly() // fn ($get) => (bool)$get('pallet_number_locked') || $get('serial_number') || $get('removeSno_number') + ->extraAttributes([ + 'x-data' => '{ value: "" }', + 'x-model' => 'value', + 'x-on:keydown.enter.prevent' => '$wire.processPalletNo()', + ]) + ->suffixAction(fn ($get, $set) => Forms\Components\Actions\Action::make('addPallet') + ->label('') + ->button() + ->icon('heroicon-o-plus') + ->color('primary') + ->extraAttributes([ + 'class' => 'p-1 w-7 h-7', + ]) + ->action(function ($get, $set, $livewire) { + $plantId = $get('plant_id'); - Forms\Components\View::make('forms.components.save-pallet-button') - ]) - ->columns(5), + session(['pallet_clicked_time' => now()->toDateTimeString()]); + + session(['pallet_created_by' => Filament::auth()->user()->name]); + + $year = now()->format('y'); + $month = now()->format('m'); + $prefix = "EP-{$year}{$month}"; + + $lastPallet1 = PalletValidation::where('pallet_number', 'like', "{$prefix}%")->orderByDesc('pallet_number')->first(); // ->where('plant_id', $plantId) + $lastPallet2 = LocatorInvoiceValidation::where('pallet_number', 'like', "{$prefix}%")->orderByDesc('pallet_number')->first(); + $newNumber = '001'; // $lastPallet ? str_pad(intval(substr($lastPallet->pallet_number, -3)) + 1, 3, '0', STR_PAD_LEFT) : '001'; + if ($lastPallet1 && $lastPallet2) { + $serialPart1 = substr($lastPallet1->pallet_number, strlen($prefix)); + $serialPart2 = substr($lastPallet2->pallet_number, strlen($prefix)); + if (intval($serialPart1) > intval($serialPart2)) { + $newNumber = str_pad(intval($serialPart1) + 1, strlen($serialPart1), '0', STR_PAD_LEFT); + } else { + $newNumber = str_pad(intval($serialPart2) + 1, strlen($serialPart2), '0', STR_PAD_LEFT); + } + } elseif ($lastPallet1) { + $serialPart1 = substr($lastPallet1->pallet_number, strlen($prefix)); + // OR + // $serialPart = str_replace($prefix, '', $lastPallet->pallet_number); + $newNumber = str_pad(intval($serialPart1) + 1, strlen($serialPart1), '0', STR_PAD_LEFT); + } elseif ($lastPallet2) { + $serialPart2 = substr($lastPallet2->pallet_number, strlen($prefix)); + // OR + // $serialPart = str_replace($prefix, '', $lastPallet->pallet_number); + $newNumber = str_pad(intval($serialPart2) + 1, strlen($serialPart2), '0', STR_PAD_LEFT); + } + + $newPalletNumber = "{$prefix}{$newNumber}"; + + $set('pallet_number', $newPalletNumber); + $set('pallet_number_locked', true); + $set('plant_id', $plantId); + + $livewire->redirectToQrPdf($newPalletNumber); + }) + ), + + Forms\Components\TextInput::make('serial_number') + ->label('Scan Serial No') + ->reactive() + ->minLength(9) + ->readOnly(fn (callable $get) => ! $get('pallet_number') || $get('removeSno_number')) + ->extraAttributes([ + 'x-on:keydown.enter.prevent' => '$wire.processPalletSNo()', + ]), + Forms\Components\TextInput::make('removeSno_number') + ->label('Remove Serial No') + ->reactive() + ->minLength(9) + ->readOnly(fn (callable $get) => ! $get('pallet_number') || $get('serial_number')) + ->extraAttributes([ + 'x-data' => '{ value: "" }', + 'x-model' => 'value', + 'x-on:keydown.enter.prevent' => '$wire.processRemoveSNo()', + ]), + + Forms\Components\TextInput::make('Sno_quantity') + ->label('SNo. Quantity') + ->readOnly() + ->default('0'), + Forms\Components\Hidden::make('created_by') + ->default(Filament::auth()->user()?->name), + Forms\Components\Hidden::make('scanned_by') + ->default(Filament::auth()->user()?->name), + Forms\Components\Hidden::make('pallet_number_locked') + ->default(false), + Forms\Components\Select::make('pending_pallet_list') + ->label('Pending Pallet List') + ->reactive() + ->afterStateUpdated(function ($state, callable $set) { + $set('pallet_number', $state); + $set('pallet_number_locked', false); + }) + ->options(function ($get) { + + $plantId = $get('plant_id'); + + if (! $plantId) { + return []; + } + + return PalletValidation::query() + ->where('plant_id', $plantId) + ->where(function ($query) { + $query->whereNull('pallet_status') + ->orWhere('pallet_status', ''); + }) + ->whereNotNull('pallet_number') + ->orderBy('pallet_number', 'asc') + ->pluck('pallet_number') + ->unique() + ->mapWithKeys(fn ($number) => [$number => $number]) + ->toArray(); + }), + + Forms\Components\View::make('forms.components.save-pallet-button'), + ]) + ->columns(5), Forms\Components\TextInput::make('id') ->hidden() ->readOnly(), @@ -199,8 +191,7 @@ class PalletValidationResource extends Resource public static function table(Table $table): Table { return $table - - ->columns([ + ->columns([ // Tables\Columns\TextColumn::make('id') // ->label('ID') // ->numeric() @@ -212,6 +203,7 @@ class PalletValidationResource 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') @@ -286,6 +278,7 @@ class PalletValidationResource extends Resource // }) ->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() @@ -306,19 +299,20 @@ class PalletValidationResource extends Resource ->label('Pallet Number') ->options(function (callable $get) { $plantId = $get('Plant'); - if (!$plantId) { + if (! $plantId) { return []; } + return PalletValidation::where('plant_id', $plantId) // ->whereNotNull('pallet_number') // ->where('pallet_number', '!=', '') - ->where('pallet_number', 'like', 'EP-' . '%') + ->where('pallet_number', 'like', 'EP-'.'%') // ->where(function($query) { // $query->where('pallet_number', '!=', null)->where('pallet_number', '!=', ''); // }) ->orderBy('pallet_number', 'desc') ->get() - //->unique('pallet_number') + // ->unique('pallet_number') ->pluck('pallet_number', 'pallet_number') ->toArray(); }) @@ -336,12 +330,13 @@ class PalletValidationResource extends Resource ->label('Locator Number') ->options(function (callable $get) { $plantId = $get('Plant'); - if (!$plantId) { + if (! $plantId) { return []; } + return PalletValidation::where('plant_id', $plantId) ->whereNotNull('locator_number') - ->where('locator_number','!=', '') + ->where('locator_number', '!=', '') ->orderBy('locator_number', 'asc') ->get() ->unique('locator_number') @@ -391,23 +386,29 @@ class PalletValidationResource extends Resource return $query->whereRaw('1 = 0'); } - if (!empty($data['Plant'])) { //$plant = $data['Plant'] ?? null + if (! empty($data['Plant'])) { // $plant = $data['Plant'] ?? null $query->where('plant_id', $data['Plant']); + } else { + $userHas = Filament::auth()->user()->plant_id; + + if ($userHas && strlen($userHas) > 0) { + return $query->whereRaw('1 = 0'); + } } - if (!empty($data['pallet_number'])) { + if (! empty($data['pallet_number'])) { $query->where('pallet_number', $data['pallet_number']); } - if (!empty($data['serial_number'])) { + if (! empty($data['serial_number'])) { $query->where('serial_number', $data['serial_number']); } - if (!empty($data['pallet_status'])) { + if (! empty($data['pallet_status'])) { $query->where('pallet_status', $data['pallet_status']); } - if (!empty($data['locator_number'])) { + if (! empty($data['locator_number'])) { $query->where('locator_number', $data['locator_number']); } @@ -415,87 +416,93 @@ class PalletValidationResource extends Resource // $query->where('locator_quantity', $data['locator_quantity']); // } - if ($data['locator_quantity'] != null && $data['locator_quantity'] != '') { //isset($data['locator_quantity']) && - $query->where('locator_quantity', $data['locator_quantity']);//(int) + if ($data['locator_quantity'] != null && $data['locator_quantity'] != '') { // isset($data['locator_quantity']) && + $query->where('locator_quantity', $data['locator_quantity']); // (int) } - if (!empty($data['created_from'])) { + if (! empty($data['created_from'])) { $query->where('created_at', '>=', $data['created_from']); } - if (!empty($data['created_to'])) { + if (! empty($data['created_to'])) { $query->where('created_at', '<=', $data['created_to']); } - if (!empty($data['created_by'])) { + if (! empty($data['created_by'])) { $query->where('created_by', $data['created_by']); } - if (!empty($data['scanned_from'])) { + if (! empty($data['scanned_from'])) { $query->where('scanned_at', '>=', $data['scanned_from']); } - if (!empty($data['scanned_to'])) { + if (! empty($data['scanned_to'])) { $query->where('scanned_at', '<=', $data['scanned_to']); } - if (!empty($data['scanned_by'])) { + if (! empty($data['scanned_by'])) { $query->where('scanned_by', $data['scanned_by']); } }) ->indicateUsing(function (array $data) { $indicators = []; - if (!empty($data['Plant'])) { - $indicators[] = 'Plant: ' . Plant::where('id', $data['Plant'])->value('name'); + 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.'; + } } - if (!empty($data['pallet_number'])) { - $indicators[] = 'Pallet Number: ' . $data['pallet_number']; + if (! empty($data['pallet_number'])) { + $indicators[] = 'Pallet Number: '.$data['pallet_number']; } - if (!empty($data['serial_number'])) { - $indicators[] = 'Serial Number: ' . $data['serial_number']; + if (! empty($data['serial_number'])) { + $indicators[] = 'Serial Number: '.$data['serial_number']; } - if (!empty($data['pallet_status'])) { - $indicators[] = 'Pallet Status: ' . $data['pallet_status']; + if (! empty($data['pallet_status'])) { + $indicators[] = 'Pallet Status: '.$data['pallet_status']; } - if (!empty($data['locator_number'])) { - $indicators[] = 'Locator Number: ' . $data['locator_number']; + if (! empty($data['locator_number'])) { + $indicators[] = 'Locator Number: '.$data['locator_number']; } // if (!empty($data['locator_quantity'])) { // $indicators[] = 'Locator Quantity: ' . $data['locator_quantity']; // } - if ($data['locator_quantity'] != null && $data['locator_quantity'] != '') { //isset($data['locator_quantity']) && - $indicators[] = 'Locator Quantity: ' . $data['locator_quantity']; + if ($data['locator_quantity'] != null && $data['locator_quantity'] != '') { // isset($data['locator_quantity']) && + $indicators[] = 'Locator Quantity: '.$data['locator_quantity']; } - if (!empty($data['created_from'])) { - $indicators[] = 'From: ' . $data['created_from']; + if (! empty($data['created_from'])) { + $indicators[] = 'From: '.$data['created_from']; } - if (!empty($data['created_to'])) { - $indicators[] = 'To: ' . $data['created_to']; + if (! empty($data['created_to'])) { + $indicators[] = 'To: '.$data['created_to']; } - if (!empty($data['created_by'])) { - $indicators[] = 'Created By: ' . $data['created_by']; + if (! empty($data['created_by'])) { + $indicators[] = 'Created By: '.$data['created_by']; } - if (!empty($data['scanned_from'])) { - $indicators[] = 'Scanned From: ' . $data['scanned_from']; + if (! empty($data['scanned_from'])) { + $indicators[] = 'Scanned From: '.$data['scanned_from']; } - if (!empty($data['scanned_to'])) { - $indicators[] = 'Scanned To: ' . $data['scanned_to']; + if (! empty($data['scanned_to'])) { + $indicators[] = 'Scanned To: '.$data['scanned_to']; } - if (!empty($data['scanned_by'])) { - $indicators[] = 'Scanned By: ' . $data['scanned_by']; + if (! empty($data['scanned_by'])) { + $indicators[] = 'Scanned By: '.$data['scanned_by']; } return $indicators; - }) + }), ]) ->filtersFormMaxHeight('280px') ->actions([ @@ -515,64 +522,66 @@ class PalletValidationResource extends Resource ->label('Re-Print Pallet QR') ->form([ Forms\Components\Section::make() - ->schema([ - Forms\Components\Select::make('plant') - ->label('Select Plant') - // ->options(Plant::pluck('name', 'id')->toArray()) - ->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(); - }) - ->required() - ->reactive() - ->columnSpan(2), - Forms\Components\Select::make('pallet_list') - ->label('Select Pallet') - ->searchable() - ->required() - ->reactive() - ->columnSpan(1) - //->optionsLimit(500) - ->options(function (callable $get) { - $plantId = $get('plant'); + ->schema([ + Forms\Components\Select::make('plant') + ->label('Select Plant') + // ->options(Plant::pluck('name', 'id')->toArray()) + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; - if (!$plantId) { - return []; - } + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); + }) + ->required() + ->reactive() + ->columnSpan(2), + Forms\Components\Select::make('pallet_list') + ->label('Select Pallet') + ->searchable() + ->required() + ->reactive() + ->columnSpan(1) + // ->optionsLimit(500) + ->options(function (callable $get) { + $plantId = $get('plant'); - return PalletValidation::query()->where('plant_id', $plantId) - // ->whereNotNull('pallet_number') - // ->where('pallet_number', '!=', '') - ->where('pallet_number', 'like', 'EP-' . '%') - ->select('pallet_number') - ->distinct() - ->orderBy('pallet_number', 'desc') - ->pluck('pallet_number', 'pallet_number') - ->toArray(); - }), - ]) - ->columns(['default' => 1, 'sm' => 3]), + if (! $plantId) { + return []; + } + + return PalletValidation::query()->where('plant_id', $plantId) + // ->whereNotNull('pallet_number') + // ->where('pallet_number', '!=', '') + ->where('pallet_number', 'like', 'EP-'.'%') + ->select('pallet_number') + ->distinct() + ->orderBy('pallet_number', 'desc') + ->pluck('pallet_number', 'pallet_number') + ->toArray(); + }), + ]) + ->columns(['default' => 1, 'sm' => 3]), ]) - ->action(function (array $data) { + ->action(function (array $data) { $selectedPalletNumber = $data['pallet_list']; + return redirect()->route('download-reprint-qr-pdf', ['palletNo' => $selectedPalletNumber]); }) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view reprint pallet number'); }), ImportAction::make() ->importer(PalletValidationImporter::class) ->label('Import Pallet') ->color('warning') - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import pallet validation'); }), ExportAction::make() ->exporter(PalletValidationExporter::class) ->label('Export Pallet') ->color('warning') - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export pallet validation'); }), ]);