From f49c10821a6500753f99d04a4a01d7a0e36d44bf Mon Sep 17 00:00:00 2001 From: Matt Young Date: Thu, 6 Jun 2024 07:13:44 -0500 Subject: [PATCH] Start work on tabulation pages --- app/Http/Controllers/ScoreSheetController.php | 10 +++ .../Tabulation/TabulationController.php | 18 +++++ app/Http/Middleware/CheckIfCanTab.php | 31 +++++++++ app/Models/ScoreSheet.php | 11 ++++ app/Models/User.php | 5 ++ app/Policies/ScoreSheetPolicy.php | 66 +++++++++++++++++++ ...06_06_045129_create_score_sheets_table.php | 32 +++++++++ database/seeders/ScoreSheetSeeder.php | 17 +++++ resources/views/admin/entries/index.blade.php | 2 +- .../layout/navbar/menus/admin.blade.php | 10 --- .../layout/navbar/menus/tabulation.blade.php | 27 ++++++++ .../components/layout/navbar/navbar.blade.php | 3 + .../views/tabulation/choose_entry.blade.php | 18 +++++ resources/views/test.blade.php | 8 ++- routes/web.php | 19 ++++-- 15 files changed, 261 insertions(+), 16 deletions(-) create mode 100644 app/Http/Controllers/ScoreSheetController.php create mode 100644 app/Http/Controllers/Tabulation/TabulationController.php create mode 100644 app/Http/Middleware/CheckIfCanTab.php create mode 100644 app/Models/ScoreSheet.php create mode 100644 app/Policies/ScoreSheetPolicy.php create mode 100644 database/migrations/2024_06_06_045129_create_score_sheets_table.php create mode 100644 database/seeders/ScoreSheetSeeder.php create mode 100644 resources/views/components/layout/navbar/menus/tabulation.blade.php create mode 100644 resources/views/tabulation/choose_entry.blade.php diff --git a/app/Http/Controllers/ScoreSheetController.php b/app/Http/Controllers/ScoreSheetController.php new file mode 100644 index 0000000..8802452 --- /dev/null +++ b/app/Http/Controllers/ScoreSheetController.php @@ -0,0 +1,10 @@ +is_admin) { + return $next($request); + } + + if (Auth::check() && Auth::user()->is_tab) { + return $next($request); + } + + return redirect('/')->with('error', 'You do not have access to score tabulation.'); + + } +} diff --git a/app/Models/ScoreSheet.php b/app/Models/ScoreSheet.php new file mode 100644 index 0000000..2d9ae42 --- /dev/null +++ b/app/Models/ScoreSheet.php @@ -0,0 +1,11 @@ +where('domain','=',$this->emailDomain())->get(); } + + public function canTab() { + if ($this->is_admin) return true; + return $this->is_tab; + } } diff --git a/app/Policies/ScoreSheetPolicy.php b/app/Policies/ScoreSheetPolicy.php new file mode 100644 index 0000000..bab4ca1 --- /dev/null +++ b/app/Policies/ScoreSheetPolicy.php @@ -0,0 +1,66 @@ +id(); + $table->foreignIdFor(User::class)->constrained()->cascadeOnUpdate()->cascadeOnDelete(); + $table->foreignIdFor(Entry::class)->constrained()->cascadeOnDelete()->cascadeOnUpdate(); + $table->json('subscores'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('score_sheets'); + } +}; diff --git a/database/seeders/ScoreSheetSeeder.php b/database/seeders/ScoreSheetSeeder.php new file mode 100644 index 0000000..9f576fa --- /dev/null +++ b/database/seeders/ScoreSheetSeeder.php @@ -0,0 +1,17 @@ + - + Clear Filters Apply Filters diff --git a/resources/views/components/layout/navbar/menus/admin.blade.php b/resources/views/components/layout/navbar/menus/admin.blade.php index 9322b24..da704bd 100644 --- a/resources/views/components/layout/navbar/menus/admin.blade.php +++ b/resources/views/components/layout/navbar/menus/admin.blade.php @@ -29,16 +29,6 @@ Scoring Rooms Judges -
- @csrf - -
diff --git a/resources/views/components/layout/navbar/menus/tabulation.blade.php b/resources/views/components/layout/navbar/menus/tabulation.blade.php new file mode 100644 index 0000000..4deecb4 --- /dev/null +++ b/resources/views/components/layout/navbar/menus/tabulation.blade.php @@ -0,0 +1,27 @@ +
+ {{-- + + +
+
+ Enter Scores + +
+
+
diff --git a/resources/views/components/layout/navbar/navbar.blade.php b/resources/views/components/layout/navbar/navbar.blade.php index 0a36a07..8a9201f 100644 --- a/resources/views/components/layout/navbar/navbar.blade.php +++ b/resources/views/components/layout/navbar/navbar.blade.php @@ -21,6 +21,9 @@ @if(Auth::user()->is_admin) @include('components.layout.navbar.menus.admin') @endif + @if(Auth::user()->canTab()) + @include('components.layout.navbar.menus.tabulation') + @endif diff --git a/resources/views/tabulation/choose_entry.blade.php b/resources/views/tabulation/choose_entry.blade.php new file mode 100644 index 0000000..d8091f9 --- /dev/null +++ b/resources/views/tabulation/choose_entry.blade.php @@ -0,0 +1,18 @@ + + Choose Entry + + Choose Entry +
+ + + + + Select + +
+
+ + + +
+d diff --git a/resources/views/test.blade.php b/resources/views/test.blade.php index 40b0b49..765d45d 100644 --- a/resources/views/test.blade.php +++ b/resources/views/test.blade.php @@ -3,7 +3,13 @@ Test Page @php - + $scores =[ + ['subcoreID' => 13, 'score' => 93], + ['subcoreID' => 23, 'score' => 91], + ['subcoreID' => 42, 'score' => 81], + ['subcoreID' => 78, 'score' => 16], + ['subcoreID' => 74, 'score' => 23], + ]; @endphp diff --git a/routes/web.php b/routes/web.php index 23ef2c9..77509b3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -9,21 +9,33 @@ use App\Http\Controllers\StudentController; use App\Http\Controllers\TestController; use App\Http\Controllers\UserController; use App\Http\Middleware\CheckIfAdmin; +use App\Http\Middleware\CheckIfCanTab; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Route; Route::get('/test',[TestController::class,'flashTest'])->middleware('auth','verified'); -Route::post('/admin/scoring/assign_guide_to_audition',[\App\Http\Controllers\Admin\AuditionController::class,'scoringGuideUpdate']); // needs to move inside of admin group Route::view('/','welcome')->middleware('guest'); +// Score Tabulation Routes +Route::middleware(['auth','verified',CheckIfCanTab::class])->prefix('tabulation/')->group(function() { + // Generic Tabulation Routes + Route::controller(\App\Http\Controllers\Tabulation\TabulationController::class)->group(function() { + Route::get('/enter_scores','chooseEntry'); + Route::get('/record_noshow','chooseEntry'); + }); + +}); + + // Admin Routes Route::middleware(['auth','verified',CheckIfAdmin::class])->prefix('admin/')->group(function() { Route::view('/','admin.dashboard'); Route::post('/auditions/roomUpdate',[\App\Http\Controllers\Admin\AuditionController::class,'roomUpdate']); // Endpoint for JS assigning auditions to rooms + Route::post('/scoring/assign_guide_to_audition',[\App\Http\Controllers\Admin\AuditionController::class,'scoringGuideUpdate']); // Endpoint for JS assigning scoring guides to auditions - // Rooms + // Admin Rooms Routes Route::prefix('rooms')->controller(\App\Http\Controllers\Admin\RoomController::class)->group(function() { Route::get('/','index'); Route::get('/create','create'); @@ -36,7 +48,7 @@ Route::middleware(['auth','verified',CheckIfAdmin::class])->prefix('admin/')->gr }); - // Scoring + // Admin Scoring Guides Route::prefix('scoring')->controller(\App\Http\Controllers\Admin\ScoringGuideController::class)->group(function() { Route::get('/','index'); // Scoring Setup Homepage Route::post('/guides','store'); // Save a new scoring guide @@ -47,7 +59,6 @@ Route::middleware(['auth','verified',CheckIfAdmin::class])->prefix('admin/')->gr Route::post('/reorder-tiebreak','reorder_tiebreak'); }); - // Admin Auditions Routes Route::prefix('auditions')->controller(\App\Http\Controllers\Admin\AuditionController::class)->group(function() { Route::get('/','index')->name('adminAuditionIndex');