diff --git a/app/Http/Controllers/RecapController.php b/app/Http/Controllers/RecapController.php new file mode 100644 index 0000000..b7510db --- /dev/null +++ b/app/Http/Controllers/RecapController.php @@ -0,0 +1,58 @@ +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')); + } +} diff --git a/resources/views/recap/recap.blade.php b/resources/views/recap/recap.blade.php new file mode 100644 index 0000000..11405b3 --- /dev/null +++ b/resources/views/recap/recap.blade.php @@ -0,0 +1,38 @@ + + {{$audition->name}} Recap + + + + + + # + Name + @foreach($subscores as $subscore) + + {{ $subscore->name }}
+ Weight: {{ $subscore->weight }}
+ Max: {{ $subscore->max_score }} +
+ @endforeach + Final + + + + + @foreach($recapRows as $row) + + {{$row['rank']}} + {{$row['name']}}
{{$row['school']}}
+ + @php ($ssOn = 1) + @foreach($subscores as $subscore) + {{ $row['scores'][$ssOn] }} ( {{ $subscoreOrdinals['entry'.$row['entryId']][$ssOn] }} ) + @php ($ssOn++) + @endforeach + {{$row['total_score']}} + + @endforeach +
+
+
+
diff --git a/resources/views/recap/selectAudition.blade.php b/resources/views/recap/selectAudition.blade.php new file mode 100644 index 0000000..ef2a7cf --- /dev/null +++ b/resources/views/recap/selectAudition.blade.php @@ -0,0 +1,13 @@ + + Recap - Select Audition + + Select Audition + + @foreach($auditions as $audition) + + {{$audition->name}} + + @endforeach + + + diff --git a/routes/web.php b/routes/web.php index a215e8e..5f54f73 100644 --- a/routes/web.php +++ b/routes/web.php @@ -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 () {