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 () {