id)->delete(); } // bail out if a total score is already calculated if (EntryTotalScore::where('entry_id', $entry->id)->count() > 0) { return; } $requiredSubscores = $entry->audition->scoringGuide->subscores; $newTotaledScore = EntryTotalScore::make(); $newTotaledScore->entry_id = $entry->id; // deal with seating scores $scoreSheets = ScoreSheet::where('entry_id', $entry->id)->orderBy('seating_total', 'desc')->get(); if (auditionSetting('olympic_scoring' && $scoreSheets->count() > 2)) { // under olympic scoring, drop the first and last element $scoreSheets->shift(); $scoreSheets->pop(); } $newTotaledScore->seating_total = $scoreSheets->avg('seating_total'); $seatingSubscores = $requiredSubscores ->filter(fn ($subscore) => $subscore->for_seating == true) ->sortBy('tiebreak_order'); $total_seating_subscores = []; foreach ($seatingSubscores as $subscore) { $runningTotal = 0; foreach ($scoreSheets as $scoreSheet) { $runningTotal += $scoreSheet->subscores[$subscore->id]['score']; } $total_seating_subscores[] = $runningTotal / $scoreSheets->count(); } $newTotaledScore->seating_subscore_totals = $total_seating_subscores; // deal with advancement scores $scoreSheets = ScoreSheet::where('entry_id', $entry->id)->orderBy('advancement_total', 'desc')->get(); if (auditionSetting('olympic_scoring' && $scoreSheets->count() > 2)) { // under olympic scoring, drop the first and last element $scoreSheets->shift(); $scoreSheets->pop(); } $newTotaledScore->advancement_total = $scoreSheets->avg('advancement_total'); $advancement_subscores = $requiredSubscores ->filter(fn ($subscore) => $subscore->for_advance == true) ->sortBy('tiebreak_order'); $total_advancement_subscores = []; foreach ($advancement_subscores as $subscore) { $runningTotal = 0; foreach ($scoreSheets as $scoreSheet) { $runningTotal += $scoreSheet->subscores[$subscore->id]['score']; } $total_advancement_subscores[] = $runningTotal / $scoreSheets->count(); } $newTotaledScore->advancement_subscore_totals = $total_advancement_subscores; $newTotaledScore->save(); dd($newTotaledScore); } }