59 lines
1.9 KiB
PHP
59 lines
1.9 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();
|
|
|
|
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'));
|
|
}
|
|
}
|