MEOBDA rules - allow admin to create a new nomination.
This commit is contained in:
parent
f57fa84247
commit
e72f51728d
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 () {
|
||||
|
|
|
|||
Loading…
Reference in New Issue