auditionadmin/app/Http/Controllers/Tabulation/TabulationController.php

76 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers\Tabulation;
use App\Http\Controllers\Controller;
use App\Models\Audition;
use App\Models\Entry;
use App\Models\ScoreSheet;
use Illuminate\Http\Request;
use function dump;
use function redirect;
class TabulationController extends Controller
{
public function chooseEntry(Request $request)
{
return view('tabulation.choose_entry');
}
public function entryScoreSheet(Request $request)
{
$entry = Entry::with(['student','audition.room.judges'])->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");
}
}