Block publication of results where no entries succeed.

Closes #94
This commit is contained in:
Matt Young 2025-06-30 08:47:51 -05:00
parent ad4c2e80b6
commit f0ad56e0d2
4 changed files with 17 additions and 1 deletions

View File

@ -2,6 +2,7 @@
namespace App\Actions\Tabulation;
use App\Exceptions\AuditionAdminException;
use App\Models\Audition;
use App\Models\Seat;
use Illuminate\Support\Facades\Cache;
@ -15,6 +16,9 @@ class PublishSeats
public function __invoke(Audition $audition, array $seats): void
{
if (count($seats) === 0) {
throw new AuditionAdminException('Cannot publish an audition with no seats.');
}
// Delete from the seats table where audition_id = $audition->id
Seat::where('audition_id', $audition->id)->delete();
foreach ($seats as $seat) {

View File

@ -10,6 +10,8 @@ use App\Models\EntryFlag;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use function is_null;
class AdvancementController extends Controller
{
public function status()
@ -80,7 +82,12 @@ class AdvancementController extends Controller
public function setAuditionPassers(Request $request, Audition $audition)
{
$passingEntries = $request->input('pass');
if (is_null($passingEntries) || count($passingEntries) < 1) {
return redirect()->route('advancement.ranking', ['audition' => $audition->id])->with('error',
'Cannot publish advancement if no entries advance');
}
$audition->addFlag('advancement_published');
if (! is_null($passingEntries)) {

View File

@ -260,7 +260,11 @@ class SeatAuditionFormController extends Controller
}
}
}
$publisher($audition, $proposal);
try {
$publisher($audition, $proposal);
} catch (AuditionAdminException $e) {
return redirect()->route('seating.audition', [$audition])->with('error', $e->getMessage());
}
session()->forget('proposedSeatingArray-'.$audition->id);
return redirect()->route('seating.audition', [$audition]);

View File

@ -216,6 +216,7 @@
<x-form.form method="POST" action="{{ route('seating.audition.clearDraft',[$audition]) }}">
<x-form.button class="mb-3">Clear Draft</x-form.button>
</x-form.form>
{{-- TODO Hide the publish button if there are no seats --}}
<x-form.form method="POST"
action="{{ route('seating.audition.publishSeats',[$audition]) }}">
<x-form.button class="mb-3">Publish</x-form.button>