diff --git a/app/Filament/Resources/ProductCharacteristicsMasterResource.php b/app/Filament/Resources/ProductCharacteristicsMasterResource.php index 06e123a..0074024 100644 --- a/app/Filament/Resources/ProductCharacteristicsMasterResource.php +++ b/app/Filament/Resources/ProductCharacteristicsMasterResource.php @@ -5,7 +5,6 @@ namespace App\Filament\Resources; use App\Filament\Exports\ProductCharacteristicsMasterExporter; use App\Filament\Imports\ProductCharacteristicsMasterImporter; use App\Filament\Resources\ProductCharacteristicsMasterResource\Pages; -use App\Filament\Resources\ProductCharacteristicsMasterResource\RelationManagers; use App\Models\Item; use App\Models\Line; use App\Models\Machine; @@ -14,19 +13,19 @@ use App\Models\ProductCharacteristicsMaster; use App\Models\WorkGroupMaster; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Forms\Get; 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\Tables\Actions\ImportAction; -use Filament\Tables\Actions\ExportAction; -use Filament\Forms\Components\DateTimePicker; -use Filament\Tables\Filters\Filter; -use Filament\Forms\Components\Select; -use Filament\Forms\Components\TextInput; class ProductCharacteristicsMasterResource extends Resource { @@ -45,13 +44,14 @@ class ProductCharacteristicsMasterResource extends Resource ->relationship('plant', 'name') ->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(), Forms\Components\Select::make('item_id') ->label('Item Code') - //->relationship('item', 'code') + // ->relationship('item', 'code') ->searchable() ->reactive() ->options(function (callable $get) { @@ -59,6 +59,7 @@ class ProductCharacteristicsMasterResource extends Resource if (empty($plantId)) { return []; } + return \App\Models\Item::where('plant_id', $plantId)->pluck('code', 'id'); }) ->required(), @@ -70,23 +71,24 @@ class ProductCharacteristicsMasterResource extends Resource if (empty($plantId)) { return []; } + return Line::where('plant_id', $plantId)->pluck('name', 'id'); }) ->afterStateUpdated(function ($state, callable $set, callable $get) { $set('machine_id', null); - if (!$get('work_group_master_id')) { + if (! $get('work_group_master_id')) { $set('machine_id', null); } }) ->required(), - // ->relationship('line', 'name'), + // ->relationship('line', 'name'), Forms\Components\Select::make('work_group_master_id') ->label('Group Work Center') ->required() ->reactive() ->options(function (callable $get) { - if (!$get('plant_id') || !$get('line_id')) { + if (! $get('plant_id') || ! $get('line_id')) { return []; } @@ -94,23 +96,22 @@ class ProductCharacteristicsMasterResource extends Resource $workGroupIds = []; for ($i = 1; $i <= $line->no_of_operation; $i++) { $column = "work_group{$i}_id"; - if (!empty($line->$column)) { + if (! empty($line->$column)) { $workGroupIds[] = $line->$column; } } return WorkGroupMaster::where('plant_id', $get('plant_id'))->whereIn('id', $workGroupIds)->pluck('name', 'id')->toArray(); }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->afterStateUpdated(function ($state, callable $set, callable $get) { $lineId = $get('line_id'); - if (!$lineId) { + if (! $lineId) { $set('mGroupWorkError', 'Please select a line first.'); $set('machine_id', null); + return; - } - else - { + } else { // $grpWrkCnr = Line::find($lineId)->group_work_center; // if (!$grpWrkCnr || Str::length($grpWrkCnr) < 1) // { @@ -130,7 +131,7 @@ class ProductCharacteristicsMasterResource extends Resource ->hintColor('danger'), Forms\Components\Select::make('machine_id') ->label('Work Center') - //->relationship('machine', 'name'), + // ->relationship('machine', 'name'), ->searchable() ->reactive() ->options(function (callable $get) { @@ -148,7 +149,7 @@ class ProductCharacteristicsMasterResource extends Resource ->pluck('work_center', 'id'); }) ->afterStateUpdated(function ($state, callable $set, callable $get) { - if (!$get('plant_id') || !$get('line_id') || !$get('work_group_master_id')) { + if (! $get('plant_id') || ! $get('line_id') || ! $get('work_group_master_id')) { $set('machine_id', null); } }) @@ -157,7 +158,7 @@ class ProductCharacteristicsMasterResource extends Resource ->label('Characteristics Type') ->options([ 'Product' => 'Product', - 'Process' => 'Process', + 'Process' => 'Process', ]) ->reactive() ->required(), @@ -167,7 +168,7 @@ class ProductCharacteristicsMasterResource extends Resource ->label('Inspection Type') ->options([ 'Visual' => 'Visual', - 'Value' => 'Value', + 'Value' => 'Value', ]) ->reactive() ->required(), @@ -208,9 +209,9 @@ class ProductCharacteristicsMasterResource extends Resource $upper = $get('upper'); $middle = $value; - if (!is_null($lower) && !is_null($upper) && !is_null($middle)) { - if (!($lower <= $middle && $middle <= $upper)) { - $fail("Middle must be between Lower and Upper (Lower ≤ Middle ≤ Upper)."); + if (! is_null($lower) && ! is_null($upper) && ! is_null($middle)) { + if (! ($lower <= $middle && $middle <= $upper)) { + $fail('Middle must be between Lower and Upper (Lower ≤ Middle ≤ Upper).'); } } }; @@ -233,6 +234,7 @@ class ProductCharacteristicsMasterResource 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') @@ -317,201 +319,207 @@ class ProductCharacteristicsMasterResource extends Resource ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) - // ->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 (callable $get) { + $userHas = Filament::auth()->user()->plant_id; - Tables\Filters\TrashedFilter::make(), - Filter::make('advanced_filters') - ->label('Advanced Filters') - ->form([ - Select::make('Plant') - ->label('Select Plant') - ->nullable() - ->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) { - $set('Item', null); - }), - Select::make('Line') - ->label('Select Line') - ->nullable() - ->options(function (callable $get) { + 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) { + $set('Item', null); + }), + Select::make('Line') + ->label('Select Line') + ->nullable() + ->options(function (callable $get) { $plantId = $get('Plant'); - if(empty($plantId)) { + if (empty($plantId)) { return []; } return Line::where('plant_id', $plantId)->pluck('name', 'id'); - //return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; + // return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; }) - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $set('Item', null); - }), - Select::make('Item') - ->label('Item Code') - ->nullable() - ->searchable() - ->options(function (callable $get) { + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('Item', null); + }), + Select::make('Item') + ->label('Search by Item Code') + ->nullable() + ->searchable() + ->options(function (callable $get) { $plantId = $get('Plant'); - if(empty($plantId)) { - return []; - } - - return Item::where('plant_id', $plantId)->pluck('code', 'id'); - - //return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; + return Item::whereHas('productCharacteristicsMasters', function ($query) use ($plantId) { + if ($plantId) { + $query->where('plant_id', $plantId); + } + })->pluck('code', 'id'); }) - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $set('process_order', null); - }), - Select::make('work_group_master') - ->label('Select Work Group Master') - ->nullable() - ->options(function (callable $get) { + ->reactive(), + // ->afterStateUpdated(function ($state, callable $set, callable $get) { + // $set('process_order', null); + // }), + Select::make('work_group_master') + ->label('Select Work Group Master') + ->nullable() + ->options(function (callable $get) { $plantId = $get('Plant'); - if(empty($plantId)) { + if (empty($plantId)) { return []; } return WorkGroupMaster::where('plant_id', $plantId)->pluck('name', 'id'); - //return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; + // return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; }) - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $set('Machine', null); - }), - Select::make('Machine') - ->label('Select Machine') - ->nullable() - ->options(function (callable $get) { + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $set('Machine', null); + }), + Select::make('Machine') + ->label('Select Machine') + ->nullable() + ->options(function (callable $get) { $plantId = $get('Plant'); $lineId = $get('Line'); - if(empty($plantId) || empty($lineId)) { + if (empty($plantId) || empty($lineId)) { return []; } return Machine::where('plant_id', $plantId)->where('line_id', $lineId)->pluck('work_center', 'id'); - //return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; + // return $plantId ? Item::where('plant_id', $plantId)->pluck('code', 'id') : []; }) - ->reactive(), + ->reactive(), // ->afterStateUpdated(function ($state, callable $set, callable $get) { // $set('process_order', null); // }), - // TextInput::make('process_order') - // ->label('Process Order') - // ->placeholder('Enter Process Order'), - // TextInput::make('coil_number') - // ->label('Coil Number') - // ->placeholder(placeholder: 'Enter Coil Number'), - Select::make('characteristics_type') - ->label('Characteristics Type') - ->options([ - 'Product' => 'Product', - 'Process' => 'Process' - ]), - DateTimePicker::make(name: 'created_from') - ->label('Created From') - ->placeholder(placeholder: 'Select From DateTime') - ->reactive() - ->native(false), - DateTimePicker::make('created_to') - ->label('Created To') - ->placeholder(placeholder: 'Select To DateTime') - ->reactive() - ->native(false), - ]) - ->query(function ($query, array $data) { - // Hide all records initially if no filters are applied - if (empty($data['Plant']) && empty($data['Line']) && empty($data['Item']) && empty($data['work_group_master']) && empty($data['Machine']) && empty($data['characteristics_type']) && empty($data['created_from']) && empty($data['created_to'])) { - return $query->whereRaw('1 = 0'); - } + // TextInput::make('process_order') + // ->label('Process Order') + // ->placeholder('Enter Process Order'), + // TextInput::make('coil_number') + // ->label('Coil Number') + // ->placeholder(placeholder: 'Enter Coil Number'), + Select::make('characteristics_type') + ->label('Characteristics Type') + ->options([ + 'Product' => 'Product', + 'Process' => 'Process', + ]), + DateTimePicker::make(name: 'created_from') + ->label('Created From') + ->placeholder(placeholder: 'Select From DateTime') + ->reactive() + ->native(false), + DateTimePicker::make('created_to') + ->label('Created To') + ->placeholder(placeholder: 'Select To DateTime') + ->reactive() + ->native(false), + ]) + ->query(function ($query, array $data) { + // Hide all records initially if no filters are applied + if (empty($data['Plant']) && empty($data['Line']) && empty($data['Item']) && empty($data['work_group_master']) && empty($data['Machine']) && empty($data['characteristics_type']) && empty($data['created_from']) && empty($data['created_to'])) { + return $query->whereRaw('1 = 0'); + } - if (!empty($data['Plant'])) { - $query->where('plant_id', $data['Plant']); - } + if (! empty($data['Plant'])) { + $query->where('plant_id', $data['Plant']); + } else { + $userHas = Filament::auth()->user()->plant_id; - if (!empty($data['Line'])) { - $query->where('line_id', $data['Line']); - } + if ($userHas && strlen($userHas) > 0) { + return $query->whereRaw('1 = 0'); + } + } - if (!empty($data['Item'])) { - $query->where('item_id', $data['Item']); - } + if (! empty($data['Line'])) { + $query->where('line_id', $data['Line']); + } - if (!empty($data['work_group_master'])) { - $query->where('work_group_master_id', $data['work_group_master']); - } + if (! empty($data['Item'])) { + $query->where('item_id', $data['Item']); + } - if (!empty($data['Machine'])) { - $query->where('machine_id', $data['Machine']); - } + if (! empty($data['work_group_master'])) { + $query->where('work_group_master_id', $data['work_group_master']); + } - if (!empty($data['characteristics_type'])) { - $query->where('characteristics_type', $data['characteristics_type']); - } + if (! empty($data['Machine'])) { + $query->where('machine_id', $data['Machine']); + } - if (!empty($data['created_from'])) { - $query->where('created_at', '>=', $data['created_from']); - } + if (! empty($data['characteristics_type'])) { + $query->where('characteristics_type', $data['characteristics_type']); + } - if (!empty($data['created_to'])) { - $query->where('created_at', '<=', $data['created_to']); - } + if (! empty($data['created_from'])) { + $query->where('created_at', '>=', $data['created_from']); + } + if (! empty($data['created_to'])) { + $query->where('created_at', '<=', $data['created_to']); + } - //$query->orderBy('created_at', 'asc'); - }) - ->indicateUsing(function (array $data) { - $indicators = []; + // $query->orderBy('created_at', 'asc'); + }) + ->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 (!empty($data['Line'])) { - $indicators[] = 'Line: ' . Line::where('id', $data['Line'])->value('name'); - } + if ($userHas && strlen($userHas) > 0) { + return 'Plant: Choose plant to filter records.'; + } + } - if (!empty($data['Item'])) { - $indicators[] = 'Item: ' . Item::where('id', $data['Item'])->value('code'); - } + if (! empty($data['Line'])) { + $indicators[] = 'Line: '.Line::where('id', $data['Line'])->value('name'); + } - if (!empty($data['work_group_master'])) { - $indicators[] = 'Work Group Master: ' . WorkGroupMaster::where('id', $data['work_group_master'])->value('name'); - } + if (! empty($data['Item'])) { + $indicators[] = 'Item: '.Item::where('id', $data['Item'])->value('code'); + } - if (!empty($data['Machine'])) { - $indicators[] = 'Machine: ' . Machine::where('id', $data['Machine'])->value('work_center'); - } + if (! empty($data['work_group_master'])) { + $indicators[] = 'Work Group Master: '.WorkGroupMaster::where('id', $data['work_group_master'])->value('name'); + } - if (!empty($data['characteristics_type'])) { - $indicators[] = 'Characteristics Type: ' . $data['characteristics_type']; - } + if (! empty($data['Machine'])) { + $indicators[] = 'Machine: '.Machine::where('id', $data['Machine'])->value('work_center'); + } - if (!empty($data['created_from'])) { - $indicators[] = 'From: ' . $data['created_from']; - } + if (! empty($data['characteristics_type'])) { + $indicators[] = 'Characteristics Type: '.$data['characteristics_type']; + } - if (!empty($data['created_to'])) { - $indicators[] = 'To: ' . $data['created_to']; - } + if (! empty($data['created_from'])) { + $indicators[] = 'From: '.$data['created_from']; + } - return $indicators; - }) + if (! empty($data['created_to'])) { + $indicators[] = 'To: '.$data['created_to']; + } + + return $indicators; + }), ]) ->filtersFormMaxHeight('280px') ->actions([ @@ -530,14 +538,14 @@ class ProductCharacteristicsMasterResource extends Resource ->label('Import Product Characteristics Masters') ->color('warning') ->importer(ProductCharacteristicsMasterImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import product characteristics master'); }), ExportAction::make() ->label('Export Product Characteristics Masters') ->color('warning') ->exporter(ProductCharacteristicsMasterExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export product characteristics master'); }), ]);