diff --git a/app/Http/Controllers/NominationEnsembles/MeobdaNominationAdminController.php b/app/Http/Controllers/NominationEnsembles/MeobdaNominationAdminController.php index 6738faa..4d9d65f 100644 --- a/app/Http/Controllers/NominationEnsembles/MeobdaNominationAdminController.php +++ b/app/Http/Controllers/NominationEnsembles/MeobdaNominationAdminController.php @@ -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) diff --git a/resources/views/nomination_ensembles/meobda/admin/nomination-create.blade.php b/resources/views/nomination_ensembles/meobda/admin/nomination-create.blade.php index 8ba6d6f..71f6f9f 100644 --- a/resources/views/nomination_ensembles/meobda/admin/nomination-create.blade.php +++ b/resources/views/nomination_ensembles/meobda/admin/nomination-create.blade.php @@ -4,7 +4,8 @@ @else New Nomination - {{ $target_ensemble->name }} - + + Student @foreach($students as $student) diff --git a/resources/views/nomination_ensembles/meobda/admin/nomination-edit.blade.php b/resources/views/nomination_ensembles/meobda/admin/nomination-edit.blade.php index 26d434a..ca6a0ff 100644 --- a/resources/views/nomination_ensembles/meobda/admin/nomination-edit.blade.php +++ b/resources/views/nomination_ensembles/meobda/admin/nomination-edit.blade.php @@ -15,9 +15,9 @@ @enderror Split - + @foreach($nominationEnsembleEntry->ensemble->data['split_names'] as $splitName) - + @endforeach diff --git a/routes/nominationEnsemble.php b/routes/nominationEnsemble.php index 53fd228..45a6e51 100644 --- a/routes/nominationEnsemble.php +++ b/routes/nominationEnsemble.php @@ -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 () {