netgescon-day0/app/Models/CondominoStabile.php

136 lines
3.4 KiB
PHP
Executable File

<?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 CondominoStabile extends Model
{
use HasFactory;
protected $table = 'condomini_stabile';
protected $fillable = [
'amministratore_id',
'stabile_id',
'codice_condomino',
'cognome',
'nome',
'denominazione',
'codice_fiscale',
'partita_iva',
'indirizzo',
'cap',
'comune_id',
'provincia',
'telefono',
'cellulare',
'email',
'pec',
'scala',
'piano',
'interno',
'tipo_unita',
'superficie',
'millesimi_proprieta',
'millesimi_riscaldamento',
'quota_spese_ordinarie',
'quota_spese_straordinarie',
'quota_riscaldamento',
'note',
'attivo'
];
protected $casts = [
'superficie' => 'decimal:2',
'millesimi_proprieta' => 'decimal:3',
'millesimi_riscaldamento' => 'decimal:3',
'quota_spese_ordinarie' => 'decimal:2',
'quota_spese_straordinarie' => 'decimal:2',
'quota_riscaldamento' => 'decimal:2',
'attivo' => 'boolean'
];
public function amministratore(): BelongsTo
{
return $this->belongsTo(Administrator::class);
}
public function stabile(): BelongsTo
{
return $this->belongsTo(StabileGescon::class);
}
public function comune(): BelongsTo
{
return $this->belongsTo(Comune::class);
}
public function rateEmesse(): HasMany
{
return $this->hasMany(RataEmessa::class, 'condomino_id');
}
public function incassi(): HasMany
{
return $this->hasMany(IncassoPagamento::class, 'condomino_id');
}
public function destinatarioComunicazioni(): HasMany
{
return $this->hasMany(DestinatarioComunicazione::class, 'condomino_id');
}
public function scopeAttivi($query)
{
return $query->where('attivo', true);
}
public function scopeByStabile($query, $stabileId)
{
return $query->where('stabile_id', $stabileId);
}
public function scopeByScala($query, $scala)
{
return $query->where('scala', $scala);
}
public function scopeByPiano($query, $piano)
{
return $query->where('piano', $piano);
}
public function scopeSearch($query, $search)
{
return $query->where(function ($q) use ($search) {
$q->where('cognome', 'like', "%{$search}%")
->orWhere('nome', 'like', "%{$search}%")
->orWhere('denominazione', 'like', "%{$search}%")
->orWhere('codice_fiscale', 'like', "%{$search}%")
->orWhere('codice_condomino', 'like', "%{$search}%");
});
}
public function getNomeCompletoAttribute()
{
if ($this->denominazione) {
return $this->denominazione;
}
return trim($this->cognome . ' ' . $this->nome);
}
public function getIndirizzoCompletoAttribute()
{
return $this->scala . '/' . $this->piano . '/' . $this->interno;
}
public function getTotaleMillesimiAttribute()
{
return $this->millesimi_proprieta + $this->millesimi_riscaldamento;
}
}