From b2bb3654ff282ac37425e75890447af67d204b57 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Fri, 12 Jul 2024 21:47:05 -0500 Subject: [PATCH] Showing doublers working --- .../Tabulation/SeatAuditionController.php | 18 +++++- app/Providers/AppServiceProvider.php | 2 +- app/Services/AuditionService.php | 62 +++++++++++-------- .../auditionSeating-doubler-block.blade.php | 24 +++---- .../auditionSeating-results-table.blade.php | 14 +++-- 5 files changed, 73 insertions(+), 47 deletions(-) diff --git a/app/Http/Controllers/Tabulation/SeatAuditionController.php b/app/Http/Controllers/Tabulation/SeatAuditionController.php index 7e8970a..fe1ced3 100644 --- a/app/Http/Controllers/Tabulation/SeatAuditionController.php +++ b/app/Http/Controllers/Tabulation/SeatAuditionController.php @@ -6,6 +6,7 @@ use App\Actions\Tabulation\CalculateEntryScore; use App\Actions\Tabulation\RankAuditionEntries; use App\Http\Controllers\Controller; use App\Models\Audition; +use App\Services\AuditionService; use App\Services\DoublerService; use App\Services\EntryService; use Illuminate\Http\Request; @@ -21,16 +22,20 @@ class SeatAuditionController extends Controller protected EntryService $entryService; + protected AuditionService $auditionService; + public function __construct( CalculateEntryScore $calc, RankAuditionEntries $ranker, DoublerService $doublerService, - EntryService $entryService + EntryService $entryService, + AuditionService $auditionService, ) { $this->calc = $calc; $this->ranker = $ranker; $this->doublerService = $doublerService; $this->entryService = $entryService; + $this->auditionService = $auditionService; } public function __invoke(Request $request, Audition $audition) @@ -46,13 +51,20 @@ class SeatAuditionController extends Controller $isDoubler = true; $doubleData = []; $doublerEntries = $doublers[$entry->student->id]['entries']; + foreach ($doublerEntries as $doublerEntry) { - Log::debug('doubler check for entry ' . $doublerEntry->id); - log::debug('Rank: ' . $this->entryService->rankOfEntry('seating', $doublerEntry)); + $limits = $this->auditionService->getSeatingLimits($doublerEntry->audition); + $limits = $limits->reject(function ($lim) { + return $lim['limit'] === 0; + }); $doubleData[] = [ + 'audition' => $doublerEntry->audition, 'name' => $doublerEntry->audition->name, 'entryId' => $doublerEntry->id, 'rank' => $this->entryService->rankOfEntry('seating', $doublerEntry), + 'limits' => $limits, + 'status' => 'undecided', // Will be undecided, accepted, or declined + 'unscored_in_audition' => $doublerEntry->audition->unscoredEntries()->count(), ]; } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 3bd6621..ca321fa 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -71,6 +71,6 @@ class AppServiceProvider extends ServiceProvider User::observe(UserObserver::class); SeatingLimit::observe(SeatingLimitObserver::class); - Model::preventLazyLoading(! app()->isProduction()); + //Model::preventLazyLoading(! app()->isProduction()); } } diff --git a/app/Services/AuditionService.php b/app/Services/AuditionService.php index d38648c..1e16873 100644 --- a/app/Services/AuditionService.php +++ b/app/Services/AuditionService.php @@ -4,6 +4,8 @@ namespace App\Services; use App\Exceptions\AuditionServiceException; use App\Models\Audition; +use App\Models\Ensemble; +use App\Models\SeatingLimit; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Cache; @@ -43,37 +45,11 @@ class AuditionService 'advancement' => 'for_advance', }; $audition->load('scoringGuide.subscores'); + return $audition->scoringGuide->subscores->where($modeColumn, true)->sortBy($sortColumn); }); } - public function getSubscoresNEW(Audition $audition, $mode = 'seating', $sort = 'tiebreak') - { - $this->validateMode($mode); - $this->validateSort($sort); - $cacheKey = 'auditionSubscores-'.$mode.'-'.$sort; - $assignments = Cache::remember($cacheKey, 60, function () use ($audition, $mode, $sort) { - $this->validateAudition($audition); - $sortColumn = match ($sort) { - 'tiebreak' => 'tiebreak_order', - 'display' => 'display_order', - }; - $modeColumn = match ($mode) { - 'seating' => 'for_seating', - 'advancement' => 'for_advance', - }; - $allAuditions = Audition::with(['scoringGuide.subscores' => function ($query) use ($modeColumn, $sortColumn) { - $query->where($modeColumn, 1)->orderBy($sortColumn); - }])->get(); - $return = []; - foreach ( $allAuditions as $audition) { - $return[$audition->id] = $audition->scoringGuide->subscores; - } - return $return; - }); - return $assignments[$audition->id]; - } - public function getJudgesOLD(Audition $audition) { $cacheKey = 'auditionJudges-'.$audition->id; @@ -101,6 +77,38 @@ class AuditionService return $assignments[$audition->id]; } + public function getSeatingLimits(Audition $audition) + { + $cacheKey = 'auditionSeatingLimits'; + $allLimits = Cache::remember($cacheKey, 60, function () { + $lims = []; + $auditions = Audition::all(); + $ensembles = Ensemble::orderBy('rank')->get(); + foreach ($auditions as $audition) { + foreach ($ensembles as $ensemble) { + if ($ensemble->event_id !== $audition->event_id) { + continue; + } + $lims[$audition->id][$ensemble->id] = [ + 'ensemble' => $ensemble, + 'limit' => 0, + ]; + } + } + $limits = SeatingLimit::all(); + + foreach ($limits as $limit) { + $lims[$limit->audition_id][$limit->ensemble_id] = collect([ + 'ensemble' => $ensembles->find($limit->ensemble_id), + 'limit' =>$limit->maximum_accepted, + ]); + } + return collect($lims); + }); + + return collect($allLimits[$audition->id]) ?? []; + } + protected function validateAudition($audition) { if (! $audition->exists()) { diff --git a/resources/views/tabulation/auditionSeating-doubler-block.blade.php b/resources/views/tabulation/auditionSeating-doubler-block.blade.php index 9783156..85ddbfa 100644 --- a/resources/views/tabulation/auditionSeating-doubler-block.blade.php +++ b/resources/views/tabulation/auditionSeating-doubler-block.blade.php @@ -1,14 +1,14 @@ -@php($doublerEntryInfo = $doublerService->getDoublerInfo($entry->student_id)) @php($doublerButtonClasses = 'hidden rounded-md bg-white px-2.5 py-1.5 text-xs text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50 sm:block')