auditionadmin/app/Http/Controllers/RecapController.php

66 lines
2.2 KiB
PHP

<?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();
$auditions = $auditions->filter(function ($audition) {
return $audition->hasFlag('seats_published');
});
return view('recap.selectAudition', compact('auditions'));
}
public function showRecap(Audition $audition)
{
if (! $audition->hasFlag('seats_published')) {
return redirect()->route('recap.selectAudition')->with('error',
'Recaps only available for published auditions');
}
$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'));
}
}