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\NominationEnsemble;
|
||||||
use App\Models\NominationEnsembleEntry;
|
use App\Models\NominationEnsembleEntry;
|
||||||
use App\Models\School;
|
use App\Models\School;
|
||||||
|
use App\Models\Student;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
use function redirect;
|
||||||
|
|
||||||
class MeobdaNominationAdminController extends Controller implements NominationAdminController
|
class MeobdaNominationAdminController extends Controller implements NominationAdminController
|
||||||
{
|
{
|
||||||
|
|
@ -81,7 +85,7 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
|
||||||
compact('nominations', 'schools', 'filterData', 'ensembles', 'sections', 'splits'));
|
compact('nominations', 'schools', 'filterData', 'ensembles', 'sections', 'splits'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function show(NominationEnsembleEntry $entry)
|
public function show(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||||
{
|
{
|
||||||
// TODO: Implement show() method.
|
// TODO: Implement show() method.
|
||||||
}
|
}
|
||||||
|
|
@ -96,18 +100,69 @@ class MeobdaNominationAdminController extends Controller implements NominationAd
|
||||||
// TODO: Implement store() method.
|
// 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.
|
// 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 index();
|
||||||
|
|
||||||
public function show(NominationEnsembleEntry $entry);
|
public function show(NominationEnsembleEntry $nominationEnsembleEntry);
|
||||||
|
|
||||||
public function create();
|
public function create();
|
||||||
|
|
||||||
public function store();
|
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'));
|
return view('nomination_ensembles.scobda.admin.index', compact('nominations'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function show(NominationEnsembleEntry $entry)
|
public function show(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||||
{
|
{
|
||||||
// TODO: Implement show() method.
|
// TODO: Implement show() method.
|
||||||
}
|
}
|
||||||
|
|
@ -29,17 +29,17 @@ class ScobdaNominationAdminController extends Controller implements NominationAd
|
||||||
// TODO: Implement store() method.
|
// TODO: Implement store() method.
|
||||||
}
|
}
|
||||||
|
|
||||||
public function edit(NominationEnsembleEntry $entry)
|
public function edit(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||||
{
|
{
|
||||||
// TODO: Implement edit() method.
|
// TODO: Implement edit() method.
|
||||||
}
|
}
|
||||||
|
|
||||||
public function update(NominationEnsembleEntry $entry)
|
public function update(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||||
{
|
{
|
||||||
// TODO: Implement update() method.
|
// TODO: Implement update() method.
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroy(NominationEnsembleEntry $entry)
|
public function destroy(NominationEnsembleEntry $nominationEnsembleEntry)
|
||||||
{
|
{
|
||||||
// TODO: Implement destroy() method.
|
// 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>
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<option value="">All</option>
|
<option value="">All</option>
|
||||||
@foreach($schools as $school)
|
@foreach($schools as $school)
|
||||||
<option value="{{ $school->id }}"
|
<option value="{{ $school->id }}"
|
||||||
@if($school->id == ($filterData['school'] ?? null)) SELECTED @endif>
|
@if($school->id == ($filterData['school'] ?? null)) SELECTED @endif>
|
||||||
{{ $school->name }}
|
{{ $school->name }}
|
||||||
</option>
|
</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
<option value="">All</option>
|
<option value="">All</option>
|
||||||
@foreach ($sections as $value => $name)
|
@foreach ($sections as $value => $name)
|
||||||
<option value="{{$value}}"
|
<option value="{{$value}}"
|
||||||
@if($value == ($filterData['section'] ?? null)) SELECTED @endif>
|
@if($value == ($filterData['section'] ?? null)) SELECTED @endif>
|
||||||
{{$name}}</option>
|
{{$name}}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</x-form.select>
|
</x-form.select>
|
||||||
|
|
@ -63,6 +63,7 @@
|
||||||
<x-table.th>Nominated For</x-table.th>
|
<x-table.th>Nominated For</x-table.th>
|
||||||
<x-table.th>Split</x-table.th>
|
<x-table.th>Split</x-table.th>
|
||||||
<x-table.th>Seat</x-table.th>
|
<x-table.th>Seat</x-table.th>
|
||||||
|
<x-table.th></x-table.th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<x-table.body>
|
<x-table.body>
|
||||||
|
|
@ -71,9 +72,15 @@
|
||||||
<x-table.td>{{ $nomination->id }}</x-table.td>
|
<x-table.td>{{ $nomination->id }}</x-table.td>
|
||||||
<x-table.td>{{ $nomination->student->full_name('fl') }}</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->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['split'] ?? '---' }}</x-table.td>
|
||||||
<x-table.td>{{ $nomination->data['seat'] ?? '---' }}</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>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
</x-table.body>
|
</x-table.body>
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('nomination
|
||||||
|
|
||||||
Route::prefix('nominations/')->controller(NominationAdminController::class)->group(function () {
|
Route::prefix('nominations/')->controller(NominationAdminController::class)->group(function () {
|
||||||
Route::get('/', 'index')->name('nomination.admin.index');
|
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 () {
|
Route::prefix('seating/')->controller(NominationSeatingController::class)->group(function () {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue