From 5a850a11a9bf8e57c2ef49829e9173a861831f22 Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Sat, 31 May 2025 17:42:13 +0530 Subject: [PATCH] Added import and export for machine --- app/Filament/Exports/MachineExporter.php | 48 +++++++++++++++++ app/Filament/Imports/MachineImporter.php | 60 ++++++++++++++++++++++ app/Filament/Resources/MachineResource.php | 17 ++++++ 3 files changed, 125 insertions(+) create mode 100644 app/Filament/Exports/MachineExporter.php create mode 100644 app/Filament/Imports/MachineImporter.php diff --git a/app/Filament/Exports/MachineExporter.php b/app/Filament/Exports/MachineExporter.php new file mode 100644 index 0000000..fd828e5 --- /dev/null +++ b/app/Filament/Exports/MachineExporter.php @@ -0,0 +1,48 @@ +label('No') + ->state(function ($record) use (&$rowNumber) { + // Increment and return the row number + return ++$rowNumber; + }), + ExportColumn::make('plant.name') + ->label('Plant'), + ExportColumn::make('line.name') + ->label('Line'), + ExportColumn::make('name') + ->label('Name'), + ExportColumn::make('created_at') + ->label('Created At'), + ExportColumn::make('updated_at') + ->label('Updated At'), + ExportColumn::make('deleted_at') + ->label('Deleted At'), + ]; + } + + public static function getCompletedNotificationBody(Export $export): string + { + $body = 'Your machine export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.'; + + if ($failedRowsCount = $export->getFailedRowsCount()) { + $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.'; + } + + return $body; + } +} diff --git a/app/Filament/Imports/MachineImporter.php b/app/Filament/Imports/MachineImporter.php new file mode 100644 index 0000000..acbaa72 --- /dev/null +++ b/app/Filament/Imports/MachineImporter.php @@ -0,0 +1,60 @@ +requiredMapping() + ->relationship(resolveUsing: 'name') + ->exampleHeader('Plant') + ->example(['Ransar Industries-I']) + ->label('Plant') + ->rules(['required']), + ImportColumn::make('line') + ->requiredMapping() + ->relationship(resolveUsing: 'name') + ->exampleHeader('Line') + ->example(['4 inch pump line']) + ->label('Line') + ->rules(['required']), + ImportColumn::make('name') + ->requiredMapping() + ->exampleHeader('Name') + ->example(['1600251']) + ->label('Line') + ->rules(['required']), + ]; + } + + public function resolveRecord(): ?Machine + { + // return Machine::firstOrNew([ + // // Update existing records, matching them by `$this->data['column_name']` + // 'email' => $this->data['email'], + // ]); + + return new Machine(); + } + + public static function getCompletedNotificationBody(Import $import): string + { + $body = 'Your machine import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.'; + + if ($failedRowsCount = $import->getFailedRowsCount()) { + $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.'; + } + + return $body; + } +} diff --git a/app/Filament/Resources/MachineResource.php b/app/Filament/Resources/MachineResource.php index 9cc113a..49a5a6c 100644 --- a/app/Filament/Resources/MachineResource.php +++ b/app/Filament/Resources/MachineResource.php @@ -2,10 +2,13 @@ namespace App\Filament\Resources; +use App\Filament\Exports\MachineExporter; +use App\Filament\Imports\MachineImporter; use App\Filament\Resources\MachineResource\Pages; use App\Filament\Resources\MachineResource\RelationManagers; use App\Models\Line; use App\Models\Machine; +use Filament\Facades\Filament; use Filament\Forms; use Filament\Forms\Form; use Filament\Forms\Get; @@ -14,6 +17,8 @@ use Filament\Tables; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; +use Filament\Tables\Actions\ImportAction; +use Filament\Tables\Actions\ExportAction; class MachineResource extends Resource { @@ -151,6 +156,18 @@ class MachineResource extends Resource Tables\Actions\ForceDeleteBulkAction::make(), Tables\Actions\RestoreBulkAction::make(), ]), + ]) + ->headerActions([ + ImportAction::make() + ->importer(MachineImporter::class) + ->visible(function() { + return Filament::auth()->user()->can('view import machine'); + }), + ExportAction::make() + ->exporter(MachineExporter::class) + ->visible(function() { + return Filament::auth()->user()->can('view export machine'); + }), ]); }