diff --git a/app/Http/Controllers/Tabulation/AdvancementController.php b/app/Http/Controllers/Tabulation/AdvancementController.php index 5b18550..de0498f 100644 --- a/app/Http/Controllers/Tabulation/AdvancementController.php +++ b/app/Http/Controllers/Tabulation/AdvancementController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Tabulation; +use App\Actions\Tabulation\CalculateAuditionScores; use App\Actions\Tabulation\RankAuditionEntries; use App\Http\Controllers\Controller; use App\Models\Audition; @@ -11,41 +12,52 @@ use Illuminate\Support\Facades\Cache; class AdvancementController extends Controller { - protected RankAuditionEntries $ranker; - - public function __construct(RankAuditionEntries $ranker) - { - $this->ranker = $ranker; - } - public function status() { + // Total auditions scores if we haven't done it lately + if (! Cache::has('advancement_status_audition_totaler_throttle')) { + $lock = Cache::lock('advancement_status_audition_totaler_lock'); + + if ($lock->get()) { + try { + $totaler = app(CalculateAuditionScores::class); + foreach (Audition::forAdvancement()->with('judges')->get() as $audition) { + $totaler($audition); + } + + // set throttle + Cache::put('advancement_status_audition_totaler_throttle', true, 15); + } finally { + $lock->release(); + } + } + } + $auditions = Audition::forAdvancement() ->with('flags') ->withCount([ 'entries' => function ($query) { - $query->where('for_advancement', 1); + $query->where('for_advancement', true); }, ]) ->withCount([ 'unscoredEntries' => function ($query) { - $query->where('for_advancement', 1); + $query->where('for_advancement', true); }, ]) + ->orderBy('score_order') ->get(); + $auditionData = []; - $auditions->each(function ($audition) use (&$auditionData) { - $scoredPercent = ($audition->entries_count > 0) ? - round((($audition->entries_count - $audition->unscored_entries_count) / $audition->entries_count) * 100) - : 100; + $auditions->each(function (Audition $audition) use (&$auditionData) { $auditionData[] = [ 'id' => $audition->id, 'name' => $audition->name, 'entries_count' => $audition->entries_count, 'unscored_entries_count' => $audition->unscored_entries_count, 'scored_entries_count' => $audition->entries_count - $audition->unscored_entries_count, - 'scored_percentage' => $scoredPercent, - 'scoring_complete' => $audition->unscored_entries_count == 0, + 'scored_percentage' => $audition->entries_count > 0 ? ((($audition->entries_count - $audition->unscored_entries_count) / $audition->entries_count) * 100) : 0, + 'scoring_complete' => $audition->unscored_entries_count === 0, 'published' => $audition->hasFlag('advancement_published'), ]; }); @@ -55,11 +67,12 @@ class AdvancementController extends Controller public function ranking(Request $request, Audition $audition) { - $entries = $this->ranker->rank('advancement', $audition); - $entries->load('advancementVotes'); + $ranker = app(RankAuditionEntries::class); + $entries = $ranker($audition, 'advancement'); + $entries->load(['advancementVotes', 'totalScore', 'student.school']); $scoringComplete = $entries->every(function ($entry) { - return $entry->score_totals[0] >= 0 || $entry->hasFlag('no_show'); + return $entry->totalScore || $entry->hasFlag('no_show'); }); return view('tabulation.advancement.ranking', compact('audition', 'entries', 'scoringComplete')); diff --git a/app/Http/Controllers/Tabulation/SeatingStatusController.php b/app/Http/Controllers/Tabulation/SeatingStatusController.php index fca1b6a..e31721f 100644 --- a/app/Http/Controllers/Tabulation/SeatingStatusController.php +++ b/app/Http/Controllers/Tabulation/SeatingStatusController.php @@ -15,6 +15,7 @@ class SeatingStatusController extends Controller */ public function __invoke(Request $request) { + // Total auditions scores if we haven't done it lately if (! Cache::has('seating_status_audition_totaler_throttle')) { $lock = Cache::lock('seating_status_audition_totaler_lock'); diff --git a/resources/views/tabulation/advancement/results-table.blade.php b/resources/views/tabulation/advancement/results-table.blade.php index 0cba0b4..9d3f81e 100644 --- a/resources/views/tabulation/advancement/results-table.blade.php +++ b/resources/views/tabulation/advancement/results-table.blade.php @@ -16,22 +16,15 @@ @foreach($entries as $entry) - @php - if ($entry->score_totals[0] < 0) { - $score = $entry->score_message; - } else { - $score = number_format($entry->score_totals[0] ?? 0,4); - } - @endphp - {{ $entry->rank }} + {{ $entry->rank('advancement') }} {{ $entry->id }} {{ $entry->draw_number }} {{ $entry->student->full_name() }} {{ $entry->student->school->name }} - {{ $score }} + {{ $entry->totalScore->advancement_total }} @foreach($entry->advancementVotes as $vote)