get(); return view('admin.ensembles.index', compact('events')); } public function store(Request $request) { if (! Auth::user()->is_admin) { abort(403); } request()->validate([ 'name' => 'required', 'code' => ['required', 'max:6'], 'event_id' => ['required', 'exists:events,id'], ]); Ensemble::create([ 'name' => request('name'), 'code' => request('code'), 'event_id' => request('event_id'), ]); return redirect()->route('admin.ensembles.index')->with('success', 'Ensemble created successfully'); } public function destroy(Request $request, Ensemble $ensemble) { if ($ensemble->seats->count() > 0) { return redirect()->route('admin.ensembles.index')->with('error', 'Ensemble has students seated and cannot be deleted'); } $ensemble->delete(); return redirect()->route('admin.ensembles.index')->with('success', 'Ensemble deleted successfully'); } public function updateEnsemble(Request $request, Ensemble $ensemble) { request()->validate([ 'name' => 'required', 'code' => 'required|max:6', ]); $ensemble->update([ 'name' => request('name'), 'code' => request('code'), ]); return redirect()->route('admin.ensembles.index')->with('success', 'Ensemble updated successfully'); } public function seatingLimits(Ensemble $ensemble) { $ensembles = Ensemble::with('event')->orderBy('event_id')->get(); if ($ensemble->exists()) { $ensemble->load('seatingLimits'); } return view('admin.ensembles.seatingLimits', compact('ensemble', 'ensembles')); } public function seatingLimitsSet(Request $request, Ensemble $ensemble) { $request->validate([ 'audition' => 'required', 'audition.*' => ['integer', 'min:0'], ]); foreach ($ensemble->auditions as $audition) { SeatingLimit::upsert( [ [ 'ensemble_id' => $ensemble->id, 'audition_id' => $audition->id, 'maximum_accepted' => $request->audition[$audition->id], ], ], uniqueBy: ['ensemble_id', 'audition_id'], update: ['maximum_accepted'] ); } return redirect()->route('admin.ensembles.seatingLimits')->with('success', 'Seating limits set for '.$ensemble->name); } public function updateEnsembleRank(Request $request) { if (! Auth::user()->is_admin) { abort(403); } $order = $request->input('order'); $eventId = $request->input('event_id'); foreach ($order as $item) { Ensemble::where('id', $item['id']) ->where('event_id', $eventId) ->update(['rank' => $item['rank']]); } return response()->json(['status' => 'success']); } }