Meobda nomination ensemble #107
|
|
@ -0,0 +1,94 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\NominationEnsembles;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\NominationEnsemble;
|
||||
use App\Models\NominationEnsembleEntry;
|
||||
use App\Models\School;
|
||||
|
||||
class MeobdaNominationAdminController extends Controller implements NominationAdminController
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
if (request('newFilterParameters')) {
|
||||
$newFilterData = request()->validate([
|
||||
'school' => 'nullable|exists:schools,id',
|
||||
'ensemble' => 'nullable|exists:nomination_ensembles,id',
|
||||
'section' => 'nullable|string',
|
||||
'newFilterParameters' => 'string',
|
||||
]);
|
||||
session()->put('nominationAdminFilters', $newFilterData);
|
||||
$filterData = $newFilterData;
|
||||
} elseif (session()->has('nominationAdminFilters')) {
|
||||
$filterData = session()->get('nominationAdminFilters');
|
||||
} else {
|
||||
$filterData = [];
|
||||
}
|
||||
|
||||
dump($filterData);
|
||||
|
||||
// Populate variables to complete the filter form
|
||||
$schools = School::orderBy('name')->get();
|
||||
$ensembles = NominationEnsemble::all();
|
||||
|
||||
$nominations = NominationEnsembleEntry::with('student.school');
|
||||
if ($filterData['school'] ?? false) {
|
||||
$nominations = $nominations->whereHas('student', function ($query) use ($filterData) {
|
||||
$query->where('school_id', $filterData['school']);
|
||||
});
|
||||
}
|
||||
if ($filterData['ensemble'] ?? false) {
|
||||
$nominations = $nominations->where('nomination_ensemble_id', $filterData['ensemble']);
|
||||
}
|
||||
if ($filterData['section'] ?? false) {
|
||||
$sectionFilter = explode('---', $filterData['section']);
|
||||
$nominations = $nominations->where('nomination_ensemble_id', $sectionFilter[0]);
|
||||
if ($sectionFilter[1] != 'all') {
|
||||
$nominations = $nominations->where('data->instrument', $sectionFilter[1]);
|
||||
}
|
||||
}
|
||||
|
||||
$nominations = $nominations->paginate(50);
|
||||
$sections = [];
|
||||
foreach ($ensembles as $ensemble) {
|
||||
$sections[$ensemble->id.'---'.'all'] = $ensemble->name.' - ALL';
|
||||
foreach ($ensemble->data['instruments'] as $instrument) {
|
||||
$sections[$ensemble->id.'---'.$instrument['name']] = $ensemble->name.' - '.$instrument['name'];
|
||||
}
|
||||
}
|
||||
|
||||
return view('nomination_ensembles.meobda.admin.nominations',
|
||||
compact('nominations', 'schools', 'filterData', 'ensembles', 'sections'));
|
||||
}
|
||||
|
||||
public function show(NominationEnsembleEntry $entry)
|
||||
{
|
||||
// TODO: Implement show() method.
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
// TODO: Implement create() method.
|
||||
}
|
||||
|
||||
public function store()
|
||||
{
|
||||
// TODO: Implement store() method.
|
||||
}
|
||||
|
||||
public function edit(NominationEnsembleEntry $entry)
|
||||
{
|
||||
// TODO: Implement edit() method.
|
||||
}
|
||||
|
||||
public function update(NominationEnsembleEntry $entry)
|
||||
{
|
||||
// TODO: Implement update() method.
|
||||
}
|
||||
|
||||
public function destroy(NominationEnsembleEntry $entry)
|
||||
{
|
||||
// TODO: Implement destroy() method.
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace App\Providers;
|
||||
|
||||
use App\Http\Controllers\NominationEnsembles\MeobdaNominationAdminController;
|
||||
use App\Http\Controllers\NominationEnsembles\MeobdaNominationEnsembleController;
|
||||
use App\Http\Controllers\NominationEnsembles\MeobdaNominationEnsembleEntryController;
|
||||
use App\Http\Controllers\NominationEnsembles\NominationAdminController;
|
||||
|
|
@ -20,10 +21,10 @@ class NominationEnsembleServiceProvider extends ServiceProvider
|
|||
{
|
||||
public function register(): void
|
||||
{
|
||||
$this->app->bind(NominationEnsembleController::class, ScobdaNominationEnsembleController::class);
|
||||
$this->app->bind(NominationEnsembleEntryController::class, ScobdaNominationEnsembleEntryController::class);
|
||||
$this->app->bind(NominationAdminController::class, ScobdaNominationAdminController::class);
|
||||
$this->app->bind(NominationSeatingController::class, ScobdaNominationSeatingController::class);
|
||||
// $this->app->bind(NominationEnsembleController::class, ScobdaNominationEnsembleController::class);
|
||||
// $this->app->bind(NominationEnsembleEntryController::class, ScobdaNominationEnsembleEntryController::class);
|
||||
// $this->app->bind(NominationAdminController::class, ScobdaNominationAdminController::class);
|
||||
// $this->app->bind(NominationSeatingController::class, ScobdaNominationSeatingController::class);
|
||||
}
|
||||
|
||||
public function boot(): void
|
||||
|
|
@ -40,6 +41,7 @@ class NominationEnsembleServiceProvider extends ServiceProvider
|
|||
// meobda implementation
|
||||
$this->app->bind(NominationEnsembleController::class, MeobdaNominationEnsembleController::class);
|
||||
$this->app->bind(NominationEnsembleEntryController::class, MeobdaNominationEnsembleEntryController::class);
|
||||
$this->app->bind(NominationAdminController::class, MeobdaNominationAdminController::class);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,9 +17,10 @@ class StudentFactory extends Factory
|
|||
*/
|
||||
public function definition(): array
|
||||
{
|
||||
$school = School::factory()->create();
|
||||
return [
|
||||
'school_id' => $school->id,
|
||||
'school_id' => function () {
|
||||
return School::factory()->create()->id;
|
||||
},
|
||||
'first_name' => fake()->firstName(),
|
||||
'last_name' => fake()->lastName(),
|
||||
'grade' => rand(7, 12),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,74 @@
|
|||
<x-layout.app>
|
||||
|
||||
<x-slot:page_title>Nomination Administration</x-slot:page_title>
|
||||
<x-card.card class="mb-3">
|
||||
<x-card.heading>Filters</x-card.heading>
|
||||
<x-form.form method="GET" action="{{route('nomination.admin.index')}}">
|
||||
<input type="hidden" name="newFilterParameters" value="true">
|
||||
<x-form.body-grid class="my-2">
|
||||
<x-form.select name="school" onchange="this.form.submit()">
|
||||
|
||||
<x-slot:label>School</x-slot:label>
|
||||
<option value="">All</option>
|
||||
@foreach($schools as $school)
|
||||
<option value="{{ $school->id }}"
|
||||
@if($school->id == ($filterData['school'] ?? null)) SELECTED @endif>
|
||||
{{ $school->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</x-form.select>
|
||||
|
||||
<x-form.select name="ensemble" onchange="this.form.submit()">
|
||||
<x-slot:label>Ensemble</x-slot:label>
|
||||
<option value="">All</option>
|
||||
@foreach($ensembles as $ensemble)
|
||||
<option value="{{ $ensemble->id }}"
|
||||
@if($ensemble->id == ($filterData['ensemble'] ?? null)) SELECTED @endif>
|
||||
{{ $ensemble->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</x-form.select>
|
||||
|
||||
<x-form.select name="section" onchange="this.form.submit()" colspan="2">
|
||||
<x-slot:label>Ensemble / Instrument</x-slot:label>
|
||||
<option value="">All</option>
|
||||
@foreach ($sections as $value => $name)
|
||||
<option value="{{$value}}"
|
||||
@if($value == ($filterData['section'] ?? null)) SELECTED @endif>
|
||||
{{$name}}</option>
|
||||
@endforeach
|
||||
</x-form.select>
|
||||
|
||||
|
||||
</x-form.body-grid>
|
||||
</x-form.form>
|
||||
</x-card.card>
|
||||
|
||||
|
||||
<div class="px-3">
|
||||
{{ $nominations->onEachSide(3)->links() }}
|
||||
</div>
|
||||
<x-card.card class="mt-3">
|
||||
<x-card.heading>Nominations</x-card.heading>
|
||||
<x-table.table id="nominationTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<x-table.th>Name</x-table.th>
|
||||
<x-table.th>School</x-table.th>
|
||||
<x-table.th>Nominated For</x-table.th>
|
||||
</tr>
|
||||
</thead>
|
||||
<x-table.body>
|
||||
@foreach($nominations as $nomination)
|
||||
<tr>
|
||||
<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>
|
||||
</tr>
|
||||
@endforeach
|
||||
</x-table.body>
|
||||
</x-table.table>
|
||||
</x-card.card>
|
||||
|
||||
|
||||
</x-layout.app>
|
||||
Loading…
Reference in New Issue