102 lines
2.5 KiB
PHP
Executable File
102 lines
2.5 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class DettaglioTabellaMillesimale extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
protected $table = 'dettagli_tabelle_millesimali';
|
|
|
|
protected $fillable = [
|
|
'tabella_millesimale_id',
|
|
'unita_immobiliare_id',
|
|
'millesimi',
|
|
'note',
|
|
];
|
|
|
|
protected $casts = [
|
|
'millesimi' => 'decimal:4',
|
|
'created_at' => 'datetime',
|
|
'updated_at' => 'datetime',
|
|
];
|
|
|
|
/**
|
|
* Relazione con Tabella Millesimale
|
|
*/
|
|
public function tabellaMillesimale()
|
|
{
|
|
return $this->belongsTo(TabellaMillesimale::class, 'tabella_millesimale_id');
|
|
}
|
|
|
|
/**
|
|
* Relazione con Unità Immobiliare
|
|
*/
|
|
public function unitaImmobiliare()
|
|
{
|
|
return $this->belongsTo(UnitaImmobiliare::class, 'unita_immobiliare_id', 'id');
|
|
}
|
|
|
|
/**
|
|
* Boot del modello per validazioni
|
|
*/
|
|
protected static function boot()
|
|
{
|
|
parent::boot();
|
|
|
|
static::saving(function ($model) {
|
|
// Validazione millesimi positivi
|
|
if ($model->millesimi < 0) {
|
|
throw new \InvalidArgumentException('I millesimi non possono essere negativi');
|
|
}
|
|
|
|
// Validazione millesimi ragionevoli (max 1000 per singola unità)
|
|
if ($model->millesimi > 1000) {
|
|
throw new \InvalidArgumentException('I millesimi per singola unità non possono superare 1000');
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Scope per una specifica tabella millesimale
|
|
*/
|
|
public function scopeByTabella($query, $tabellaId)
|
|
{
|
|
return $query->where('tabella_millesimale_id', $tabellaId);
|
|
}
|
|
|
|
/**
|
|
* Scope per una specifica unità immobiliare
|
|
*/
|
|
public function scopeByUnita($query, $unitaId)
|
|
{
|
|
return $query->where('unita_immobiliare_id', $unitaId);
|
|
}
|
|
|
|
/**
|
|
* Accessor per percentuale (millesimi/10)
|
|
*/
|
|
public function getPercentualeAttribute()
|
|
{
|
|
return $this->millesimi / 10;
|
|
}
|
|
|
|
/**
|
|
* Accessor per millesimi formattati
|
|
*/
|
|
public function getMillesimiFormattatiAttribute()
|
|
{
|
|
return number_format($this->millesimi, 4, ',', '.');
|
|
}
|
|
|
|
/**
|
|
* Metodo per calcolare la quota di una spesa
|
|
*/
|
|
public function calcolaQuotaSpesa($importoTotale)
|
|
{
|
|
return ($importoTotale * $this->millesimi) / 1000;
|
|
}
|
|
} |