MEOBDA rules - allow admin to create a new nomination.

This commit is contained in:
Matt Young 2025-03-27 17:55:06 -05:00
parent f57fa84247
commit e72f51728d
4 changed files with 51 additions and 8 deletions

View File

@ -130,7 +130,42 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
public function store()
{
// TODO: Implement store() method.
// Initial Validation
$validData = request()->validate([
'ensemble' => 'required|exists:nomination_ensembles,id',
'student' => 'required|exists:students,id',
'instrument' => 'required|string',
'split' => 'nullable|string',
'seat' => 'nullable|integer',
]);
$proposed_ensemble = NominationEnsemble::find($validData['ensemble']);
// Check if $validData['instrument'] is a valid instrument for the proposed ensemble
$validInstruments = array_column($proposed_ensemble->data['instruments'], 'name');
if (! in_array($validData['instrument'], $validInstruments)) {
return redirect()->back()->with('error', 'Invalid Instrument Specified');
}
$data['instrument'] = $validData['instrument'];
if ($validData['seat'] > 0) {
$data['seat'] = $validData['seat'];
}
if ($validData['split'] != '---') {
$data['split'] = $validData['split'];
// Check if $validData['split'] is a valid split for the proposed ensemble
$validSplits = $proposed_ensemble->data['splits'];
if (! in_array($validData['split'], $validSplits)) {
return redirect()->back()->with('error', 'Invalid Split Specified');
}
}
$newNomination = NominationEnsembleEntry::make([
'student_id' => $validData['student'],
'nomination_ensemble_id' => $validData['ensemble'],
'data' => $data,
]);
$newNomination->save();
return redirect()->route('nomination.admin.index')->with('success', 'New Nomination created');
}
public function edit(NominationEnsembleEntry $nominationEnsembleEntry)
@ -138,6 +173,12 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
$students = Student::with('school')->get()
->sortBy('school.name');
if (! isset($nominationEnsembleEntry->data['seat'])) {
$data = $nominationEnsembleEntry->data;
$data['seat'] = null;
$nominationEnsembleEntry->data = $data;
}
$instrumentation = $this->get_ensemble_instrumentation($nominationEnsembleEntry->ensemble);
return view('nomination_ensembles.meobda.admin.nomination-edit',
@ -153,9 +194,9 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
$validInstruments[] = $instrument['name'];
}
$validData = request()->validate([
'instrument' => Rule::in($validInstruments),
'split' => Rule::in($validSplits),
'seat' => 'integer',
'instrument' => ['nullable', Rule::in($validInstruments)],
'split' => ['nullable', Rule::in($validSplits)],
'seat' => ['nullable', 'integer'],
]);
$data = $nominationEnsembleEntry->data;
$data['instrument'] = $validData['instrument'];
@ -165,7 +206,7 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
'data' => $data,
]);
return redirect()->back();
return redirect()->route('nomination.admin.index')->with('success', 'Nomination updated');
}
public function destroy(NominationEnsembleEntry $nominationEnsembleEntry)

View File

@ -4,7 +4,8 @@
@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.form class="mb-3" method="POST" action="{{ route('nomination.admin.store') }}">
<input type="hidden" name="ensemble" value="{{$target_ensemble->id}}">
<x-form.select name="student">
<x-slot:label>Student</x-slot:label>
@foreach($students as $student)

View File

@ -15,9 +15,9 @@
@enderror
<x-form.select name="split">
<x-slot:label>Split</x-slot:label>
<option value="--">---</option>
<option value="">--- None Assigned ---</option>
@foreach($nominationEnsembleEntry->ensemble->data['split_names'] as $splitName)
<option value="{{$splitName}}" @if($splitName == $nominationEnsembleEntry->data['split']) SELECTED @endif>{{$splitName}}</option>
<option value="{{$splitName}}" @if($splitName == ($nominationEnsembleEntry->data['split'] ?? null)) SELECTED @endif>{{$splitName}}</option>
@endforeach
</x-form.select>

View File

@ -22,6 +22,7 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('nomination
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::post('/', 'store')->name('nomination.admin.store');
});
Route::prefix('seating/')->controller(NominationSeatingController::class)->group(function () {