netgescon-day0/app/Models/IncassoPagamento.php

120 lines
3.0 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;
class IncassoPagamento extends Model
{
use HasFactory;
protected $table = 'incassi_pagamenti';
protected $fillable = [
'stabile_id',
'anno_gestione_id',
'condomino_id',
'cod_condomino',
'n_riferimento',
'data_pagamento',
'importo_pagato',
'importo_pagato_euro',
'n_ricevuta',
'tipo_gestione',
'mese_riferimento',
'descrizione',
'cod_cassa',
'riconciliato',
'rata_id',
'movimento_banca_id',
];
protected $casts = [
'data_pagamento' => 'date',
'importo_pagato' => 'decimal:2',
'importo_pagato_euro' => 'decimal:2',
'riconciliato' => 'boolean',
];
const MODALITA_CONTANTI = 'contanti';
const MODALITA_ASSEGNO = 'assegno';
const MODALITA_BONIFICO = 'bonifico';
const MODALITA_BANCOMAT = 'bancomat';
const MODALITA_CARTA_CREDITO = 'carta_credito';
public function amministratore(): BelongsTo
{
return $this->belongsTo(Administrator::class);
}
public function annoGestione(): BelongsTo
{
return $this->belongsTo(AnnoGestione::class);
}
public function stabile(): BelongsTo
{
return $this->belongsTo(StabileGescon::class);
}
public function condomino(): BelongsTo
{
return $this->belongsTo(CondominoStabile::class);
}
public function rata(): BelongsTo
{
return $this->belongsTo(RataEmessa::class);
}
public function scopeRiconciliati($query)
{
return $query->where('riconciliato', true);
}
public function scopeDaRiconciliare($query)
{
return $query->where('riconciliato', false);
}
public function scopeByModalita($query, $modalita)
{
return $query->where('modalita_pagamento', $modalita);
}
public function scopeByPeriodo($query, $dataInizio, $dataFine)
{
return $query->whereBetween('data_incasso', [$dataInizio, $dataFine]);
}
public function scopeByAnno($query, $anno)
{
return $query->whereHas('annoGestione', function ($q) use ($anno) {
$q->where('anno_ordinario', $anno);
});
}
public function getGiorniValutaAttribute()
{
if (!$this->data_valuta || !$this->data_incasso) {
return 0;
}
return $this->data_incasso->diffInDays($this->data_valuta);
}
public function getModalitaPagamentoLabelAttribute()
{
$labels = [
self::MODALITA_CONTANTI => 'Contanti',
self::MODALITA_ASSEGNO => 'Assegno',
self::MODALITA_BONIFICO => 'Bonifico',
self::MODALITA_BANCOMAT => 'Bancomat',
self::MODALITA_CARTA_CREDITO => 'Carta di Credito'
];
return $labels[$this->modalita_pagamento] ?? $this->modalita_pagamento;
}
}