netgescon-day0/app/Models/StabileGescon.php

106 lines
2.4 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;
class StabileGescon extends Model
{
use HasFactory;
protected $table = 'stabili_gescon';
protected $fillable = [
'amministratore_id',
'anno_gestione_id',
'codice_stabile',
'denominazione',
'indirizzo',
'cap',
'comune_id',
'provincia',
'codice_fiscale',
'num_condomini',
'num_unit_immobiliari',
'superficie_totale',
'millesimi_totali',
'tipo_riscaldamento',
'ripartizione_spese',
'amministratore_nome',
'amministratore_cognome',
'telefono',
'email',
'pec',
'codice_univoco_sdi',
'note'
];
protected $casts = [
'num_condomini' => 'integer',
'num_unit_immobiliari' => 'integer',
'superficie_totale' => 'decimal:2',
'millesimi_totali' => 'decimal:3'
];
public function amministratore(): BelongsTo
{
return $this->belongsTo(Administrator::class);
}
public function annoGestione(): BelongsTo
{
return $this->belongsTo(AnnoGestione::class);
}
public function comune(): BelongsTo
{
return $this->belongsTo(Comune::class);
}
public function condomini(): HasMany
{
return $this->hasMany(CondominoStabile::class);
}
public function rateEmesse(): HasMany
{
return $this->hasMany(RataEmessa::class);
}
public function incassi(): HasMany
{
return $this->hasMany(IncassoPagamento::class);
}
public function fatture(): HasMany
{
return $this->hasMany(FatturaFornitore::class);
}
public function assemblee(): HasMany
{
return $this->hasMany(AssembleaVerbale::class);
}
public function scopeByComune($query, $comune)
{
return $query->whereHas('comune', function ($q) use ($comune) {
$q->where('comune', 'like', "%{$comune}%");
});
}
public function scopeByProvincia($query, $provincia)
{
return $query->where('provincia', $provincia);
}
public function getTotaleMilesimiAttribute()
{
return $this->condomini()->sum('millesimi_proprieta') +
$this->condomini()->sum('millesimi_riscaldamento');
}
}