'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; } }