netgescon-master/app/Models/Amministratore_new.php
Pikappa2 1b884feda5 v0.7 - UI Universale e Sistema Database Modernizzato
 Completato:
- Database modernizzato con chiavi id standard Laravel
- Relazioni corrette Amministratore→Stabili→Movimenti
- UI universale responsive con sidebar permission-based
- Codici alfanumerici 8 caratteri implementati
- Seeders con dati di test funzionanti
- Documentazione tecnica completa (INSTALL_LINUX, TECHNICAL_SPECS, UPDATE_SYSTEM)

🔧 Miglioramenti:
- Helper userSetting() funzionante
- Sistema multi-database preparato
- .gitignore aggiornato per sicurezza
- Migration cleanup e ottimizzazione

📚 Documentazione:
- Guida installazione Linux completa
- Specifiche tecniche dettagliate
- Sistema aggiornamenti progettato
- Progress log aggiornato
2025-07-07 17:24:30 +02:00

111 lines
2.5 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage;
class Amministratore extends Model
{
use HasFactory, SoftDeletes;
protected $table = 'amministratori';
protected $fillable = [
'codice_univoco',
'nome',
'cognome',
'user_id',
'denominazione_studio',
'partita_iva',
'codice_fiscale_studio',
'indirizzo_studio',
'cap_studio',
'citta_studio',
'provincia_studio',
'telefono_studio',
'email_studio',
'pec_studio',
];
protected $casts = [
'created_at' => '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';
}
}