diff --git a/app/Filament/Resources/ImportTransitResource.php b/app/Filament/Resources/ImportTransitResource.php index 9917fec..9144aeb 100644 --- a/app/Filament/Resources/ImportTransitResource.php +++ b/app/Filament/Resources/ImportTransitResource.php @@ -24,6 +24,10 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; use Maatwebsite\Excel\Facades\Excel; use Filament\Tables\Actions\ImportAction; +use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\Select; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; // use PhpOffice\PhpSpreadsheet\IOFactory; class ImportTransitResource extends Resource @@ -402,7 +406,100 @@ class ImportTransitResource extends Resource ]) ->filters([ Tables\Filters\TrashedFilter::make(), + Filter::make('advanced_filters') + ->label('Advanced Filters') + ->form([ + TextInput::make('cri_rfq_number') + ->label('CRI RFQ Number') + ->reactive() + ->placeholder('Enter Rfq Number') + ->afterStateUpdated(function ($state, callable $set, callable $get): void { + $set('created_from', null); + $set('created_to', null); + }), + TextInput::make('status') + ->label('Status') + ->reactive() + ->placeholder('Enter Status') + ->afterStateUpdated(function ($state, callable $set, callable $get): void { + $set('created_from', null); + $set('created_to', null); + }), + Select::make('is_transit_identified') + ->label('Is Transit Identified') + ->reactive() + ->options([ + 0 => 0, + 1 => 1, + ]) + ->afterStateUpdated(function ($state, callable $set, callable $get): void { + $set('created_from', null); + $set('created_to', null); + }), + 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['cri_rfq_number']) && empty($data['status']) && ! isset($data['is_transit_identified']) && empty($data['created_from']) && empty($data['created_to'])) { + return $query; + } + + if (! empty($data['cri_rfq_number'])) { + $query->where('cri_rfq_number', 'like', '%'.$data['cri_rfq_number'].'%'); + } + + if (! empty($data['status'])) { + $query->where('status', 'like', '%'.$data['status'].'%'); + } + + if (isset($data['is_transit_identified'])) { + $query->where('is_transit_identified', $data['is_transit_identified']); + } + + 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['cri_rfq_number'])) { + $indicators[] = 'CRI Rfq Number: '.$data['cri_rfq_number']; + } + + if (! empty($data['status'])) { + $indicators[] = 'Status: '.$data['status']; + } + + if (isset($data['is_transit_identified'])) { + $indicators[] = 'Is Transit Identified: '.$data['is_transit_identified']; + } + + if (! empty($data['created_from'])) { + $indicators[] = 'From: '.$data['created_from']; + } + + if (! empty($data['created_to'])) { + $indicators[] = 'To: '.$data['created_to']; + } + + return $indicators; + }), ]) + ->filtersFormMaxHeight('280px') ->actions([ Tables\Actions\ViewAction::make(), Tables\Actions\EditAction::make(),