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