diff --git a/app/Http/Controllers/Tabulation/TabulationController.php b/app/Http/Controllers/Tabulation/TabulationController.php index b00b271..c6ecbce 100644 --- a/app/Http/Controllers/Tabulation/TabulationController.php +++ b/app/Http/Controllers/Tabulation/TabulationController.php @@ -82,7 +82,9 @@ class TabulationController extends Controller public function status() { - $auditions = Audition::with(['entries.scoreSheets','room.judges'])->orderBy('score_order')->get(); + $auditions = Audition::with(['entries' => function($query) { + $query->withCount('scoreSheets'); + },'room.judges'])->orderBy('score_order')->get(); return view('tabulation.status',compact('auditions')); } @@ -93,7 +95,7 @@ class TabulationController extends Controller // $entries = $entries->sortByDesc(function ($entry) { // return $entry->totalScore(); // }); - $entries = $audition->rankedEntries()->load('student.entries','scoreSheets.audition.scoringGuide.subscores'); + $entries = $audition->rankedEntries()->load('student.entries.audition','scoreSheets.audition.scoringGuide.subscores'); $judges = $audition->judges(); return view('tabulation.auditionSeating',compact('audition','entries','judges')); } diff --git a/app/Models/Audition.php b/app/Models/Audition.php index ee3a19c..e00bfe1 100644 --- a/app/Models/Audition.php +++ b/app/Models/Audition.php @@ -16,6 +16,21 @@ class Audition extends Model { use HasFactory; protected $guarded = []; + protected $rankedEntries = null; + protected static $completeAuditions = null; + + public static function getCompleteAuditions() + { + if (self::$completeAuditions) return self::$completeAuditions; + $auditions = Audition::with(['entries' => function($query) { + $query->withCount('scoreSheets'); + },'room.judges'])->get(); + self::$completeAuditions = $auditions->filter(function ($audition) { + return $audition->scoringIsComplete(); + }); + return self::$completeAuditions; + + } public static function deadlineNotPast() { @@ -123,16 +138,6 @@ class Audition extends Model return null; } -// public function judges() -// { -// // Very inefficient, need a better way -// return User::join('room_user', 'users.id', '=', 'room_user.user_id') -// ->join('rooms', 'room_user.room_id', '=', 'rooms.id') -// ->join('auditions', 'rooms.id', '=', 'auditions.room_id') -// ->where('auditions.id', $this->id) -// ->select('users.*') // avoid getting other tables' columns -// ->get(); -// } /** * @return Collection */ @@ -144,27 +149,40 @@ class Audition extends Model public function scoredEntries() { return $this->entries->filter(function($entry) { - return $entry->scoreSheets->count() >= $this->judges()->count(); + return $entry->score_sheets_count >= $this->judges()->count(); }); } public function rankedEntries() { - $entries = $this->entries()->with(['audition.scoringGuide.subscores','scoreSheets.judge'])->get(); - $entries = $entries->all(); - usort($entries, function($a,$b) { - $aScores = $a->finalScoresArray(); - $bScores = $b->finalScoresArray(); + if (! $this->rankedEntries) { + $entries = $this->entries()->with(['audition.scoringGuide.subscores', 'scoreSheets.judge'])->get(); + $entries = $entries->all(); + usort($entries, function ($a, $b) { + $aScores = $a->finalScoresArray(); + $bScores = $b->finalScoresArray(); - $length = min(count($aScores), count($bScores)); - for ($i=0; $i<$length; $i++) { - if ($aScores[$i] !== $bScores[$i]) { - return $bScores[$i] - $aScores[$i]; + $length = min(count($aScores), count($bScores)); + for ($i = 0; $i < $length; $i++) { + if ($aScores[$i] !== $bScores[$i]) { + return $bScores[$i] - $aScores[$i]; + } } - } - return 0; - }); - $collection = new \Illuminate\Database\Eloquent\Collection($entries); - return $collection; + return 0; + }); + $collection = new \Illuminate\Database\Eloquent\Collection($entries); + $this->rankedEntries = $collection; + } + return $this->rankedEntries; + } + + public function scoringIsComplete() + { + if (self::$completeAuditions) { + // check and see if this audition is in the list of complete auditions + return self::$completeAuditions->contains('id', $this->id); + } + + return $this->scoredEntries()->count() == $this->entries->count(); } } diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 5fd8a6b..de18d3d 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -43,7 +43,16 @@ class Entry extends Model } - function verifyScoreSheets() + public function getScoreSheetsCountAttribute() + { + if (!isset($this->attributes['score_sheets_count'])) { + $this->attributes['score_sheets_count'] = $this->scoreSheets()->count(); + } + + return $this->attributes['score_sheets_count']; + } + + public function verifyScoreSheets() { if ($this->hasCheckedScoreSheets) return true; $judges = $this->audition->room->judges; diff --git a/resources/views/components/doubler-block.blade.php b/resources/views/components/doubler-block.blade.php new file mode 100644 index 0000000..8424cae --- /dev/null +++ b/resources/views/components/doubler-block.blade.php @@ -0,0 +1,43 @@ +@php use App\Models\Audition; @endphp +@props(['student']) +{{--complete badge--}} +{{--

Complete

--}} +{{--in progress badge--}} +{{--

In progress

--}} + + + diff --git a/resources/views/tabulation/auditionSeating.blade.php b/resources/views/tabulation/auditionSeating.blade.php index 198b64b..51abf3d 100644 --- a/resources/views/tabulation/auditionSeating.blade.php +++ b/resources/views/tabulation/auditionSeating.blade.php @@ -22,7 +22,11 @@ {{ $entry->id }} {{ $entry->draw_number }} {{ $entry->student->full_name(true) }} - {{ $entry->student->isDoubler() ? 'Doubler':'' }} + + @if($entry->student->isDoubler()) + + @endif + {{-- @foreach($judges as $judge)--}} {{-- --}} {{-- @php--}} diff --git a/resources/views/tabulation/status.blade.php b/resources/views/tabulation/status.blade.php index 65b5ce6..a637c92 100644 --- a/resources/views/tabulation/status.blade.php +++ b/resources/views/tabulation/status.blade.php @@ -20,7 +20,7 @@ {{ $audition->scoredEntries()->count() }} / {{ $audition->entries->count() }} Scored - @if($audition->scoredEntries()->count() == $audition->entries->count()) + @if($audition->scoringIsComplete()) @endif diff --git a/resources/views/test.blade.php b/resources/views/test.blade.php index fffc920..abd7fbd 100644 --- a/resources/views/test.blade.php +++ b/resources/views/test.blade.php @@ -13,11 +13,10 @@ Test Page @php - $audition = Audition::find(2); - $ranked = $audition->rankedEntries(); - dump($ranked); - echo "
plain entries
"; - dump($audition->entries()); + $a = Audition::find(9); + dump ($a->rankedEntries()); + dump ($a->rankedEntries()); + dump ($a->rankedEntries()); @endphp