MEOBDA rules - display form to add a nomination

This commit is contained in:
Matt Young 2025-03-27 09:33:06 -05:00
parent 80e66aa49a
commit f57fa84247
5 changed files with 103 additions and 1 deletions

View File

@ -92,7 +92,40 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
public function create()
{
// TODO: Implement create() method.
$target_ensemble = null;
$instrumentation = null;
$students = null;
if (request()->get('ensemble')) {
$validData = request()->validate([
'ensemble' => 'nullable|exists:nomination_ensembles,id',
]);
$target_ensemble = NominationEnsemble::find($validData['ensemble']);
// Get viable students for entering
$students = Student::where('grade', '<=', $target_ensemble->maximum_grade)
->where('grade', '>=', $target_ensemble->minimum_grade)
->with('school')
->join('schools', 'schools.id', '=', 'students.school_id')
->orderBy('schools.name', 'asc')
->orderBy('students.last_name', 'asc')
->orderBy('students.first_name', 'asc')
->get(['students.*']);
// Remove students already nominated
$nominated_student_ids = NominationEnsembleEntry::where('nomination_ensemble_id',
$target_ensemble->id)->pluck('student_id')->all();
$students = $students->reject(function ($student) use ($nominated_student_ids) {
return in_array($student->id, $nominated_student_ids);
});
// Get current instrumentation of target ensemble
$instrumentation = $this->get_ensemble_instrumentation($target_ensemble);
}
$ensembles = NominationEnsemble::all();
return view('nomination_ensembles.meobda.admin.nomination-create',
compact('ensembles', 'target_ensemble', 'students', 'instrumentation'));
}
public function store()

View File

@ -0,0 +1,9 @@
<x-card.card class="mx-auto max-w-lg">
<x-card.heading>Choose Ensemble</x-card.heading>
<div class="px-3">
@foreach($ensembles as $ensemble)
<x-form.button class="my-3"
href="{{ route('nomination.admin.create',['ensemble' => $ensemble->id]) }}">{{ $ensemble->name }}</x-form.button>
@endforeach
</div>
</x-card.card>

View File

@ -0,0 +1,57 @@
<x-layout.app>
@if(!$target_ensemble)
@include('nomination_ensembles.meobda.admin.nomination-create-choose_ensemble')
@else
<x-card.card class="mx-auto max-w-lg">
<x-card.heading>New Nomination - {{ $target_ensemble->name }}</x-card.heading>
<x-form.form class="mb-3">
<x-form.select name="student">
<x-slot:label>Student</x-slot:label>
@foreach($students as $student)
<option value="{{$student->id}}">{{ $student->school->name }} - {{ $student->full_name() }} - Grade: {{ $student->grade }}</option>
@endforeach
</x-form.select>
<x-form.select name="instrument">
<x-slot:label>Instrument</x-slot:label>
@foreach($target_ensemble->data['instruments'] as $instrument)
<option value="{{$instrument['name']}}">{{$instrument['name']}}</option>
@endforeach
</x-form.select>
<x-form.select name="split">
<x-slot:label>Split</x-slot:label>
<option value="---">None Assigned</option>
@foreach($target_ensemble->data['split_names'] as $split)
<option value="{{$split}}")>{{$split}}</option>
@endforeach
</x-form.select>
<x-form.field name="seat" value="0" label_text="Seat (0 to leave unassigned)" type="number"/>
<x-form.footer submit-button-text="Create Nomination"></x-form.footer>
</x-form.form>
</x-card.card>
{{-- Display current instrumentation--}}
<x-card.card class="mt-3">
<x-card.heading>Current Instrumentation (before any changes)</x-card.heading>
<x-table.table>
<thead>
<tr>
<x-table.th> </x-table.th>
@foreach($target_ensemble->data['split_names'] as $split)
<x-table.th>{{$split}}</x-table.th>
@endforeach
</tr>
</thead>
<x-table.body>
@foreach($target_ensemble->data['instruments'] as $instrument)
<tr>
<x-table.td>{{$instrument['name']}}</x-table.td>
@foreach($target_ensemble->data['split_names'] as $split)
<x-table.td>{{ $instrumentation[$split][$instrument['name']] }}</x-table.td>
@endforeach
</tr>
@endforeach
</x-table.body>
</x-table.table>
</x-card.card>
@endif
</x-layout.app>

View File

@ -48,6 +48,8 @@
</x-form.form>
</x-card.card>
<x-form.button class="mb-3" href="{{ route('nomination.admin.create') }}">Add Nomination</x-form.button>
<div class="px-3">
{{ $nominations->onEachSide(3)->links() }}

View File

@ -21,6 +21,7 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('nomination
Route::get('/', 'index')->name('nomination.admin.index');
Route::get('/{nominationEnsembleEntry}/edit', 'edit')->name('nomination.admin.edit');
Route::patch('/{nominationEnsembleEntry}', 'update')->name('nomination.admin.update');
Route::get('/create', 'create')->name('nomination.admin.create');
});
Route::prefix('seating/')->controller(NominationSeatingController::class)->group(function () {