'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; /** * Boot del modello */ protected static function boot() { parent::boot(); static::creating(function ($amministratore) { if (empty($amministratore->codice_univoco)) { $amministratore->codice_univoco = static::generateCodiceAmministratore(); } }); } /** * Genera un codice univoco per l'amministratore */ private static function generateCodiceAmministratore(): string { do { $codice = 'ADM' . strtoupper(Str::random(5)); } while (static::where('codice_univoco', $codice)->exists()); return $codice; } /** * Accessor per compatibilità con codice */ public function getCodiceAttribute() { return $this->codice_univoco; } /** * Mutator per compatibilità con codice */ public function setCodiceAttribute($value) { $this->attributes['codice_univoco'] = $value; } /** * Relazione con l'utente associato */ public function user(): BelongsTo { return $this->belongsTo(User::class); } /** * Relazione con gli stabili gestiti */ public function stabili(): HasMany { return $this->hasMany(Stabile::class, 'amministratore_id'); } /** * Nome completo dell'amministratore */ public function getNomeCompletoAttribute(): string { if ($this->nome && $this->cognome) { return $this->nome . ' ' . $this->cognome; } return $this->denominazione_studio ?: 'N/A'; } }