From 6ef89c9dfad45f650a5148e7fba3f8cf91df7283 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Sat, 15 Feb 2025 10:37:21 -0600 Subject: [PATCH] MEOBDA nomination seating working. --- .../MeobdaNominationSeatingController.php | 78 ++++++++++++++++++- .../meobda/admin/seating.blade.php | 27 ++++++- 2 files changed, 101 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/NominationEnsembles/MeobdaNominationSeatingController.php b/app/Http/Controllers/NominationEnsembles/MeobdaNominationSeatingController.php index 6e8c3ad..b4b699d 100644 --- a/app/Http/Controllers/NominationEnsembles/MeobdaNominationSeatingController.php +++ b/app/Http/Controllers/NominationEnsembles/MeobdaNominationSeatingController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\NominationEnsembles; use App\Http\Controllers\Controller; use App\Models\NominationEnsemble; +use App\Models\NominationEnsembleEntry; class MeobdaNominationSeatingController extends Controller implements NominationSeatingController { @@ -18,12 +19,85 @@ class MeobdaNominationSeatingController extends Controller implements Nomination public function show(NominationEnsemble $ensemble) { $ensembles = NominationEnsemble::all(); + $nominations = []; - return view('nomination_ensembles.meobda.admin.seating', compact('ensembles', 'ensemble')); + if ($ensemble->data['seated'] ?? false) { + $nominations = NominationEnsembleEntry::where('nomination_ensemble_id', $ensemble->id) + ->orderBy('data->instrument') + ->orderByRaw('CAST(data->"$.seat" AS UNSIGNED)') + ->with('student.school') + ->get(); + $nominations = $nominations->groupBy(function ($item) { + return $item->data['split']; + }); + foreach ($nominations as $split => $splitNoms) { + $nominations[$split] = $splitNoms->groupBy(function ($item) { + return $item->data['instrument']; + }); + } + } + + return view('nomination_ensembles.meobda.admin.seating', compact('ensembles', 'ensemble', 'nominations')); } public function seat(NominationEnsemble $ensemble) { - // TODO: Implement seat() method. + $validData = request()->validate([ + 'action' => 'required|in:seat,clear', + ]); + $action = $validData['action']; + $data = $ensemble['data']; + $nominations = NominationEnsembleEntry::where('nomination_ensemble_id', + $ensemble->id)->inRandomOrder()->get(); + $groupedNominations = $nominations->groupBy(function ($nom) { + return $nom->data['instrument']; + }); + + if ($action == 'seat') { + // If no split names are set, make the name of the ensemble the only split name + $splits = $data['split_names']; + if (count($splits) < 2 && strlen($splits[0]) < 2) { + $splits[0] = $ensemble->name; + } + $splitOn = 0; + + foreach ($ensemble->data['instruments'] as $instrument) { + if (! $groupedNominations->has($instrument['name'])) { + continue; + } + $seatOn = 1; + foreach ($groupedNominations[$instrument['name']] as $nomination) { + $nomData = $nomination['data']; + $nomData['seat'] = $seatOn; + $nomData['split'] = $splits[$splitOn]; + $nomination->data = $nomData; + $nomination->save(); + + $splitOn++; + if ($splitOn >= count($splits)) { + $seatOn++; + $splitOn = 0; + } + } + } + + $data['seated'] = true; + + } + + if ($action == 'clear') { + $data['seated'] = false; + foreach ($nominations as $nomination) { + $nomData = $nomination['data']; + unset($nomData['split']); + unset($nomData['seat']); + $nomination->data = $nomData; + $nomination->save(); + } + } + $ensemble->data = $data; + $ensemble->save(); + + return redirect(route('nomination.admin.seating.show', [$ensemble])); } } diff --git a/resources/views/nomination_ensembles/meobda/admin/seating.blade.php b/resources/views/nomination_ensembles/meobda/admin/seating.blade.php index bdb3c71..b984256 100644 --- a/resources/views/nomination_ensembles/meobda/admin/seating.blade.php +++ b/resources/views/nomination_ensembles/meobda/admin/seating.blade.php @@ -25,10 +25,10 @@ @if($ensemble->data['seated'] ?? false) - + Clear Seats @else - + Seat @endif @@ -36,6 +36,29 @@ + @if($ensemble->data['seated'] ?? false) + @foreach($ensemble->data['split_names'] as $split) + + {{ $split }} + @foreach ($ensemble->data['instruments'] as $instrument) + @continue(! $nominations[$split]->has($instrument['name'])) + + {{ $instrument['name'] }} + + Count: {{ count($nominations[$split][$instrument['name']]) }} + + + @foreach($nominations[$split][$instrument['name']] as $thisNomination) + {{ $thisNomination->data['seat'] }} - {{ $thisNomination->student->full_name() }}, {{ $thisNomination->student->school->name }} + + @endforeach + + @endforeach + + + @endforeach + @endif + @endif