'integer']; } public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logOnly(['nome', 'sorvegliante_id']) ->logOnlyDirty() ->dontSubmitEmptyLogs(); } public function sorvegliante() { return $this->belongsTo(Proclamatore::class, 'sorvegliante_id')->withTrashed(); } public function membri() { return $this->hasMany(Proclamatore::class, 'gruppo_servizio_id'); } /** Il pacchetto: i territori in carico al gruppo, dati o non ancora dati. */ public function territori() { return $this->hasMany(Territorio::class, 'gruppo_servizio_id'); } public function assegnazioni() { return $this->hasMany(Assegnazione::class, 'gruppo_servizio_id'); } /** * I numeri del gruppo per la scheda del proclamatore e il profilo del * sorvegliante: solo conteggi in SQL, nessun nome da decifrare. * * @return array{membri: int, pacchetto: int, da_dare: int, dati: int, assegnazioni: int} */ public function riepilogo(): array { $pacchetto = $this->territori()->count(); $dati = $this->territori()->whereHas('assegnazioni', fn ($q) => $q->whereNull('returned_at'))->count(); return [ 'membri' => $this->membri()->count(), 'pacchetto' => $pacchetto, 'da_dare' => $pacchetto - $dati, 'dati' => $dati, 'assegnazioni' => $this->assegnazioni()->count(), ]; } }