✅ 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
111 lines
2.5 KiB
PHP
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';
|
|
}
|
|
}
|