diff --git a/app/Actions/Tabulation/PublishSeats.php b/app/Actions/Tabulation/PublishSeats.php index 8b2928f..5b14e4f 100644 --- a/app/Actions/Tabulation/PublishSeats.php +++ b/app/Actions/Tabulation/PublishSeats.php @@ -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) { diff --git a/app/Http/Controllers/Tabulation/AdvancementController.php b/app/Http/Controllers/Tabulation/AdvancementController.php index 10bbb7c..f783fde 100644 --- a/app/Http/Controllers/Tabulation/AdvancementController.php +++ b/app/Http/Controllers/Tabulation/AdvancementController.php @@ -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)) { diff --git a/app/Http/Controllers/Tabulation/SeatAuditionFormController.php b/app/Http/Controllers/Tabulation/SeatAuditionFormController.php index a1646b1..5fde077 100644 --- a/app/Http/Controllers/Tabulation/SeatAuditionFormController.php +++ b/app/Http/Controllers/Tabulation/SeatAuditionFormController.php @@ -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]); diff --git a/resources/views/tabulation/auditionSeating.blade.php b/resources/views/tabulation/auditionSeating.blade.php index 5d62b6d..647171b 100644 --- a/resources/views/tabulation/auditionSeating.blade.php +++ b/resources/views/tabulation/auditionSeating.blade.php @@ -216,6 +216,7 @@ Clear Draft + {{-- TODO Hide the publish button if there are no seats --}} Publish