authorize('settings.manage'); $this->validate([ 'nome' => 'required|string|max:100|unique:gruppi_servizio,nome', 'sorveglianteId' => 'required|integer|exists:proclamatori,id', ], [ 'nome.unique' => 'Esiste giĆ  un gruppo con questo nome.', 'sorveglianteId.required' => 'Scegli il sorvegliante.', ]); try { [$gruppo, $password] = app(GruppiServizio::class)->crea( $this->nome, Proclamatore::findOrFail($this->sorveglianteId), ); } catch (InvalidArgumentException $e) { $this->addError('sorveglianteId', $e->getMessage()); return; } $this->reset(['nome', 'sorveglianteId']); $this->creatoId = $gruppo->id; $this->passwordTemporanea = $password; } public function chiudiPassword(): void { $this->reset(['creatoId', 'passwordTemporanea']); } public function render() { $gruppi = GruppoServizio::with('sorvegliante') ->withCount(['membri', 'territori']) ->orderBy('nome') ->get(); // Possono diventare sorveglianti i proclamatori attivi senza gruppo e // senza un'utenza attiva (quella di un gruppo sciolto si riattiva). $candidati = Proclamatore::attivi() ->whereNull('gruppo_servizio_id') ->whereDoesntHave('utente', fn ($q) => $q->whereNull('disattivato_at')) ->get(); return view('livewire.gruppi.gruppi-index', [ 'gruppi' => $gruppi, 'opzioniSorveglianti' => Proclamatore::opzioniScelta($candidati), 'creato' => $this->creatoId ? GruppoServizio::with('sorvegliante.utente')->find($this->creatoId) : null, ]); } }