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, EnterScore $scoreRecorder) { $publishedCheck = $this->checkIfPublished($entry); if ($publishedCheck) { return $publishedCheck; } foreach ($request->all() as $key => $value) { if (! str_contains($key, 'judge')) { continue; } $judge_id = str_replace('judge', '', $key); $judge = User::find($judge_id); $existingScore = ScoreSheet::where('entry_id', $entry->id) ->where('user_id', $judge->id)->first(); if ($existingScore === null) { $existingScore = false; } try { $scoreRecorder($judge, $entry, $value, $existingScore); } catch (ScoreEntryException $e) { return redirect()->route('scores.entryScoreSheet', ['entry_id' => $entry->id]) ->with('error', $e->getMessage()); } } // Since we're entering a score, this apparently isn't a no show. $entry->removeFlag('no_show'); return redirect()->route('scores.chooseEntry')->with('success', '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; } }