authorizeWrite('gruppi'); $this->authorizeRead('individui'); $gruppo = Gruppo::findOrFail($gruppo); $data = $request->validate([ 'individuo_id' => 'required|exists:individui,id', 'ruolo_ids' => 'nullable|array', 'ruolo_ids.*' => 'exists:ruoli,id', 'data_adesione' => 'nullable|date', ]); if ($gruppo->individui()->where('individuo_id', $data['individuo_id'])->exists()) { if ($request->ajax() || $request->expectsJson()) { return response()->json(['error' => 'Questo individuo è già membro di questo gruppo.'], 422); } return redirect()->back()->with('error', 'Questo individuo è già membro di questo gruppo.'); } $gruppo->individui()->attach($data['individuo_id'], [ 'ruolo_ids' => !empty($data['ruolo_ids']) ? json_encode(array_values($data['ruolo_ids'])) : null, 'data_adesione' => $data['data_adesione'] ?? null, ]); if ($request->ajax() || $request->expectsJson()) { return response()->json(['success' => 'Membro aggiunto con successo.']); } return redirect()->back()->with('success', 'Membro aggiunto con successo.'); } public function update(Request $request, $gruppo, $individuo) { $this->authorizeWrite('gruppi'); $gruppo = Gruppo::findOrFail($gruppo); $data = $request->validate([ 'ruolo_ids' => 'nullable|array', 'ruolo_ids.*' => 'exists:ruoli,id', 'data_adesione' => 'nullable|date', ]); $gruppo->individui()->updateExistingPivot($individuo, [ 'ruolo_ids' => !empty($data['ruolo_ids']) ? json_encode(array_values($data['ruolo_ids'])) : null, 'data_adesione' => $data['data_adesione'] ?? null, ]); return redirect()->back()->with('success', 'Membro aggiornato con successo.'); } public function destroy($gruppo, $individuo) { $this->authorizeDelete('gruppi'); $gruppo = Gruppo::findOrFail($gruppo); $gruppo->individui()->detach($individuo); if (request()->ajax() || request()->expectsJson()) { return response()->json(['success' => 'Membro rimosso dal gruppo.']); } return redirect()->back()->with('success', 'Membro rimosso dal gruppo.'); } }