Recap Work for users
This commit is contained in:
parent
0c28cbfceb
commit
e7d5794164
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Actions\Tabulation\RankAuditionEntries;
|
||||
use App\Models\Audition;
|
||||
use Illuminate\Support\Facades\App;
|
||||
|
||||
class RecapController extends Controller
|
||||
{
|
||||
public function selectAudition()
|
||||
{
|
||||
$auditions = Audition::orderBy('score_order')->get();
|
||||
|
||||
return view('recap.selectAudition', compact('auditions'));
|
||||
}
|
||||
|
||||
public function showRecap(Audition $audition)
|
||||
{
|
||||
$ranker = App::make(RankAuditionEntries::class);
|
||||
$subscores = $audition->scoringGuide->subscores()->orderBy('tiebreak_order')->get();
|
||||
$entries = $ranker->rank('seating', $audition);
|
||||
|
||||
$recapRows = [];
|
||||
$rowOn = 1;
|
||||
foreach ($entries as $entry) {
|
||||
if ($entry->hasFlag('no_show')) {
|
||||
continue;
|
||||
}
|
||||
$recapRows[$rowOn]['rank'] = $entry->raw_rank;
|
||||
$recapRows[$rowOn]['name'] = $entry->student->full_name(true);
|
||||
$recapRows[$rowOn]['school'] = $entry->student->school->name;
|
||||
$recapRows[$rowOn]['entryId'] = $entry->id;
|
||||
$recapRows[$rowOn]['scores'] = $entry['score_totals'];
|
||||
$recapRows[$rowOn]['total_score'] = $entry['score_totals'][0];
|
||||
$rowOn++;
|
||||
}
|
||||
//dd($recapRows);
|
||||
|
||||
// Calculate ordinals for each score
|
||||
$subscoreOrdinals = [];
|
||||
$ssOn = 1;
|
||||
foreach ($subscores as $subscore) {
|
||||
$sortedEntries = $entries->sortByDesc(function ($entry) use ($ssOn) {
|
||||
return $entry['score_totals'][$ssOn] ?? 0;
|
||||
});
|
||||
$thisOrdinal = 1;
|
||||
foreach ($sortedEntries as $entry) {
|
||||
$subscoreOrdinals['entry'.$entry->id][$ssOn] = $thisOrdinal;
|
||||
$thisOrdinal++;
|
||||
}
|
||||
$ssOn++;
|
||||
}
|
||||
|
||||
return view('recap.recap',
|
||||
compact('audition', 'subscores', 'entries', 'recapRows', 'subscoreOrdinals'));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<x-layout.app>
|
||||
<x-layout.page-header>{{$audition->name}} Recap</x-layout.page-header>
|
||||
|
||||
<x-card.card class="mt-3">
|
||||
<x-table.table>
|
||||
<thead>
|
||||
<tr>
|
||||
<x-table.th>#</x-table.th>
|
||||
<x-table.th>Name</x-table.th>
|
||||
@foreach($subscores as $subscore)
|
||||
<x-table.th>
|
||||
{{ $subscore->name }}<br>
|
||||
Weight: {{ $subscore->weight }}<br>
|
||||
Max: {{ $subscore->max_score }}
|
||||
</x-table.th>
|
||||
@endforeach
|
||||
<x-table.th>Final</x-table.th>
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
<x-table.body>
|
||||
@foreach($recapRows as $row)
|
||||
<tr>
|
||||
<x-table.td>{{$row['rank']}}</x-table.td>
|
||||
<x-table.td>{{$row['name']}}<br>{{$row['school']}}</x-table.td>
|
||||
|
||||
@php ($ssOn = 1)
|
||||
@foreach($subscores as $subscore)
|
||||
<x-table.td>{{ $row['scores'][$ssOn] }} ( {{ $subscoreOrdinals['entry'.$row['entryId']][$ssOn] }} )</x-table.td>
|
||||
@php ($ssOn++)
|
||||
@endforeach
|
||||
<x-table.td>{{$row['total_score']}}</x-table.td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</x-table.body>
|
||||
</x-table.table>
|
||||
</x-card.card>
|
||||
</x-layout.app>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<x-layout.app>
|
||||
<x-slot:page_title>Recap - Select Audition</x-slot:page_title>
|
||||
<x-card.card class="max-w-lg mx-auto">
|
||||
<x-card.heading>Select Audition</x-card.heading>
|
||||
<x-card.list.body>
|
||||
@foreach($auditions as $audition)
|
||||
<x-card.list.row>
|
||||
<a href="{{route('recap.recap',$audition->id)}}">{{$audition->name}}</a>
|
||||
</x-card.list.row>
|
||||
@endforeach
|
||||
</x-card.list.body>
|
||||
</x-card.card>
|
||||
</x-layout.app>
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
use App\Http\Controllers\FilterController;
|
||||
use App\Http\Controllers\MonitorController;
|
||||
use App\Http\Controllers\RecapController;
|
||||
use App\Http\Controllers\TestController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
|
|
@ -15,6 +16,8 @@ Route::get('/test', [TestController::class, 'flashTest'])->middleware('auth', 'v
|
|||
Route::view('/home', 'welcome')->middleware('guest')->name('landing');
|
||||
Route::view('/', 'landing')->name('home');
|
||||
Route::get('/results', [App\Http\Controllers\ResultsPage::class, '__invoke'])->name('results');
|
||||
Route::get('/recap', [RecapController::class, 'selectAudition'])->name('recap.selectAudition');
|
||||
Route::get('/recap/{audition}', [RecapController::class, 'showRecap'])->name('recap.recap');
|
||||
|
||||
// Filter Related Routes
|
||||
Route::prefix('filters')->middleware(['auth', 'verified'])->controller(FilterController::class)->group(function () {
|
||||
|
|
|
|||
Loading…
Reference in New Issue