is_admin) { abort(403); } $filters = session('adminEntryFilters') ?? null; $minGrade = Audition::min('minimum_grade'); $maxGrade = Audition::max('maximum_grade'); $auditions = Audition::orderBy('score_order')->get(); $schools = School::orderBy('name')->get(); $entries = Entry::with(['student.school', 'audition']); $entries->orderBy('updated_at', 'DESC'); if ($filters) { if ($filters['id']) { $entries->where('id', $filters['id']); } if ($filters['audition']) { $entries->where('audition_id', $filters['audition']); } if ($filters['school']) { $entries->whereHas('student', function ($query) use ($filters) { $query->where('school_id', '=', $filters['school']); }); } if ($filters['grade']) { $entries->whereHas('student', function ($query) use ($filters) { $query->where('grade', $filters['grade']); }); } if ($filters['first_name']) { $entries->whereHas('student', function ($query) use ($filters) { $query->where('first_name', 'like', '%'.$filters['first_name'].'%'); }); } if ($filters['last_name']) { $entries->whereHas('student', function ($query) use ($filters) { $query->where('last_name', 'like', '%'.$filters['last_name'].'%'); }); } } $entries = $entries->paginate(10); return view('admin.entries.index', [ 'entries' => $entries, 'auditions' => $auditions, 'schools' => $schools, 'minGrade' => $minGrade, 'maxGrade' => $maxGrade, 'filters' => $filters, ]); } public function create() { $students = Student::with('school')->orderBy('last_name')->orderBy('first_name')->get(); $auditionsRaw = Audition::with('flags')->orderBy('score_order')->get(); $auditions = $auditionsRaw->reject(function ($audition) { return $audition->hasFlag('seats_published') || $audition->hasFlag('advancement_published'); }); return view('admin.entries.create', ['students' => $students, 'auditions' => $auditions]); } public function store(Request $request) { if (! Auth::user()->is_admin) { abort(403); } $validData = request()->validate([ 'student_id' => ['required', 'exists:students,id'], 'audition_id' => ['required', 'exists:auditions,id'], ]); $validData['for_seating'] = $request->get('for_seating') ? 1 : 0; $validData['for_advancement'] = $request->get('for_advancement') ? 1 : 0; Entry::create([ 'student_id' => $validData['student_id'], 'audition_id' => $validData['audition_id'], 'for_seating' => $validData['for_seating'], 'for_advancement' => $validData['for_advancement'], ]); return redirect('/admin/entries'); } public function edit(Entry $entry) { if ($entry->audition->hasFlag('seats_published')) { return to_route('admin.entries.index')->with('error', 'Entries in auditions with seats published cannot be modified'); } if ($entry->audition->hasFlag('advancement_published')) { return to_route('admin.entries.index')->with('error', 'Entries in auditions with advancement results published cannot be modified'); } $students = Student::with('school')->orderBy('last_name')->orderBy('first_name')->get(); $auditions = Audition::orderBy('score_order')->get(); $scores = $entry->scoreSheets()->get(); // return view('admin.entries.edit', ['entry' => $entry, 'students' => $students, 'auditions' => $auditions]); return view('admin.entries.edit', compact('entry', 'students', 'auditions', 'scores')); } public function update(Request $request, Entry $entry) { if ($entry->audition->hasFlag('seats_published')) { return to_route('admin.entries.index')->with('error', 'Entries in auditions with seats published cannot be modified'); } if ($entry->audition->hasFlag('advancement_published')) { return to_route('admin.entries.index')->with('error', 'Entries in auditions with advancement results published cannot be modified'); } $validData = request()->validate([ 'audition_id' => ['required', 'exists:auditions,id'], ]); $validData['for_seating'] = $request->get('for_seating') ? 1 : 0; $validData['for_advancement'] = $request->get('for_advancement') ? 1 : 0; if (! auditionSetting('advanceTo')) { $validData['for_seating'] = 1; } $entry->update([ 'audition_id' => $validData['audition_id'], 'for_seating' => $validData['for_seating'], 'for_advancement' => $validData['for_advancement'], ]); return to_route('admin.entries.index')->with('success', 'Entry updated successfully'); } public function destroy(Request $request, Entry $entry) { if ($entry->audition->hasFlag('seats_published')) { return to_route('admin.entries.index')->with('error', 'Entries in auditions with seats published cannot be deleted'); } if ($entry->audition->hasFlag('advancement_published')) { return to_route('admin.entries.index')->with('error', 'Entries in auditions with advancement results published cannot be deleted'); } if (Seat::where('entry_id', $entry->id)->exists()) { return redirect()->route('admin.entries.index')->with('error', 'Cannot delete an entry that is seated'); } $entry->delete(); return redirect()->route('admin.entries.index')->with('success', 'Entry Deleted'); } }