ranker = $ranker; } public function status() { $auditions = Audition::forAdvancement() ->with('flags') ->withCount([ 'entries' => function ($query) { $query->where('for_advancement', 1); }, ]) ->withCount([ 'unscoredEntries' => function ($query) { $query->where('for_advancement', 1); }, ]) ->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; $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, 'published' => $audition->hasFlag('advancement_published'), ]; }); return view('tabulation.advancement.status', compact('auditionData')); } public function ranking(Request $request, Audition $audition) { $entries = $this->ranker->rank('advancement', $audition); $entries->load('advancementVotes'); $scoringComplete = $entries->every(function ($entry) { return $entry->scoring_complete; }); return view('tabulation.advancement.ranking', compact('audition', 'entries', 'scoringComplete')); } public function setAuditionPassers(Request $request, Audition $audition) { $passingEntries = $request->input('pass'); $passingEntries = array_keys($passingEntries); $audition->addFlag('advancement_published'); $entries = Entry::whereIn('id', $passingEntries)->get(); foreach ($entries as $entry) { $entry->addFlag('will_advance'); } return redirect()->route('advancement.ranking', ['audition' => $audition->id])->with('success', 'Passers have been set successfully'); } public function clearAuditionPassers(Request $request, Audition $audition) { $audition->removeFlag('advancement_published'); foreach ($audition->entries as $entry) { $entry->removeFlag('will_advance'); } return redirect()->route('advancement.ranking', ['audition' => $audition->id])->with('success', 'Passers have been cleared successfully'); } }