From 16e72ff06c7da6cba8e7e71b72246f1296f4c5da Mon Sep 17 00:00:00 2001 From: Matt Young Date: Fri, 14 Feb 2025 11:52:05 -0600 Subject: [PATCH] Nomination admin page working for MEOBDA rules. --- .../MeobdaNominationAdminController.php | 94 +++++++++++++++++++ .../NominationEnsembleServiceProvider.php | 10 +- database/factories/StudentFactory.php | 7 +- .../meobda/admin/nominations.blade.php | 74 +++++++++++++++ 4 files changed, 178 insertions(+), 7 deletions(-) create mode 100644 app/Http/Controllers/NominationEnsembles/MeobdaNominationAdminController.php create mode 100644 resources/views/nomination_ensembles/meobda/admin/nominations.blade.php diff --git a/app/Http/Controllers/NominationEnsembles/MeobdaNominationAdminController.php b/app/Http/Controllers/NominationEnsembles/MeobdaNominationAdminController.php new file mode 100644 index 0000000..5718fb8 --- /dev/null +++ b/app/Http/Controllers/NominationEnsembles/MeobdaNominationAdminController.php @@ -0,0 +1,94 @@ +validate([ + 'school' => 'nullable|exists:schools,id', + 'ensemble' => 'nullable|exists:nomination_ensembles,id', + 'section' => 'nullable|string', + 'newFilterParameters' => 'string', + ]); + session()->put('nominationAdminFilters', $newFilterData); + $filterData = $newFilterData; + } elseif (session()->has('nominationAdminFilters')) { + $filterData = session()->get('nominationAdminFilters'); + } else { + $filterData = []; + } + + dump($filterData); + + // Populate variables to complete the filter form + $schools = School::orderBy('name')->get(); + $ensembles = NominationEnsemble::all(); + + $nominations = NominationEnsembleEntry::with('student.school'); + if ($filterData['school'] ?? false) { + $nominations = $nominations->whereHas('student', function ($query) use ($filterData) { + $query->where('school_id', $filterData['school']); + }); + } + if ($filterData['ensemble'] ?? false) { + $nominations = $nominations->where('nomination_ensemble_id', $filterData['ensemble']); + } + if ($filterData['section'] ?? false) { + $sectionFilter = explode('---', $filterData['section']); + $nominations = $nominations->where('nomination_ensemble_id', $sectionFilter[0]); + if ($sectionFilter[1] != 'all') { + $nominations = $nominations->where('data->instrument', $sectionFilter[1]); + } + } + + $nominations = $nominations->paginate(50); + $sections = []; + foreach ($ensembles as $ensemble) { + $sections[$ensemble->id.'---'.'all'] = $ensemble->name.' - ALL'; + foreach ($ensemble->data['instruments'] as $instrument) { + $sections[$ensemble->id.'---'.$instrument['name']] = $ensemble->name.' - '.$instrument['name']; + } + } + + return view('nomination_ensembles.meobda.admin.nominations', + compact('nominations', 'schools', 'filterData', 'ensembles', 'sections')); + } + + public function show(NominationEnsembleEntry $entry) + { + // TODO: Implement show() method. + } + + public function create() + { + // TODO: Implement create() method. + } + + public function store() + { + // TODO: Implement store() method. + } + + public function edit(NominationEnsembleEntry $entry) + { + // TODO: Implement edit() method. + } + + public function update(NominationEnsembleEntry $entry) + { + // TODO: Implement update() method. + } + + public function destroy(NominationEnsembleEntry $entry) + { + // TODO: Implement destroy() method. + } +} diff --git a/app/Providers/NominationEnsembleServiceProvider.php b/app/Providers/NominationEnsembleServiceProvider.php index 1c1dea3..94dd577 100644 --- a/app/Providers/NominationEnsembleServiceProvider.php +++ b/app/Providers/NominationEnsembleServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use App\Http\Controllers\NominationEnsembles\MeobdaNominationAdminController; use App\Http\Controllers\NominationEnsembles\MeobdaNominationEnsembleController; use App\Http\Controllers\NominationEnsembles\MeobdaNominationEnsembleEntryController; use App\Http\Controllers\NominationEnsembles\NominationAdminController; @@ -20,10 +21,10 @@ class NominationEnsembleServiceProvider extends ServiceProvider { public function register(): void { - $this->app->bind(NominationEnsembleController::class, ScobdaNominationEnsembleController::class); - $this->app->bind(NominationEnsembleEntryController::class, ScobdaNominationEnsembleEntryController::class); - $this->app->bind(NominationAdminController::class, ScobdaNominationAdminController::class); - $this->app->bind(NominationSeatingController::class, ScobdaNominationSeatingController::class); + // $this->app->bind(NominationEnsembleController::class, ScobdaNominationEnsembleController::class); + // $this->app->bind(NominationEnsembleEntryController::class, ScobdaNominationEnsembleEntryController::class); + // $this->app->bind(NominationAdminController::class, ScobdaNominationAdminController::class); + // $this->app->bind(NominationSeatingController::class, ScobdaNominationSeatingController::class); } public function boot(): void @@ -40,6 +41,7 @@ class NominationEnsembleServiceProvider extends ServiceProvider // meobda implementation $this->app->bind(NominationEnsembleController::class, MeobdaNominationEnsembleController::class); $this->app->bind(NominationEnsembleEntryController::class, MeobdaNominationEnsembleEntryController::class); + $this->app->bind(NominationAdminController::class, MeobdaNominationAdminController::class); } } } diff --git a/database/factories/StudentFactory.php b/database/factories/StudentFactory.php index 99efec3..4aa2410 100644 --- a/database/factories/StudentFactory.php +++ b/database/factories/StudentFactory.php @@ -17,12 +17,13 @@ class StudentFactory extends Factory */ public function definition(): array { - $school = School::factory()->create(); return [ - 'school_id' => $school->id, + 'school_id' => function () { + return School::factory()->create()->id; + }, 'first_name' => fake()->firstName(), 'last_name' => fake()->lastName(), - 'grade' => rand(7,12), + 'grade' => rand(7, 12), ]; } } diff --git a/resources/views/nomination_ensembles/meobda/admin/nominations.blade.php b/resources/views/nomination_ensembles/meobda/admin/nominations.blade.php new file mode 100644 index 0000000..e8f9da5 --- /dev/null +++ b/resources/views/nomination_ensembles/meobda/admin/nominations.blade.php @@ -0,0 +1,74 @@ + + + Nomination Administration + + Filters + + + + + + School + + @foreach($schools as $school) + + @endforeach + + + + Ensemble + + @foreach($ensembles as $ensemble) + + @endforeach + + + + Ensemble / Instrument + + @foreach ($sections as $value => $name) + + @endforeach + + + + + + + + +
+ {{ $nominations->onEachSide(3)->links() }} +
+ + Nominations + + + + Name + School + Nominated For + + + + @foreach($nominations as $nomination) + + {{ $nomination->student->full_name('fl') }} + {{ $nomination->student->school->name }} + {{ $nomination->ensemble->name }} - {{ $nomination->data['instrument'] }} + + @endforeach + + + + + +