label('Export CSV') ->icon('heroicon-m-arrow-down-tray') ->color('gray') ->action(fn () => app(CsvImportExport::class)->exportClients()), Actions\Action::make('import') ->label('Import CSV') ->icon('heroicon-m-arrow-up-tray') ->color('gray') ->modalHeading('Import clienți din CSV') ->modalDescription('CSV cu header: ' . implode(', ', CsvImportExport::CLIENT_COLUMNS) . '. Deduplicare după telefon.') ->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)->importClients($abs); @unlink($abs); Notification::make() ->title("Import: {$r['imported']} adăugați, {$r['skipped']} ignorați") ->body(empty($r['errors']) ? null : implode("\n", array_slice($r['errors'], 0, 8))) ->{empty($r['errors']) ? 'success' : 'warning'}() ->send(); }), Actions\CreateAction::make(), ]; } }