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()
|
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)
|
public function edit(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||||
|
|
@ -138,6 +173,12 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
|
||||||
$students = Student::with('school')->get()
|
$students = Student::with('school')->get()
|
||||||
->sortBy('school.name');
|
->sortBy('school.name');
|
||||||
|
|
||||||
|
if (! isset($nominationEnsembleEntry->data['seat'])) {
|
||||||
|
$data = $nominationEnsembleEntry->data;
|
||||||
|
$data['seat'] = null;
|
||||||
|
$nominationEnsembleEntry->data = $data;
|
||||||
|
}
|
||||||
|
|
||||||
$instrumentation = $this->get_ensemble_instrumentation($nominationEnsembleEntry->ensemble);
|
$instrumentation = $this->get_ensemble_instrumentation($nominationEnsembleEntry->ensemble);
|
||||||
|
|
||||||
return view('nomination_ensembles.meobda.admin.nomination-edit',
|
return view('nomination_ensembles.meobda.admin.nomination-edit',
|
||||||
|
|
@ -153,9 +194,9 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
|
||||||
$validInstruments[] = $instrument['name'];
|
$validInstruments[] = $instrument['name'];
|
||||||
}
|
}
|
||||||
$validData = request()->validate([
|
$validData = request()->validate([
|
||||||
'instrument' => Rule::in($validInstruments),
|
'instrument' => ['nullable', Rule::in($validInstruments)],
|
||||||
'split' => Rule::in($validSplits),
|
'split' => ['nullable', Rule::in($validSplits)],
|
||||||
'seat' => 'integer',
|
'seat' => ['nullable', 'integer'],
|
||||||
]);
|
]);
|
||||||
$data = $nominationEnsembleEntry->data;
|
$data = $nominationEnsembleEntry->data;
|
||||||
$data['instrument'] = $validData['instrument'];
|
$data['instrument'] = $validData['instrument'];
|
||||||
|
|
@ -165,7 +206,7 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
|
||||||
'data' => $data,
|
'data' => $data,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return redirect()->back();
|
return redirect()->route('nomination.admin.index')->with('success', 'Nomination updated');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroy(NominationEnsembleEntry $nominationEnsembleEntry)
|
public function destroy(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@
|
||||||
@else
|
@else
|
||||||
<x-card.card class="mx-auto max-w-lg">
|
<x-card.card class="mx-auto max-w-lg">
|
||||||
<x-card.heading>New Nomination - {{ $target_ensemble->name }}</x-card.heading>
|
<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-form.select name="student">
|
||||||
<x-slot:label>Student</x-slot:label>
|
<x-slot:label>Student</x-slot:label>
|
||||||
@foreach($students as $student)
|
@foreach($students as $student)
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,9 @@
|
||||||
@enderror
|
@enderror
|
||||||
<x-form.select name="split">
|
<x-form.select name="split">
|
||||||
<x-slot:label>Split</x-slot:label>
|
<x-slot:label>Split</x-slot:label>
|
||||||
<option value="--">---</option>
|
<option value="">--- None Assigned ---</option>
|
||||||
@foreach($nominationEnsembleEntry->ensemble->data['split_names'] as $splitName)
|
@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
|
@endforeach
|
||||||
|
|
||||||
</x-form.select>
|
</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::get('/{nominationEnsembleEntry}/edit', 'edit')->name('nomination.admin.edit');
|
||||||
Route::patch('/{nominationEnsembleEntry}', 'update')->name('nomination.admin.update');
|
Route::patch('/{nominationEnsembleEntry}', 'update')->name('nomination.admin.update');
|
||||||
Route::get('/create', 'create')->name('nomination.admin.create');
|
Route::get('/create', 'create')->name('nomination.admin.create');
|
||||||
|
Route::post('/', 'store')->name('nomination.admin.store');
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::prefix('seating/')->controller(NominationSeatingController::class)->group(function () {
|
Route::prefix('seating/')->controller(NominationSeatingController::class)->group(function () {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue