info('๐Ÿ—๏ธ Creazione nuovo amministratore...'); // Raccolta dati $nome = $this->argument('nome'); $cognome = $this->argument('cognome'); $email = $this->argument('email'); $password = $this->option('password') ?: $this->generatePassword(); // Verifica email univoca if (User::where('email', $email)->exists()) { $this->error("โŒ Email {$email} giร  esistente!"); return 1; } try { // 1. Crea utente $this->info("๐Ÿ‘ค Creazione utente {$nome} {$cognome}..."); $user = User::create([ 'name' => "{$nome} {$cognome}", 'email' => $email, 'password' => Hash::make($password), 'email_verified_at' => now(), ]); // 2. Assegna ruolo amministratore $user->assignRole('amministratore'); $this->info("โœ… Ruolo 'amministratore' assegnato"); // 3. Crea record amministratore $this->info("๐Ÿข Creazione record amministratore..."); $amministratore = Amministratore::create([ 'user_id' => $user->id, 'nome' => $nome, 'cognome' => $cognome, 'denominazione_studio' => $this->option('studio') ?: "Studio {$cognome}", 'partita_iva' => $this->option('piva') ?: null, 'codice_fiscale_studio' => $this->option('cf') ?: null, 'telefono_studio' => $this->option('telefono') ?: null, 'indirizzo_studio' => $this->option('indirizzo') ?: null, 'cap_studio' => $this->option('cap') ?: null, 'citta_studio' => $this->option('citta') ?: null, 'provincia_studio' => $this->option('provincia') ?: null, 'email_studio' => $email, 'pec_studio' => $this->option('pec') ?: null, ]); // 4. Crea struttura cartelle $this->info("๐Ÿ“ Creazione cartelle dati..."); $this->createAdminFolders($amministratore); // 5. Crea stabile di esempio (opzionale) if ($this->confirm('Vuoi creare uno stabile di esempio?', true)) { $this->createExampleStabile($amministratore); } // 6. Sistema multi-database (se richiesto) if ($this->option('multi-db')) { $this->info("๐Ÿ—„๏ธ Configurazione database dedicato..."); $this->setupDedicatedDatabase($amministratore); } // Output finale $this->info(''); $this->info('๐ŸŽ‰ Amministratore creato con successo!'); $this->table(['Campo', 'Valore'], [ ['Nome Completo', $amministratore->nome_completo], ['Email', $user->email], ['Password', $password], ['Codice Univoco', $amministratore->codice_univoco], ['Studio', $amministratore->denominazione_studio], ['Cartelle', "storage/app/amministratori/{$amministratore->codice_univoco}/"], ['Multi-DB', $this->option('multi-db') ? 'Abilitato' : 'Condiviso'], ]); $this->warn('โš ๏ธ IMPORTANTE: Salva la password generata!'); return 0; } catch (\Exception $e) { $this->error("โŒ Errore durante la creazione: " . $e->getMessage()); return 1; } } /** * Genera password sicura */ private function generatePassword(): string { return 'Admin' . rand(1000, 9999) . '!'; } /** * Crea struttura cartelle per amministratore */ private function createAdminFolders(Amministratore $amministratore): void { $basePath = "amministratori/{$amministratore->codice_univoco}"; $folders = [ 'documenti/allegati', 'documenti/contratti', 'documenti/assemblee', 'documenti/preventivi', 'backup/database', 'backup/files', 'temp/upload', 'temp/processing', 'logs', 'exports', ]; foreach ($folders as $folder) { Storage::disk('local')->makeDirectory("{$basePath}/{$folder}"); $this->line(" ๐Ÿ“‚ {$folder}"); } // Crea file README $readme = "# Cartella Amministratore: {$amministratore->nome_completo}\n\n"; $readme .= "**Codice**: {$amministratore->codice_univoco}\n"; $readme .= "**Creato**: " . now()->format('d/m/Y H:i') . "\n\n"; $readme .= "## Struttura Cartelle\n\n"; $readme .= "- `documenti/` - Documenti dell'amministratore\n"; $readme .= "- `backup/` - Backup automatici\n"; $readme .= "- `temp/` - File temporanei\n"; $readme .= "- `logs/` - Log specifici\n"; $readme .= "- `exports/` - Esportazioni dati\n"; Storage::disk('local')->put("{$basePath}/README.md", $readme); } /** * Crea stabile di esempio */ private function createExampleStabile(Amministratore $amministratore): void { $denominazione = $this->ask('Nome del condominio', "Condominio {$amministratore->cognome}"); $stabile = Stabile::create([ 'amministratore_id' => $amministratore->id, 'denominazione' => $denominazione, 'indirizzo' => $this->ask('Indirizzo', 'Via Roma 1'), 'cap' => $this->ask('CAP', '00100'), 'citta' => $this->ask('Cittร ', 'Roma'), 'provincia' => $this->ask('Provincia', 'RM'), 'codice_fiscale' => strtoupper(substr($denominazione, 0, 3)) . rand(100000, 999999), 'stato' => 'attivo', ]); $this->info("๐Ÿข Stabile creato: {$stabile->denominazione}"); } /** * Configura database dedicato (placeholder) */ private function setupDedicatedDatabase(Amministratore $amministratore): void { // TODO: Implementare logica multi-database $dbName = "netgescon_" . strtolower($amministratore->codice_univoco); $this->line(" ๐Ÿ—„๏ธ Database: {$dbName}"); $this->warn(" โš ๏ธ Implementazione multi-DB in development"); } }