find($request->input('entry_id')); $judges = $entry->audition->room->judges; $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'); } return view('tabulation.entry_score_sheet', compact('entry','judges','scoring_guide','subscores')); } public function saveEntryScoreSheet(Request $request, Entry $entry) { $judges = $entry->audition->room->judges; // Check if there is already a ScoreSheet for the entry $entry by judge $judge ( replaced this by making the last function updateOrCreate instead of Create) // foreach ($judges as $judge) { // $scoreSheet = ScoreSheet::where('entry_id',$entry->id)->where('user_id',$judge->id)->first(); // if ($scoreSheet) { // return redirect(url()->previous())->with('error', $judge->full_name() . ' already scored this entry'); // } // } $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' => $entry->id, 'user_id' => $judge->id], ['subscores' => json_encode($scoresToSave)] ); } return redirect()->route('tabulation.chooseEntry')->with('success',count($preparedScoreSheets) . " Scores created"); } }