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