MEOBDA nomination admin screen cna filter by split

This commit is contained in:
Matt Young 2025-02-15 11:43:06 -06:00
parent d7c495291c
commit c45b8cb349
2 changed files with 36 additions and 22 deletions

View File

@ -14,9 +14,9 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
if (request('newFilterParameters')) { if (request('newFilterParameters')) {
$newFilterData = request()->validate([ $newFilterData = request()->validate([
'school' => 'nullable|exists:schools,id', 'school' => 'nullable|exists:schools,id',
'ensemble' => 'nullable|exists:nomination_ensembles,id',
'section' => 'nullable|string', 'section' => 'nullable|string',
'newFilterParameters' => 'string', 'newFilterParameters' => 'string',
'split' => 'nullable|string',
]); ]);
session()->put('nominationAdminFilters', $newFilterData); session()->put('nominationAdminFilters', $newFilterData);
$filterData = $newFilterData; $filterData = $newFilterData;
@ -29,16 +29,30 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
// Populate variables to complete the filter form // Populate variables to complete the filter form
$schools = School::orderBy('name')->get(); $schools = School::orderBy('name')->get();
$ensembles = NominationEnsemble::all(); $ensembles = NominationEnsemble::all();
$sections = [];
$splits = [];
foreach ($ensembles as $ensemble) {
// Populate sections for each ensemble
$sections[$ensemble->id.'---'.'all'] = $ensemble->name.' - ALL';
foreach ($ensemble->data['instruments'] as $instrument) {
$sections[$ensemble->id.'---'.$instrument['name']] = $ensemble->name.' - '.$instrument['name'];
}
// Populate splits for each ensemble
$splits[$ensemble->id.'---'.'all'] = $ensemble->name.' - ALL';
foreach ($ensemble->data['split_names'] as $splitName) {
$splits[$ensemble->id.'---'.$splitName] = $ensemble->name.' - '.$splitName;
}
}
// Get and filter nominations
$nominations = NominationEnsembleEntry::with('student.school'); $nominations = NominationEnsembleEntry::with('student.school');
if ($filterData['school'] ?? false) { if ($filterData['school'] ?? false) {
$nominations = $nominations->whereHas('student', function ($query) use ($filterData) { $nominations = $nominations->whereHas('student', function ($query) use ($filterData) {
$query->where('school_id', $filterData['school']); $query->where('school_id', $filterData['school']);
}); });
} }
if ($filterData['ensemble'] ?? false) {
$nominations = $nominations->where('nomination_ensemble_id', $filterData['ensemble']);
}
if ($filterData['section'] ?? false) { if ($filterData['section'] ?? false) {
$sectionFilter = explode('---', $filterData['section']); $sectionFilter = explode('---', $filterData['section']);
$nominations = $nominations->where('nomination_ensemble_id', $sectionFilter[0]); $nominations = $nominations->where('nomination_ensemble_id', $sectionFilter[0]);
@ -47,17 +61,18 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
} }
} }
$nominations = $nominations->paginate(50); if ($filterData['split'] ?? false) {
$sections = []; $splitFilter = explode('---', $filterData['split']);
foreach ($ensembles as $ensemble) { $nominations = $nominations->where('nomination_ensemble_id', $splitFilter[0]);
$sections[$ensemble->id.'---'.'all'] = $ensemble->name.' - ALL'; if ($splitFilter[1] != 'all') {
foreach ($ensemble->data['instruments'] as $instrument) { $nominations = $nominations->where('data->split', $splitFilter[1]);
$sections[$ensemble->id.'---'.$instrument['name']] = $ensemble->name.' - '.$instrument['name'];
} }
} }
$nominations = $nominations->paginate(50);
return view('nomination_ensembles.meobda.admin.nominations', return view('nomination_ensembles.meobda.admin.nominations',
compact('nominations', 'schools', 'filterData', 'ensembles', 'sections')); compact('nominations', 'schools', 'filterData', 'ensembles', 'sections', 'splits'));
} }
public function show(NominationEnsembleEntry $entry) public function show(NominationEnsembleEntry $entry)

View File

@ -18,17 +18,6 @@
@endforeach @endforeach
</x-form.select> </x-form.select>
<x-form.select name="ensemble" onchange="this.form.submit()">
<x-slot:label>Ensemble</x-slot:label>
<option value="">All</option>
@foreach($ensembles as $ensemble)
<option value="{{ $ensemble->id }}"
@if($ensemble->id == ($filterData['ensemble'] ?? null)) SELECTED @endif>
{{ $ensemble->name }}
</option>
@endforeach
</x-form.select>
<x-form.select name="section" onchange="this.form.submit()" colspan="2"> <x-form.select name="section" onchange="this.form.submit()" colspan="2">
<x-slot:label>Ensemble / Instrument</x-slot:label> <x-slot:label>Ensemble / Instrument</x-slot:label>
<option value="">All</option> <option value="">All</option>
@ -39,6 +28,16 @@
@endforeach @endforeach
</x-form.select> </x-form.select>
<x-form.select name="split" onchange="this.form.submit()" colspan="2">
<x-slot:label>Split</x-slot:label>
<option value="">All</option>
@foreach ($splits as $value => $name)
<option value="{{$value}}"
@if($value == ($filterData['split'] ?? null)) SELECTED @endif>
{{$name}}</option>
@endforeach
</x-form.select>
</x-form.body-grid> </x-form.body-grid>
</x-form.form> </x-form.form>