authorize('settings.manage'); $this->validate([ 'nome' => 'required|string|max:100', 'sorveglianteId' => 'required|integer|exists:proclamatori,id', 'email' => 'required|email|max:255', ], [ 'sorveglianteId.required' => 'Scegli il sorvegliante.', 'email.required' => "Serve l'email con cui il sorvegliante entrerà.", ]); try { [$gruppo, $password] = app(GruppiServizio::class)->crea( $this->nome, Proclamatore::findOrFail($this->sorveglianteId), trim($this->email), ); } catch (InvalidArgumentException $e) { $this->addError('sorveglianteId', $e->getMessage()); return; } $this->reset(['nome', 'sorveglianteId', 'email']); $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']) ->orderByRaw('sciolto_at IS NOT NULL') ->orderBy('nome') ->get(); // Possono diventare sorveglianti i proclamatori attivi senza gruppo e // senza già un'utenza. $candidati = Proclamatore::attivi() ->whereNull('gruppo_servizio_id') ->whereDoesntHave('utente') ->get(); return view('livewire.gruppi.gruppi-index', [ 'gruppi' => $gruppi, 'opzioniSorveglianti' => Proclamatore::opzioniScelta($candidati), 'creato' => $this->creatoId ? GruppoServizio::with('sorvegliante.utente')->find($this->creatoId) : null, ]); } }