Refactor plant selection options across multiple resources to display plants based on the authenticated user's plant ID, ensuring users only see relevant options.

This commit is contained in:
dhanabalan
2025-09-29 16:35:55 +05:30
parent a4afe2f3c7
commit a9803f927f
34 changed files with 208 additions and 32 deletions

View File

@@ -3,6 +3,7 @@
namespace App\Filament\Resources;
use AlperenErsoy\FilamentExport\Actions\FilamentExportBulkAction;
use App\Exports\TestingPanelReadingExport;
use App\Filament\Exports\TestingPanelReadingExporter;
use App\Filament\Imports\TestingPanelReadingImporter;
use App\Filament\Resources\TestingPanelReadingResource\Pages;
@@ -14,6 +15,7 @@ use App\Models\MotorTestingMaster;
use App\Models\Plant;
use App\Models\TestingPanelReading;
use Barryvdh\DomPDF\Facade\Pdf;
// use Barryvdh\Reflection\DocBlock\Type\Collection;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\DateTimePicker;
@@ -21,6 +23,7 @@ use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Notifications\Collection as NotificationsCollection;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Actions\BulkAction;
@@ -30,6 +33,9 @@ use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Filters\Filter;
use Maatwebsite\Excel\Facades\Excel;
use Filament\Tables\Actions\Action;
use Illuminate\Support\Collection;
class TestingPanelReadingResource extends Resource
{
@@ -50,7 +56,10 @@ class TestingPanelReadingResource extends Resource
->relationship('plant', 'name')
->required()
->reactive()
// When plant changes, reset the dependent fields
->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();
})
->default(function () {
return optional(TestingPanelReading::latest()->first())->plant_id;
})
@@ -1084,6 +1093,25 @@ class TestingPanelReadingResource extends Resource
})
->icon('heroicon-o-document-arrow-down'),
]),
BulkAction::make('export')
->label('Export Selected')
->action(function (Collection $records) {
// $records contains only selected rows
$ids = $records->pluck('No.')->toArray();
return Excel::download(
new TestingPanelReadingExport($ids),
'selected_testing_panel_readings.csv'
);
}),
// ExportAction::make()
// ->label('Export Readings')
// ->queued() // ✅ runs in queue
// ->exports([
// TestingPanelReadingExport::class,
// ])
// ->fileName('testing_panel_readings.csv')
// ->format(Excel::CSV), // ✅ faster than Excel for 45k+ rows
])
->headerActions([
@@ -1097,6 +1125,11 @@ class TestingPanelReadingResource extends Resource
->visible(function() {
return Filament::auth()->user()->can('view export testing panel reading');
}),
// Action::make('export')
// ->label('Export Readings')
// ->action(function () {
// return Excel::download(new TestingPanelReadingExport, 'testing_panel_readings.csv');
// }),
]);
}