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() { if (! Auth::user()->is_admin) { abort(403); } $students = Student::with('school')->orderBy('last_name')->orderBy('first_name')->get(); $auditions = Audition::orderBy('score_order')->get(); 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 (! Auth::user()->is_admin) { abort(403); } $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 (! 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->update([ '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 destroy(Request $request, Entry $entry) { if (! Auth::user()->is_admin) { abort(403); } 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'); } }