diff --git a/app/Http/Controllers/Admin/ScoringGuideController.php b/app/Http/Controllers/Admin/ScoringGuideController.php index deb991f..e07b1f7 100644 --- a/app/Http/Controllers/Admin/ScoringGuideController.php +++ b/app/Http/Controllers/Admin/ScoringGuideController.php @@ -209,5 +209,3 @@ class ScoringGuideController extends Controller } } - -// TODO need to be able to delete a scoring guide diff --git a/app/Http/Controllers/Admin/StudentController.php b/app/Http/Controllers/Admin/StudentController.php index 5f8983e..6c775c9 100644 --- a/app/Http/Controllers/Admin/StudentController.php +++ b/app/Http/Controllers/Admin/StudentController.php @@ -6,9 +6,9 @@ use App\Http\Controllers\Controller; use App\Models\Audition; use App\Models\School; use App\Models\Student; -use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; + use function abort; use function view; @@ -16,35 +16,43 @@ class StudentController extends Controller { public function index() { - if (! Auth::user()->is_admin) abort(403); - $students = Student::with(['school','entries'])->orderBy('last_name')->orderBy('first_name')->paginate(15); + if (! Auth::user()->is_admin) { + abort(403); + } + $students = Student::with(['school', 'entries'])->orderBy('last_name')->orderBy('first_name')->paginate(15); + return view('admin.students.index', ['students' => $students]); } public function create() { - if (! Auth::user()->is_admin) abort(403); + if (! Auth::user()->is_admin) { + abort(403); + } $minGrade = Audition::min('minimum_grade'); $maxGrade = Audition::max('maximum_grade'); $schools = School::orderBy('name')->get(); - return view('admin.students.create',['schools' => $schools, 'minGrade' => $minGrade, 'maxGrade' => $maxGrade]); + + return view('admin.students.create', ['schools' => $schools, 'minGrade' => $minGrade, 'maxGrade' => $maxGrade]); } public function store() { - if (! Auth::user()->is_admin) abort(403); + if (! Auth::user()->is_admin) { + abort(403); + } request()->validate([ 'first_name' => ['required'], 'last_name' => ['required'], 'grade' => ['required', 'integer'], - 'school_id' => ['required', 'exists:schools,id'] + 'school_id' => ['required', 'exists:schools,id'], ]); $student = Student::create([ 'first_name' => request('first_name'), 'last_name' => request('last_name'), 'grade' => request('grade'), - 'school_id' => request('school_id') + 'school_id' => request('school_id'), ]); return redirect('/admin/students'); @@ -52,32 +60,42 @@ class StudentController extends Controller public function edit(Student $student) { - if (! Auth::user()->is_admin) abort(403); + if (! Auth::user()->is_admin) { + abort(403); + } $minGrade = Audition::min('minimum_grade'); $maxGrade = Audition::max('maximum_grade'); $schools = School::orderBy('name')->get(); + return view('admin.students.edit', ['student' => $student, 'schools' => $schools, 'minGrade' => $minGrade, 'maxGrade' => $maxGrade]); } public function update(Request $request, Student $student) { - if (! Auth::user()->is_admin) abort(403); + if (! Auth::user()->is_admin) { + abort(403); + } request()->validate([ 'first_name' => ['required'], 'last_name' => ['required'], 'grade' => ['required', 'integer'], - 'school_id' => ['required', 'exists:schools,id'] + 'school_id' => ['required', 'exists:schools,id'], ]); + foreach ($student->entries as $entry) { + if ($entry->audition->minimum_grade > request('grade') || $entry->audition->maximum_grade < request('grade')) { + return redirect('/admin/students/'.$student->id.'/edit')->with('error', 'This student is entered in an audition that is not available to their new grade.'); + } + } + $student->update([ 'first_name' => request('first_name'), 'last_name' => request('last_name'), 'grade' => request('grade'), - 'school_id' => request('school_id') + 'school_id' => request('school_id'), ]); return redirect('/admin/students'); -// TODO if a students grade is changed, we need to be sure they are still eligible for the auditions in which they are entered. } } diff --git a/app/Http/Controllers/Tabulation/TabulationController.php b/app/Http/Controllers/Tabulation/TabulationController.php index a107fb5..dbeddc8 100644 --- a/app/Http/Controllers/Tabulation/TabulationController.php +++ b/app/Http/Controllers/Tabulation/TabulationController.php @@ -69,7 +69,6 @@ class TabulationController extends Controller return $entry->scoring_complete; }); $ensembleLimits = $this->seatingService->getLimitForAudition($audition->id); - // TODO die gracefully if no ensemble limits are set for this audition $auditionComplete = $scoringComplete && $doublerComplete; $seatableEntries = $this->seatingService->getSeatableEntries($audition->id); diff --git a/app/Services/SeatingService.php b/app/Services/SeatingService.php index 26fdd38..daf8285 100644 --- a/app/Services/SeatingService.php +++ b/app/Services/SeatingService.php @@ -37,6 +37,9 @@ class SeatingService public function getLimitForAudition($auditionId) { + if (! $this->getAcceptanceLimits()->has($auditionId)) { + return new \Illuminate\Database\Eloquent\Collection(); + } return $this->getAcceptanceLimits()[$auditionId]; }