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