entry_id)->delete(); if ($score->entry->audition->hasFlag('seats_published')) { return redirect()->back()->with('error', 'Cannot delete scores for an entry where seats are published'); } if ($score->entry->audition->hasFlag('advancement_published')) { return redirect()->back()->with('error', 'Cannot delete scores for an entry where advancement is published'); } $score->delete(); return redirect()->back()->with('success', 'Score Deleted'); } public function entryScoreSheet(Request $request) { $existing_sheets = []; $entry = Entry::with(['student', 'audition.room.judges'])->find($request->input('entry_id')); $publishedCheck = $this->checkIfPublished($entry); if ($publishedCheck) { return $publishedCheck; } $judges = $entry->audition->room->judges; foreach ($judges as $judge) { $scoreSheet = ScoreSheet::where('entry_id', $entry->id)->where('user_id', $judge->id)->first(); if ($scoreSheet) { Session::flash('caution', 'Scores exist for this entry. Now editing existing scores'); $existing_sheets[$judge->id] = $scoreSheet; } } $scoring_guide = $entry->audition->scoringGuide; $subscores = $entry->audition->scoringGuide->subscores->sortBy('display_order'); if (! $entry) { return redirect()->route('tabulation.chooseEntry')->with('error', 'Entry not found'); } if ($entry->hasFlag('no_show')) { session()->flash('error', 'This entry is marked as a no-show. Entering a score will remove the no-show flag'); } return view('tabulation.entry_score_sheet', compact('entry', 'judges', 'scoring_guide', 'subscores', 'existing_sheets')); } public function saveEntryScoreSheet(Request $request, Entry $entry) { CalculatedScore::where('entry_id', $entry->id)->delete(); $publishedCheck = $this->checkIfPublished($entry); if ($publishedCheck) { return $publishedCheck; } $entry->removeFlag('no_show'); $judges = $entry->audition->room->judges; $subscores = $entry->audition->scoringGuide->subscores->sortBy('tiebreak_order'); $scoringGuide = $entry->audition->scoringGuide; $preparedScoreSheets = []; foreach ($judges as $judge) { $preparedScoreSheets[$judge->id]['user_id'] = $judge->id; $preparedScoreSheets[$judge->id]['entry_id'] = $entry->id; $scoreValidation = $scoringGuide->validateScores($request->input('judge'.$judge->id)); if ($scoreValidation != 'success') { return redirect(url()->previous())->with('error', $judge->full_name().': '.$scoreValidation)->with('oldScores', $request->all()); } $scoreSubmission = $request->input('judge'.$judge->id); $scoresToSave = []; foreach ($subscores as $subscore) { $scoresToSave[$subscore->id] = [ 'subscore_id' => $subscore->id, 'subscore_name' => $subscore->name, 'score' => intval($scoreSubmission[$subscore->id]), ]; } $preparedScoreSheets[$judge->id]['scores'] = $scoresToSave; } foreach ($preparedScoreSheets as $sheet) { ScoreSheet::updateOrCreate( ['entry_id' => $sheet['entry_id'], 'user_id' => $sheet['user_id']], ['subscores' => $sheet['scores']] ); } // TODO rewrite to use EnterScore action or clear score cache return redirect()->route('scores.chooseEntry')->with('success', count($preparedScoreSheets).' Scores saved'); } protected function checkIfPublished($entry) { // We're not going to enter scores if seats are published if ($entry->audition->hasFlag('seats_published')) { return to_route('scores.chooseEntry')->with('error', 'Cannot enter scores for entry '.$entry->id.'. '.$entry->audition->name.' seats are published'); } // Nope, not if advancement is published either if ($entry->audition->hasFlag('advancement_published')) { return to_route('scores.chooseEntry')->with('error', 'Cannot enter scores for entry '.$entry->id.'. '.$entry->audition->name.' advancement is published'); } return false; } }