From be108c0827a1a43960c92bffeb85c9d94c186aae Mon Sep 17 00:00:00 2001 From: Matt Young Date: Thu, 20 Jun 2024 02:32:30 -0500 Subject: [PATCH] Seating limits functioning --- .../Controllers/Admin/EnsembleController.php | 26 +++++++++++ app/Models/Ensemble.php | 6 +++ app/Models/SeatingLimit.php | 25 +++++++++++ ..._20_060725_create_seating_limits_table.php | 33 ++++++++++++++ .../seatingLimits-limitForm.blade.php | 43 +++++++++++++++---- .../admin/ensembles/seatingLimits.blade.php | 1 + .../form/field-horizontal.blade.php | 14 ------ routes/web.php | 1 + 8 files changed, 126 insertions(+), 23 deletions(-) create mode 100644 app/Models/SeatingLimit.php create mode 100644 database/migrations/2024_06_20_060725_create_seating_limits_table.php delete mode 100644 resources/views/components/form/field-horizontal.blade.php diff --git a/app/Http/Controllers/Admin/EnsembleController.php b/app/Http/Controllers/Admin/EnsembleController.php index f340ef5..7574041 100644 --- a/app/Http/Controllers/Admin/EnsembleController.php +++ b/app/Http/Controllers/Admin/EnsembleController.php @@ -5,9 +5,11 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\Ensemble; use App\Models\Event; +use App\Models\SeatingLimit; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; +use function redirect; class EnsembleController extends Controller { @@ -60,9 +62,33 @@ class EnsembleController extends Controller public function seatingLimits(Ensemble $ensemble) { $ensembles = Ensemble::with('event')->orderBy('event_id')->get(); + if ($ensemble->exists()) { + $ensemble->load('seatingLimits'); + } return view('admin.ensembles.seatingLimits',compact('ensemble','ensembles')); } + public function seatingLimitsSet(Request $request, Ensemble $ensemble) + { + $request->validate([ + 'audition' => 'required', + 'audition.*' => ['integer','min:0'] + ]); + + foreach($ensemble->auditions as $audition) { + SeatingLimit::upsert( + [[ + 'ensemble_id' => $ensemble->id, + 'audition_id' => $audition->id, + 'maximum_accepted' => $request->audition[$audition->id] + ]], + uniqueBy: ['ensemble_id','audition_id'], + update: ['maximum_accepted'] + ); + } + return redirect()->route('admin.ensembles.seatingLimits')->with('success', 'Seating limits set for ' . $ensemble->name); + } + public function updateEnsembleRank(Request $request) { if(! Auth::user()->is_admin) abort(403); diff --git a/app/Models/Ensemble.php b/app/Models/Ensemble.php index 3526177..90abf4c 100644 --- a/app/Models/Ensemble.php +++ b/app/Models/Ensemble.php @@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasManyThrough; class Ensemble extends Model @@ -30,4 +31,9 @@ class Ensemble extends Model )->orderBy('score_order'); } + public function seatingLimits(): HasMany + { + return $this->hasMany(SeatingLimit::class); + } + } diff --git a/app/Models/SeatingLimit.php b/app/Models/SeatingLimit.php new file mode 100644 index 0000000..345947a --- /dev/null +++ b/app/Models/SeatingLimit.php @@ -0,0 +1,25 @@ +belongsTo(Audition::class); + } + + public function ensemble(): BelongsTo + { + return $this->belongsTo(Ensemble::class); + } + +} diff --git a/database/migrations/2024_06_20_060725_create_seating_limits_table.php b/database/migrations/2024_06_20_060725_create_seating_limits_table.php new file mode 100644 index 0000000..67b05e8 --- /dev/null +++ b/database/migrations/2024_06_20_060725_create_seating_limits_table.php @@ -0,0 +1,33 @@ +id(); + $table->foreignIdFor(Ensemble::class)->constrained()->cascadeOnDelete()->cascadeOnUpdate(); + $table->foreignIdFor(Audition::class)->constrained()->cascadeOnDelete()->cascadeOnUpdate(); + $table->integer('maximum_accepted'); + $table->timestamps(); + $table->unique(['ensemble_id', 'audition_id']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('seating_limits'); + } +}; diff --git a/resources/views/admin/ensembles/seatingLimits-limitForm.blade.php b/resources/views/admin/ensembles/seatingLimits-limitForm.blade.php index cd9c45c..da1f81b 100644 --- a/resources/views/admin/ensembles/seatingLimits-limitForm.blade.php +++ b/resources/views/admin/ensembles/seatingLimits-limitForm.blade.php @@ -1,16 +1,41 @@ +@php + $limits = []; + foreach ($ensemble->seatingLimits as $lim) { + $limits[$lim->audition_id] = $lim->maximum_accepted; + } +@endphp {{ $ensemble->name }} -
- @foreach($ensemble->auditions as $audition) - - @endforeach + +
    +
  • +
    Audition Name
    +
    + Maximum Accepted +
    +
  • + @foreach($ensemble->auditions as $audition) +
  • +
    + +
    +
    + +
    +
  • + @endforeach +
  • + Submit Limits +
  • +
-
- - -
- +
diff --git a/resources/views/admin/ensembles/seatingLimits.blade.php b/resources/views/admin/ensembles/seatingLimits.blade.php index e3f2413..67ad1f7 100644 --- a/resources/views/admin/ensembles/seatingLimits.blade.php +++ b/resources/views/admin/ensembles/seatingLimits.blade.php @@ -1,5 +1,6 @@ Seating Limits + Choose Ensemble
diff --git a/resources/views/components/form/field-horizontal.blade.php b/resources/views/components/form/field-horizontal.blade.php deleted file mode 100644 index a28abe5..0000000 --- a/resources/views/components/form/field-horizontal.blade.php +++ /dev/null @@ -1,14 +0,0 @@ -@props(['name','label','type' => 'text']) -
-
-
- -
- -
-
-
-
diff --git a/routes/web.php b/routes/web.php index 7d7bb02..f30af7a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -67,6 +67,7 @@ Route::middleware(['auth','verified',CheckIfAdmin::class])->prefix('admin/')->gr Route::patch('/{ensemble}','updateEnsemble')->name('admin.ensembles.updateEnsemble'); Route::get('/seating-limits','seatingLimits')->name('admin.ensembles.seatingLimits'); Route::get('/seating-limits/{ensemble}','seatingLimits')->name('admin.ensembles.seatingLimits.ensemble'); + Route::post('/seating-limits/{ensemble}','seatingLimitsSet')->name('admin.ensembles.seatingLimits.ensemble.set'); }); // Admin Event Routes