diff --git a/app/Filament/Resources/WorkGroupMasterResource.php b/app/Filament/Resources/WorkGroupMasterResource.php index 8b21ab2..dc9241a 100644 --- a/app/Filament/Resources/WorkGroupMasterResource.php +++ b/app/Filament/Resources/WorkGroupMasterResource.php @@ -5,6 +5,7 @@ namespace App\Filament\Resources; use App\Filament\Exports\WorkGroupMasterExporter; use App\Filament\Imports\WorkGroupMasterImporter; use App\Filament\Resources\WorkGroupMasterResource\Pages; +use App\Models\Line; use App\Models\Plant; use App\Models\WorkGroupMaster; use Filament\Facades\Filament; @@ -20,6 +21,11 @@ use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Validation\Rule; +use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\FileUpload; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\Filter; class WorkGroupMasterResource extends Resource { @@ -166,7 +172,144 @@ class WorkGroupMasterResource extends Resource ]) ->filters([ Tables\Filters\TrashedFilter::make(), + Filter::make('advanced_filters') + ->label('Advanced Filters') + ->form([ + Select::make('Plant') + ->label('Search by Plant Name') + ->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::orderBy('code')->pluck('name', 'id')->toArray(); + if ($userHas && strlen($userHas) > 0) { + return Plant::where('id', $userHas)->pluck('name', 'id')->toArray(); + } else { + return Plant::whereHas('workGroupMasters', function ($query) { + $query->whereNotNull('id'); + })->orderBy('code')->pluck('name', 'id')->toArray(); + } + }) + ->searchable() + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get): void { + $set('code', null); + $set('operator_id', null); + }), + Select::make('name') + ->label('Search by Work Group Center') + ->searchable() + ->options(function (callable $get) { + $plantId = $get('Plant'); + + if(!$plantId){ + return []; + } + else{ + return $plantId ? WorkGroupMaster::where('plant_id', $plantId)->distinct()->pluck('name', 'name')->toArray(): []; + } + }) + ->searchable() + ->reactive(), + TextInput::make('description') + ->label('Description') + ->reactive(), + TextInput::make('operation_number') + ->label('Operation Number') + ->reactive(), + 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['name']) && empty($data['description']) && empty($data['operation_number']) && empty($data['created_from']) && empty($data['created_to']) && empty($data['updated_from']) && empty($data['updated_to'])) { + // 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; + + if ($userHas && strlen($userHas) > 0) { + return $query->whereRaw('1 = 0'); + } + } + + if (! empty($data['name'])) { + $query->where('name', $data['name']); + } + + if (! empty($data['description'])) { + $query->where('description', $data['description']); + } + + if (! empty($data['operation_number'])) { + $query->where('operation_number', $data['operation_number']); + } + + if (! empty($data['created_from'])) { + $query->where('created_at', '>=', $data['created_from']); + } + + if (! empty($data['created_to'])) { + $query->where('created_at', '<=', $data['created_to']); + } + + }) + ->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.'; + } + } + + if (! empty($data['name'])) { + $indicators[] = 'Work Group Name: ' . $data['name']; + } + + if (! empty($data['description'])) { + $indicators[] = 'Description: ' . $data['description']; + } + + if (! empty($data['operation_number'])) { + $indicators[] = 'Operation Number: ' . $data['operation_number']; + } + + if (! empty($data['created_from'])) { + $indicators[] = 'From: '.$data['created_from']; + } + + if (! empty($data['created_to'])) { + $indicators[] = 'To: '.$data['created_to']; + } + + if (! empty($data['updated_from'])) { + $indicators[] = 'From: '.$data['updated_from']; + } + + if (! empty($data['updated_to'])) { + $indicators[] = 'To: '.$data['updated_to']; + } + + return $indicators; + }), ]) + ->filtersFormMaxHeight('280px') ->actions([ Tables\Actions\ViewAction::make(), Tables\Actions\EditAction::make(),