*/ protected $fillable = [ 'user_id', 'nome', 'cognome', 'denominazione_studio', 'partita_iva', 'codice_fiscale_studio', 'indirizzo_studio', 'cap_studio', 'citta_studio', 'provincia_studio', 'telefono_studio', 'email_studio', 'pec_studio', 'codice_univoco', ]; /** * Get the user associated with the Amministratore. */ public function user(): BelongsTo { return $this->belongsTo(User::class, 'user_id'); } /** * Get the condomini for the Amministratore. */ public function stabili(): HasMany { return $this->hasMany(Stabile::class, 'amministratore_id', 'id_amministratore'); } /** * Get the fornitori for the Amministratore. */ public function fornitori(): HasMany { return $this->hasMany(Fornitore::class, 'amministratore_id', 'id_amministratore'); } protected static function boot() { parent::boot(); static::creating(function ($amministratore) { if (empty($amministratore->codice_univoco)) { do { $code = Str::upper(Str::random(8)); } while (self::where('codice_univoco', $code)->exists()); $amministratore->codice_univoco = $code; } }); // Auto-crea cartelle dopo la creazione static::created(function ($amministratore) { $amministratore->createFolderStructure(); }); } /** * Crea la struttura di cartelle per l'amministratore */ public function createFolderStructure(): void { $basePath = "amministratori/{$this->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}"); } // Crea file README informativo $readme = "# Cartella Amministratore: {$this->nome_completo}\n\n"; $readme .= "**Codice**: {$this->codice_univoco}\n"; $readme .= "**Creato**: " . $this->created_at->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); } /** * Ottieni il path della cartella dell'amministratore */ public function getFolderPath(): string { return "amministratori/{$this->codice_univoco}"; } /** * Genera codice univoco alfanumerico 8 caratteri */ public function generateCodiceUnivoco(): string { do { $codice = 'ADM' . strtoupper(substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 5)); } while (self::where('codice_univoco', $codice)->exists()); return $codice; } }