auditionadmin/app/Http/Controllers/Admin/RecapController.php

61 lines
2.1 KiB
PHP

<?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] ?? 0;
});
$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'));
}
}