148 lines
3.9 KiB
PHP
148 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
|
|
class DestinatarioComunicazione extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
protected $table = 'destinatari_comunicazioni';
|
|
|
|
protected $fillable = [
|
|
'amministratore_id',
|
|
'assemblea_id',
|
|
'condomino_id',
|
|
'tipo_comunicazione',
|
|
'data_invio',
|
|
'modalita_invio',
|
|
'indirizzo_destinatario',
|
|
'email_destinatario',
|
|
'pec_destinatario',
|
|
'stato_consegna',
|
|
'data_consegna',
|
|
'ricevuta_ritorno',
|
|
'note'
|
|
];
|
|
|
|
protected $casts = [
|
|
'data_invio' => 'date',
|
|
'data_consegna' => 'date',
|
|
'ricevuta_ritorno' => 'boolean'
|
|
];
|
|
|
|
const TIPO_CONVOCAZIONE = 'convocazione';
|
|
const TIPO_VERBALE = 'verbale';
|
|
const TIPO_COMUNICAZIONE = 'comunicazione';
|
|
const TIPO_SOLLECITO = 'sollecito';
|
|
const TIPO_AVVISO = 'avviso';
|
|
|
|
const MODALITA_POSTA = 'posta';
|
|
const MODALITA_EMAIL = 'email';
|
|
const MODALITA_PEC = 'pec';
|
|
const MODALITA_RACCOMANDATA = 'raccomandata';
|
|
const MODALITA_MANO = 'mano';
|
|
|
|
const STATO_INVIATO = 'inviato';
|
|
const STATO_CONSEGNATO = 'consegnato';
|
|
const STATO_NON_CONSEGNATO = 'non_consegnato';
|
|
const STATO_RIFIUTATO = 'rifiutato';
|
|
|
|
public function amministratore(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Administrator::class);
|
|
}
|
|
|
|
public function assemblea(): BelongsTo
|
|
{
|
|
return $this->belongsTo(AssembleaVerbale::class);
|
|
}
|
|
|
|
public function condomino(): BelongsTo
|
|
{
|
|
return $this->belongsTo(CondominoStabile::class);
|
|
}
|
|
|
|
public function scopeByTipo($query, $tipo)
|
|
{
|
|
return $query->where('tipo_comunicazione', $tipo);
|
|
}
|
|
|
|
public function scopeByModalita($query, $modalita)
|
|
{
|
|
return $query->where('modalita_invio', $modalita);
|
|
}
|
|
|
|
public function scopeByStato($query, $stato)
|
|
{
|
|
return $query->where('stato_consegna', $stato);
|
|
}
|
|
|
|
public function scopeConsegnate($query)
|
|
{
|
|
return $query->where('stato_consegna', self::STATO_CONSEGNATO);
|
|
}
|
|
|
|
public function scopeNonConsegnate($query)
|
|
{
|
|
return $query->whereIn('stato_consegna', [
|
|
self::STATO_NON_CONSEGNATO,
|
|
self::STATO_RIFIUTATO
|
|
]);
|
|
}
|
|
|
|
public function scopeByPeriodo($query, $dataInizio, $dataFine)
|
|
{
|
|
return $query->whereBetween('data_invio', [$dataInizio, $dataFine]);
|
|
}
|
|
|
|
public function getGiorniConsegnaAttribute()
|
|
{
|
|
if (!$this->data_consegna || !$this->data_invio) {
|
|
return null;
|
|
}
|
|
return $this->data_invio->diffInDays($this->data_consegna);
|
|
}
|
|
|
|
public function getTipoComunicazioneLabelAttribute()
|
|
{
|
|
$labels = [
|
|
self::TIPO_CONVOCAZIONE => 'Convocazione',
|
|
self::TIPO_VERBALE => 'Verbale',
|
|
self::TIPO_COMUNICAZIONE => 'Comunicazione',
|
|
self::TIPO_SOLLECITO => 'Sollecito',
|
|
self::TIPO_AVVISO => 'Avviso'
|
|
];
|
|
|
|
return $labels[$this->tipo_comunicazione] ?? $this->tipo_comunicazione;
|
|
}
|
|
|
|
public function getModalitaInvioLabelAttribute()
|
|
{
|
|
$labels = [
|
|
self::MODALITA_POSTA => 'Posta Ordinaria',
|
|
self::MODALITA_EMAIL => 'Email',
|
|
self::MODALITA_PEC => 'PEC',
|
|
self::MODALITA_RACCOMANDATA => 'Raccomandata',
|
|
self::MODALITA_MANO => 'Consegna a Mano'
|
|
];
|
|
|
|
return $labels[$this->modalita_invio] ?? $this->modalita_invio;
|
|
}
|
|
|
|
public function getStatoConsegnaLabelAttribute()
|
|
{
|
|
$labels = [
|
|
self::STATO_INVIATO => 'Inviato',
|
|
self::STATO_CONSEGNATO => 'Consegnato',
|
|
self::STATO_NON_CONSEGNATO => 'Non Consegnato',
|
|
self::STATO_RIFIUTATO => 'Rifiutato'
|
|
];
|
|
|
|
return $labels[$this->stato_consegna] ?? $this->stato_consegna;
|
|
}
|
|
}
|