Initial work on recaps
This commit is contained in:
parent
ce4e3e6984
commit
c660e3b4f4
|
|
@ -0,0 +1,60 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use App\Actions\Tabulation\RankAuditionEntries;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Audition;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
|
||||||
|
class RecapController extends Controller
|
||||||
|
{
|
||||||
|
public function selectAudition()
|
||||||
|
{
|
||||||
|
$auditions = Audition::orderBy('score_order')->get();
|
||||||
|
|
||||||
|
return view('admin.recap.selectAudition', compact('auditions'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function showRecap(Audition $audition)
|
||||||
|
{
|
||||||
|
$ranker = App::make(RankAuditionEntries::class);
|
||||||
|
$subscores = $audition->scoringGuide->subscores()->orderBy('tiebreak_order')->get();
|
||||||
|
$judges = $audition->judges;
|
||||||
|
$entries = $ranker->rank('seating', $audition);
|
||||||
|
|
||||||
|
$recapRows = [];
|
||||||
|
$rowOn = 1;
|
||||||
|
foreach ($entries as $entry) {
|
||||||
|
$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;
|
||||||
|
foreach ($entry->scoreSheets as $sheet) {
|
||||||
|
foreach ($sheet->subscores as $subscore) {
|
||||||
|
$recapRows[$rowOn]['subscores']['judge'.$sheet->user_id][$subscore['subscore_name']] = $subscore['score'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$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];
|
||||||
|
});
|
||||||
|
$thisOrdinal = 1;
|
||||||
|
foreach ($sortedEntries as $entry) {
|
||||||
|
$subscoreOrdinals['entry'.$entry->id][$ssOn] = $thisOrdinal;
|
||||||
|
$thisOrdinal++;
|
||||||
|
}
|
||||||
|
$ssOn++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('admin.recap.recap', compact('audition', 'subscores', 'judges', 'entries', 'recapRows', 'subscoreOrdinals'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
<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 rowspan="2">#</x-table.th>
|
||||||
|
<x-table.th rowspan="2">Name</x-table.th>
|
||||||
|
@foreach($subscores as $subscore)
|
||||||
|
<x-table.th colspan="{{ $judges->count() + 1 }}">{{ $subscore->name }}</x-table.th>
|
||||||
|
@endforeach
|
||||||
|
<x-table.th rowspan="2">Total</x-table.th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
@foreach($subscores as $subscore)
|
||||||
|
@foreach($judges as $judge)
|
||||||
|
<x-table.th>{{ $judge->last_name }}</x-table.th>
|
||||||
|
@endforeach
|
||||||
|
<x-table.th>Tot</x-table.th>
|
||||||
|
@endforeach
|
||||||
|
</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 ($ssTotal = 0)
|
||||||
|
@php ($ssOn = 1)
|
||||||
|
@foreach($subscores as $subscore)
|
||||||
|
@foreach($judges as $judge)
|
||||||
|
<x-table.td>
|
||||||
|
{{ $row['subscores']['judge'.$judge->id][$subscore->name] }}
|
||||||
|
</x-table.td>
|
||||||
|
@php ($ssTotal += $row['subscores']['judge'.$judge->id][$subscore->name])
|
||||||
|
@endforeach
|
||||||
|
<x-table.td>
|
||||||
|
{{ $ssTotal }}<br>
|
||||||
|
( {{ $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('admin.recap.recap',$audition->id)}}">{{$audition->name}}</a>
|
||||||
|
</x-card.list.row>
|
||||||
|
@endforeach
|
||||||
|
</x-card.list.body>
|
||||||
|
</x-card.card>
|
||||||
|
</x-layout.app>
|
||||||
|
|
@ -14,6 +14,7 @@ use App\Http\Controllers\Admin\PrintCards;
|
||||||
use App\Http\Controllers\Admin\PrintRoomAssignmentsController;
|
use App\Http\Controllers\Admin\PrintRoomAssignmentsController;
|
||||||
use App\Http\Controllers\Admin\PrintSignInSheetsController;
|
use App\Http\Controllers\Admin\PrintSignInSheetsController;
|
||||||
use App\Http\Controllers\Admin\PrintStandNameTagsController;
|
use App\Http\Controllers\Admin\PrintStandNameTagsController;
|
||||||
|
use App\Http\Controllers\Admin\RecapController;
|
||||||
use App\Http\Controllers\Admin\RoomController;
|
use App\Http\Controllers\Admin\RoomController;
|
||||||
use App\Http\Controllers\Admin\SchoolController;
|
use App\Http\Controllers\Admin\SchoolController;
|
||||||
use App\Http\Controllers\Admin\ScoringGuideController;
|
use App\Http\Controllers\Admin\ScoringGuideController;
|
||||||
|
|
@ -27,6 +28,8 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('admin/')->
|
||||||
Route::get('/logs', App\Http\Controllers\Admin\LogViewer::class)->name('admin.view_logs');
|
Route::get('/logs', App\Http\Controllers\Admin\LogViewer::class)->name('admin.view_logs');
|
||||||
Route::get('/export_results', ExportResultsController::class)->name('admin.export_results');
|
Route::get('/export_results', ExportResultsController::class)->name('admin.export_results');
|
||||||
Route::get('/print_stand_name_tags', PrintStandNameTagsController::class)->name('admin.print_stand_name_tags');
|
Route::get('/print_stand_name_tags', PrintStandNameTagsController::class)->name('admin.print_stand_name_tags');
|
||||||
|
Route::get('/recap', [RecapController::class, 'selectAudition'])->name('admin.recap.selectAudition');
|
||||||
|
Route::get('/recap/{audition}', [RecapController::class, 'showRecap'])->name('admin.recap.recap');
|
||||||
|
|
||||||
Route::post('/auditions/roomUpdate', [
|
Route::post('/auditions/roomUpdate', [
|
||||||
AuditionController::class, 'roomUpdate',
|
AuditionController::class, 'roomUpdate',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue