Merge branch 'master' into pass_fail_prelims

* master:
  Fix issue where entry observer was taking too long during draw. No need to update doublers just to run the draw.
  Fix issue where directors could add students down to first grade if no nomination ensembles were defined.
This commit is contained in:
Matt Young 2025-10-02 21:06:23 -05:00
commit 3b6fbc16f1
3 changed files with 30 additions and 5 deletions

View File

@ -6,6 +6,7 @@ use App\Actions\Tabulation\DoublerSync;
use App\Models\Audition; use App\Models\Audition;
use App\Models\Doubler; use App\Models\Doubler;
use App\Models\Entry; use App\Models\Entry;
use Illuminate\Support\Facades\Request;
use function auditionSetting; use function auditionSetting;
@ -50,9 +51,11 @@ class EntryObserver
*/ */
public function updated(Entry $entry): void public function updated(Entry $entry): void
{ {
if (Request::route()->getName() !== 'admin.draw.store') { // Don't update doubler table during draw
$syncer = app(DoublerSync::class); $syncer = app(DoublerSync::class);
// Update doubler table when an entry is updated // Update doubler table when an entry is updated
$syncer(); $syncer();
}
// Log entry changes // Log entry changes
$message = 'Updated Entry #'.$entry->id; $message = 'Updated Entry #'.$entry->id;

View File

@ -2,8 +2,10 @@
use App\Actions\Tabulation\EnterScore; use App\Actions\Tabulation\EnterScore;
use App\Exceptions\ScoreEntryException; use App\Exceptions\ScoreEntryException;
use App\Models\Audition;
use App\Models\AuditLogEntry; use App\Models\AuditLogEntry;
use App\Models\Entry; use App\Models\Entry;
use App\Models\NominationEnsemble;
use App\Models\User; use App\Models\User;
use App\Settings; use App\Settings;
use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\App;
@ -58,3 +60,23 @@ function enterScore(User $user, Entry $entry, array $scores): \App\Models\ScoreS
return $scoreEntry($user, $entry, $scores); return $scoreEntry($user, $entry, $scores);
} }
function minimumStudentGrade()
{
$minAuditionGrade = Audition::min('minimum_grade');
if (auditionSetting('nomination_ensemble_rules') == 'disabled' || NominationEnsemble::count() == 0) {
return $minAuditionGrade;
}
return min(Audition::min('minimum_grade'), NominationEnsemble::min('minimum_grade'));
}
function maximumStudentGrade()
{
$maxAuditionGrade = Audition::max('maximum_grade');
if (auditionSetting('nomination_ensemble_rules') == 'disabled' || NominationEnsemble::count() == 0) {
return $maxAuditionGrade;
}
return max(Audition::max('maximum_grade'), NominationEnsemble::max('maximum_grade'));
}

View File

@ -13,8 +13,8 @@
<x-form.select name="grade"> <x-form.select name="grade">
<x-slot:label>Grade</x-slot:label> <x-slot:label>Grade</x-slot:label>
@php($n = min(Audition::min('minimum_grade'),NominationEnsemble::min('minimum_grade'))) @php($n = minimumStudentGrade())
@php($maxGrade = max(Audition::max('maximum_grade'), NominationEnsemble::max('maximum_grade'))) @php($maxGrade = maximumStudentGrade())
@while($n <= $maxGrade) @while($n <= $maxGrade)
<option value="{{ $n }}">{{ $n }}</option> <option value="{{ $n }}">{{ $n }}</option>
@php($n++); @php($n++);