122 lines
3.0 KiB
PHP
122 lines
3.0 KiB
PHP
<?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 = [
|
|
'amministratore_id',
|
|
'anno_gestione_id',
|
|
'stabile_id',
|
|
'condomino_id',
|
|
'rata_id',
|
|
'data_incasso',
|
|
'data_valuta',
|
|
'importo',
|
|
'modalita_pagamento',
|
|
'numero_assegno',
|
|
'banca_assegno',
|
|
'numero_bonifico',
|
|
'causale',
|
|
'note_bancarie',
|
|
'riconciliato',
|
|
'data_riconciliazione',
|
|
'note'
|
|
];
|
|
|
|
protected $casts = [
|
|
'data_incasso' => 'date',
|
|
'data_valuta' => 'date',
|
|
'data_riconciliazione' => 'date',
|
|
'importo' => '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;
|
|
}
|
|
}
|