Allow admin to update nominations in MEOBDA rules
This commit is contained in:
parent
917f570c42
commit
80e66aa49a
|
|
@ -6,6 +6,10 @@ use App\Http\Controllers\Controller;
|
|||
use App\Models\NominationEnsemble;
|
||||
use App\Models\NominationEnsembleEntry;
|
||||
use App\Models\School;
|
||||
use App\Models\Student;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
use function redirect;
|
||||
|
||||
class MeobdaNominationAdminController extends Controller implements NominationAdminController
|
||||
{
|
||||
|
|
@ -81,7 +85,7 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
|
|||
compact('nominations', 'schools', 'filterData', 'ensembles', 'sections', 'splits'));
|
||||
}
|
||||
|
||||
public function show(NominationEnsembleEntry $entry)
|
||||
public function show(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||
{
|
||||
// TODO: Implement show() method.
|
||||
}
|
||||
|
|
@ -96,18 +100,69 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
|
|||
// TODO: Implement store() method.
|
||||
}
|
||||
|
||||
public function edit(NominationEnsembleEntry $entry)
|
||||
public function edit(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||
{
|
||||
// TODO: Implement edit() method.
|
||||
$students = Student::with('school')->get()
|
||||
->sortBy('school.name');
|
||||
|
||||
$instrumentation = $this->get_ensemble_instrumentation($nominationEnsembleEntry->ensemble);
|
||||
|
||||
return view('nomination_ensembles.meobda.admin.nomination-edit',
|
||||
compact('nominationEnsembleEntry', 'students', 'instrumentation'));
|
||||
}
|
||||
|
||||
public function update(NominationEnsembleEntry $entry)
|
||||
public function update(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||
{
|
||||
// TODO: Implement update() method.
|
||||
$ensemble = $nominationEnsembleEntry->ensemble;
|
||||
$validSplits = $ensemble->data['split_names'];
|
||||
$validInstruments = [];
|
||||
foreach ($ensemble->data['instruments'] as $instrument) {
|
||||
$validInstruments[] = $instrument['name'];
|
||||
}
|
||||
$validData = request()->validate([
|
||||
'instrument' => Rule::in($validInstruments),
|
||||
'split' => Rule::in($validSplits),
|
||||
'seat' => 'integer',
|
||||
]);
|
||||
$data = $nominationEnsembleEntry->data;
|
||||
$data['instrument'] = $validData['instrument'];
|
||||
$data['split'] = $validData['split'];
|
||||
$data['seat'] = $validData['seat'];
|
||||
$nominationEnsembleEntry->update([
|
||||
'data' => $data,
|
||||
]);
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
public function destroy(NominationEnsembleEntry $entry)
|
||||
public function destroy(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||
{
|
||||
// TODO: Implement destroy() method.
|
||||
}
|
||||
|
||||
private function get_ensemble_instrumentation(NominationEnsemble $ensemble)
|
||||
{
|
||||
$entries = NominationEnsembleEntry::where('nomination_ensemble_id', $ensemble->id)->get();
|
||||
$splits = $ensemble->data['split_names'];
|
||||
$instruments = [];
|
||||
foreach ($ensemble->data['instruments'] as $instrument) {
|
||||
$instruments[] = $instrument['name'];
|
||||
}
|
||||
$counts = [];
|
||||
foreach ($splits as $split) {
|
||||
$counts[$split] = [];
|
||||
foreach ($instruments as $instrument) {
|
||||
$counts[$split][$instrument] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($entries as $entry) {
|
||||
if (! isset($entry->data['split'])) {
|
||||
continue;
|
||||
}
|
||||
$counts[$entry->data['split']][$entry->data['instrument']] += 1;
|
||||
}
|
||||
|
||||
return $counts;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,15 +8,15 @@ interface NominationAdminController
|
|||
{
|
||||
public function index();
|
||||
|
||||
public function show(NominationEnsembleEntry $entry);
|
||||
public function show(NominationEnsembleEntry $nominationEnsembleEntry);
|
||||
|
||||
public function create();
|
||||
|
||||
public function store();
|
||||
|
||||
public function edit(NominationEnsembleEntry $entry);
|
||||
public function edit(NominationEnsembleEntry $nominationEnsembleEntry);
|
||||
|
||||
public function update(NominationEnsembleEntry $entry);
|
||||
public function update(NominationEnsembleEntry $nominationEnsembleEntry);
|
||||
|
||||
public function destroy(NominationEnsembleEntry $entry);
|
||||
public function destroy(NominationEnsembleEntry $nominationEnsembleEntry);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ class ScobdaNominationAdminController extends Controller implements NominationAd
|
|||
return view('nomination_ensembles.scobda.admin.index', compact('nominations'));
|
||||
}
|
||||
|
||||
public function show(NominationEnsembleEntry $entry)
|
||||
public function show(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||
{
|
||||
// TODO: Implement show() method.
|
||||
}
|
||||
|
|
@ -29,17 +29,17 @@ class ScobdaNominationAdminController extends Controller implements NominationAd
|
|||
// TODO: Implement store() method.
|
||||
}
|
||||
|
||||
public function edit(NominationEnsembleEntry $entry)
|
||||
public function edit(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||
{
|
||||
// TODO: Implement edit() method.
|
||||
}
|
||||
|
||||
public function update(NominationEnsembleEntry $entry)
|
||||
public function update(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||
{
|
||||
// TODO: Implement update() method.
|
||||
}
|
||||
|
||||
public function destroy(NominationEnsembleEntry $entry)
|
||||
public function destroy(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||
{
|
||||
// TODO: Implement destroy() method.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,54 @@
|
|||
<x-layout.app>
|
||||
<x-card.card class="mx-auto max-w-lg">
|
||||
<x-card.heading>Edit Nomination</x-card.heading>
|
||||
<x-form.form method="PATCH" action="{{ route('nomination.admin.update',$nominationEnsembleEntry) }}" class="mb-4 mt-2">
|
||||
<x-form.field readonly name="name" label_text="Student" value="{{ $nominationEnsembleEntry->student->full_name() }} - {{ $nominationEnsembleEntry->student->school->name }} - Grade: {{ $nominationEnsembleEntry->student->grade }}"/>
|
||||
<x-form.field readonly name="ensemble" label_text="Ensemble" value="{{ $nominationEnsembleEntry->ensemble->name }}" />
|
||||
<x-form.select name="instrument">
|
||||
<x-slot:label>Instrument</x-slot:label>
|
||||
@foreach($nominationEnsembleEntry->ensemble->data['instruments'] as $instrument)
|
||||
<option value="{{$instrument['name']}}" @if($instrument['name'] == $nominationEnsembleEntry->data['instrument']) SELECTED @endif>{{$instrument['name']}}</option>
|
||||
@endforeach
|
||||
</x-form.select>
|
||||
@error('instrument')
|
||||
<p class="text-xs text-red-500 font-semibold mt-1 ml-3">{{ $message }}</p>
|
||||
@enderror
|
||||
<x-form.select name="split">
|
||||
<x-slot:label>Split</x-slot:label>
|
||||
<option value="--">---</option>
|
||||
@foreach($nominationEnsembleEntry->ensemble->data['split_names'] as $splitName)
|
||||
<option value="{{$splitName}}" @if($splitName == $nominationEnsembleEntry->data['split']) SELECTED @endif>{{$splitName}}</option>
|
||||
@endforeach
|
||||
|
||||
</x-form.select>
|
||||
@error('split')
|
||||
<p class="text-xs text-red-500 font-semibold mt-1 ml-3">{{ $message }}</p>
|
||||
@enderror
|
||||
<x-form.field type="number" name="seat" value="{{$nominationEnsembleEntry->data['seat']}}" label_text="Seat"/>
|
||||
<x-form.footer submit-button-text="Save Changes"></x-form.footer>
|
||||
</x-form.form>
|
||||
</x-card.card>
|
||||
<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($nominationEnsembleEntry->ensemble->data['split_names'] as $split)
|
||||
<x-table.th>{{$split}}</x-table.th>
|
||||
@endforeach
|
||||
</tr>
|
||||
</thead>
|
||||
<x-table.body>
|
||||
@foreach($nominationEnsembleEntry->ensemble->data['instruments'] as $instrument)
|
||||
<tr>
|
||||
<x-table.td>{{$instrument['name']}}</x-table.td>
|
||||
@foreach($nominationEnsembleEntry->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>
|
||||
</x-layout.app>
|
||||
|
|
@ -63,6 +63,7 @@
|
|||
<x-table.th>Nominated For</x-table.th>
|
||||
<x-table.th>Split</x-table.th>
|
||||
<x-table.th>Seat</x-table.th>
|
||||
<x-table.th></x-table.th>
|
||||
</tr>
|
||||
</thead>
|
||||
<x-table.body>
|
||||
|
|
@ -71,9 +72,15 @@
|
|||
<x-table.td>{{ $nomination->id }}</x-table.td>
|
||||
<x-table.td>{{ $nomination->student->full_name('fl') }}</x-table.td>
|
||||
<x-table.td>{{ $nomination->student->school->name }}</x-table.td>
|
||||
<x-table.td>{{ $nomination->ensemble->name }} - {{ $nomination->data['instrument'] }}</x-table.td>
|
||||
<x-table.td>{{ $nomination->ensemble->name }}
|
||||
- {{ $nomination->data['instrument'] }}</x-table.td>
|
||||
<x-table.td>{{ $nomination->data['split'] ?? '---' }}</x-table.td>
|
||||
<x-table.td>{{ $nomination->data['seat'] ?? '---' }}</x-table.td>
|
||||
<x-table.td>
|
||||
<a href="{{ route('nomination.admin.edit',[$nomination]) }}">
|
||||
[ EDIT ]
|
||||
</a>
|
||||
</x-table.td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</x-table.body>
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('nomination
|
|||
|
||||
Route::prefix('nominations/')->controller(NominationAdminController::class)->group(function () {
|
||||
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::prefix('seating/')->controller(NominationSeatingController::class)->group(function () {
|
||||
|
|
|
|||
Loading…
Reference in New Issue