From e0937b21ddfefdc43670492ca2fd04e8a9342f29 Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Wed, 27 May 2026 16:48:10 +0530 Subject: [PATCH 1/2] Added vehicle entry importer and exporter --- app/Filament/Exports/VehicleEntryExporter.php | 65 ++++++++++++++ app/Filament/Imports/VehicleEntryImporter.php | 88 +++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 app/Filament/Exports/VehicleEntryExporter.php create mode 100644 app/Filament/Imports/VehicleEntryImporter.php diff --git a/app/Filament/Exports/VehicleEntryExporter.php b/app/Filament/Exports/VehicleEntryExporter.php new file mode 100644 index 0000000..516b48b --- /dev/null +++ b/app/Filament/Exports/VehicleEntryExporter.php @@ -0,0 +1,65 @@ +label('NO') + ->state(function ($record) use (&$rowNumber) { + // Increment and return the row number + return ++$rowNumber; + }), + ExportColumn::make('plant.name') + ->label('PLANT'), + ExportColumn::make('uuid') + ->label('UUID'), + ExportColumn::make('boom_opened') + ->label('BOOM OPENED'), + ExportColumn::make('vehicle_number') + ->label('VEHICLE NUMBER'), + ExportColumn::make('entry_time') + ->label('ENTRY TIME'), + ExportColumn::make('exit_time') + ->label('EXIT TIME'), + ExportColumn::make('duration') + ->label('DURATION'), + ExportColumn::make('type') + ->label('TYPE'), + ExportColumn::make('created_at') + ->label('CREATED AT'), + ExportColumn::make('updated_at') + ->label('UPDATED AT'), + ExportColumn::make('created_by') + ->label('CREATED BY'), + ExportColumn::make('updated_by') + ->label('UPDATED BY'), + ExportColumn::make('deleted_at') + ->label('DELETED AT') + ->enabledByDefault(false), + + ]; + } + + public static function getCompletedNotificationBody(Export $export): string + { + $body = 'Your vehicle entry 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/VehicleEntryImporter.php b/app/Filament/Imports/VehicleEntryImporter.php new file mode 100644 index 0000000..a2f1a57 --- /dev/null +++ b/app/Filament/Imports/VehicleEntryImporter.php @@ -0,0 +1,88 @@ +requiredMapping() + ->exampleHeader('PLANT CODE') + ->example('1000') + ->label('PLANT CODE') + ->relationship(resolveUsing: 'code') + ->rules(['required']), + ImportColumn::make('vehicle_number') + ->requiredMapping() + ->exampleHeader('VEHICLE NUMBER') + ->example('ABC123') + ->label('VEHICLE NUMBER') + ->rules(['required']), + ImportColumn::make('uuid') + ->label('UUID') + ->exampleHeader('UUID') + ->example('ABC123'), + ImportColumn::make('boom_opened') + ->exampleHeader('BOOM OPENED') + ->example('Auto') + ->label('BOOM OPENED'), + ImportColumn::make('entry_time') + ->requiredMapping() + ->exampleHeader('ENTRY TIME') + ->example('2023-01-01 09:00:00') + ->label('ENTRY TIME'), + ImportColumn::make('exit_time') + ->exampleHeader('EXIT TIME') + ->example('2023-01-01 17:00:00') + ->label('EXIT TIME'), + ImportColumn::make('duration') + ->exampleHeader('DURATION (HOURS)') + ->example('8') + ->label('DURATION (HOURS)'), + ImportColumn::make('type') + ->exampleHeader('TYPE') + ->example('TRUCK') + ->label('TYPE'), + ImportColumn::make('created_by') + ->exampleHeader('CREATED BY') + ->example('John Doe') + ->label('CREATED BY'), + ImportColumn::make('updated_by') + ->exampleHeader('UPDATED BY') + ->example('Jane Doe') + ->label('UPDATED BY'), + + + ]; + } + + public function resolveRecord(): ?VehicleEntry + { + // return VehicleEntry::firstOrNew([ + // // Update existing records, matching them by `$this->data['column_name']` + // 'email' => $this->data['email'], + // ]); + + return new VehicleEntry(); + } + + public static function getCompletedNotificationBody(Import $import): string + { + $body = 'Your vehicle entry 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; + } +} From e4a763db1cc2973fa2c92f392ef119cb462bad4a Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Wed, 27 May 2026 16:48:51 +0530 Subject: [PATCH 2/2] Added import and export in vehicle page --- app/Filament/Resources/VehicleEntryResource.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/Filament/Resources/VehicleEntryResource.php b/app/Filament/Resources/VehicleEntryResource.php index adba2af..15ceccc 100644 --- a/app/Filament/Resources/VehicleEntryResource.php +++ b/app/Filament/Resources/VehicleEntryResource.php @@ -2,6 +2,8 @@ namespace App\Filament\Resources; +use App\Filament\Exports\VehicleEntryExporter; +use App\Filament\Imports\VehicleEntryImporter; use App\Filament\Resources\VehicleEntryResource\Pages; use App\Models\Item; use App\Models\Plant; @@ -19,6 +21,8 @@ use Filament\Tables\Filters\Filter; use Filament\Forms\Components\DateTimePicker; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; class VehicleEntryResource extends Resource { @@ -280,6 +284,18 @@ class VehicleEntryResource extends Resource Tables\Actions\ForceDeleteBulkAction::make(), Tables\Actions\RestoreBulkAction::make(), ]), + ]) + ->headerActions([ + ImportAction::make() + ->importer(VehicleEntryImporter::class) + ->visible(function() { + return Filament::auth()->user()->can('view import vehicle entry'); + }), + ExportAction::make() + ->exporter(VehicleEntryExporter::class) + ->visible(function() { + return Filament::auth()->user()->can('view export vehicle entry'); + }), ]); }