++ gruppi: sorvegliante non piu' attivo scioglie il gruppo; dettagli del gruppo nella scheda e nel profilo
- Proclamatore::booted: reso non attivo, spostato nel cestino o anonimizzato, il sorvegliante scioglie il gruppo (territori non dati in reparto, membri liberi, utenza disattivata); il motivo va nel registro. L'elenco chiede conferma, la modifica avvisa sotto "Attivo". Un membro nel cestino esce dal gruppo. - Scheda del proclamatore: gruppo guidato con membri, pacchetto, da dare, assegnazioni dal gruppo, utenza e ultimo accesso; oppure gruppo di cui e' membro; gruppi sciolti guidati in passato. - Profilo del sorvegliante: il suo gruppo con gli stessi numeri. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -30,6 +30,46 @@ class Proclamatore extends Model
|
||||
return $this->hasOne(User::class, 'proclamatore_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Un sorvegliante che non è più attivo — reso non attivo, spostato nel
|
||||
* cestino o anonimizzato — non guida più il gruppo: il gruppo si scioglie
|
||||
* (GruppiServizio::sciogli), da qualunque pagina arrivi la modifica. Un
|
||||
* membro nel cestino lascia il gruppo.
|
||||
*/
|
||||
protected static function booted(): void
|
||||
{
|
||||
static::updated(function (self $proclamatore) {
|
||||
if ($proclamatore->wasChanged('attivo') && ! $proclamatore->attivo) {
|
||||
$proclamatore->lasciaIlGruppo('sorvegliante non più attivo');
|
||||
}
|
||||
});
|
||||
|
||||
static::deleted(function (self $proclamatore) {
|
||||
$proclamatore->lasciaIlGruppo('sorvegliante eliminato');
|
||||
});
|
||||
}
|
||||
|
||||
/** Il gruppo attivo di cui è sorvegliante, se c'è. */
|
||||
public function gruppoSorvegliato(): ?GruppoServizio
|
||||
{
|
||||
return GruppoServizio::attivi()->where('sorvegliante_id', $this->id)->first();
|
||||
}
|
||||
|
||||
private function lasciaIlGruppo(string $motivo): void
|
||||
{
|
||||
$gruppo = $this->gruppoSorvegliato();
|
||||
if ($gruppo) {
|
||||
app(\App\Services\GruppiServizio::class)->sciogli($gruppo, $motivo);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->trashed() && $this->gruppo_servizio_id) {
|
||||
static::withTrashed()->whereKey($this->id)->update(['gruppo_servizio_id' => null]);
|
||||
$this->gruppo_servizio_id = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
|
||||
Reference in New Issue
Block a user