label('Export CSV') ->icon('heroicon-m-arrow-down-tray') ->color('gray') ->action(fn () => app(CsvImportExport::class)->exportVehicles()), Actions\Action::make('import') ->label('Import CSV') ->icon('heroicon-m-arrow-up-tray') ->color('gray') ->modalHeading('Import mașini din CSV') ->modalDescription('CSV cu header: ' . implode(', ', CsvImportExport::VEHICLE_COLUMNS) . '. Coloana client_phone trebuie să existe deja la clienți.') ->schema([ Forms\Components\FileUpload::make('file') ->required() ->disk('local') ->directory('imports') ->acceptedFileTypes(['text/csv', 'text/plain', 'application/csv']) ->maxSize(5120), ]) ->action(function (array $data) { $abs = \Illuminate\Support\Facades\Storage::disk('local')->path($data['file']); $r = app(CsvImportExport::class)->importVehicles($abs); @unlink($abs); Notification::make() ->title("Import: {$r['imported']} adăugate, {$r['skipped']} ignorate") ->body(empty($r['errors']) ? null : implode("\n", array_slice($r['errors'], 0, 8))) ->{empty($r['errors']) ? 'success' : 'warning'}() ->send(); }), Actions\CreateAction::make(), ]; } }