diff --git a/app/Http/Controllers/Admin/AuditionController.php b/app/Http/Controllers/Admin/AuditionController.php index 808fcfc..d51cf8c 100644 --- a/app/Http/Controllers/Admin/AuditionController.php +++ b/app/Http/Controllers/Admin/AuditionController.php @@ -117,6 +117,22 @@ class AuditionController extends Controller return response()->json(['status' => 'success']); } + public function scoringGuideUpdate(Request $request) + { + + $audition = Audition::find($request->audition_id); + + if ($audition) { + $audition->update([ + 'scoring_guide_id' => $request->new_guide_id + ]); + + return response()->json(['success' => true]); + } + + return response()->json(['success' => false], 404); + } + public function destroy(Audition $audition) { if(! Auth::user()->is_admin) abort(403); diff --git a/app/Http/Controllers/Admin/ScoringGuideController.php b/app/Http/Controllers/Admin/ScoringGuideController.php index fee3fa4..e40309d 100644 --- a/app/Http/Controllers/Admin/ScoringGuideController.php +++ b/app/Http/Controllers/Admin/ScoringGuideController.php @@ -7,6 +7,7 @@ use App\Models\ScoringGuide; use App\Models\SubscoreDefinition; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; use function abort; use function dd; use function request; @@ -18,7 +19,10 @@ class ScoringGuideController extends Controller public function index() { if (! Auth::user()->is_admin) abort(403); - $guides = ScoringGuide::orderBy('name')->get(); + DB::table('auditions') + ->whereNull('scoring_guide_id') + ->update(['scoring_guide_id' => 0]); + $guides = ScoringGuide::with('auditions')->orderBy('name')->get(); return view('admin.scoring.index',['guides'=>$guides]); } diff --git a/app/Models/Audition.php b/app/Models/Audition.php index eac0da0..689be7a 100644 --- a/app/Models/Audition.php +++ b/app/Models/Audition.php @@ -35,6 +35,11 @@ class Audition extends Model return $this->belongsTo(Room::class); } + public function scoringGuide(): BelongsTo + { + return $this->belongsTo(ScoringGuide::class); + } + public function dislpay_fee(): String { return '$' . number_format($this->entry_fee / 100, 2); diff --git a/app/Models/ScoringGuide.php b/app/Models/ScoringGuide.php index 97c2b7f..f32d3f1 100644 --- a/app/Models/ScoringGuide.php +++ b/app/Models/ScoringGuide.php @@ -4,9 +4,15 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; class ScoringGuide extends Model { use HasFactory; protected $guarded = []; + + public function auditions(): HasMany + { + return $this->hasMany(Audition::class)->orderBy('score_order'); + } } diff --git a/database/migrations/2024_06_04_205015_ensure_room_id_0_for_unassigned_entries.php b/database/migrations/2024_06_04_205015_ensure_room_id_0_for_unassigned_entries.php index 922db69..1c28c98 100644 --- a/database/migrations/2024_06_04_205015_ensure_room_id_0_for_unassigned_entries.php +++ b/database/migrations/2024_06_04_205015_ensure_room_id_0_for_unassigned_entries.php @@ -1,6 +1,7 @@ 0, - 'name' => 'Unassigned', - 'description' => 'These auditions have no room', - ], - uniqueBy: ['id'], - update: ['name','description'] - ); + if (! Room::find(0)) { + $room = Room::create([ + 'id' => 0, + 'name' => 'No Guide Assigned' + ]); + $room->update([ + 'id' => 0 + ]); + } } /** diff --git a/database/migrations/2024_06_05_011858_add_scoring_guide_id_column_to_auditions_table.php b/database/migrations/2024_06_05_011858_add_scoring_guide_id_column_to_auditions_table.php new file mode 100644 index 0000000..c1f7640 --- /dev/null +++ b/database/migrations/2024_06_05_011858_add_scoring_guide_id_column_to_auditions_table.php @@ -0,0 +1,41 @@ +foreignIdFor(ScoringGuide::class)->nullable()->constrained()->cascadeOnUpdate()->nullOnDelete(); + }); + + if (! ScoringGuide::find(0)) { + $sg = ScoringGuide::create([ + 'id' => 0, + 'name' => 'No Guide Assigned' + ]); + $sg->update([ + 'id' => 0 + ]); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('auditions', function (Blueprint $table) { + $table->dropForeignIdFor(ScoringGuide::class); + $table->dropColumn('scoring_guide_id'); + }); + } +}; diff --git a/resources/views/admin/rooms/scratch.blade.php b/resources/views/admin/rooms/scratch.blade.php index ffa5a27..1c939b6 100644 --- a/resources/views/admin/rooms/scratch.blade.php +++ b/resources/views/admin/rooms/scratch.blade.php @@ -1,46 +1,50 @@ -
- + @endforeach
diff --git a/resources/views/admin/scoring/index-scoring-guide-management-card.blade.php b/resources/views/admin/scoring/index-scoring-guide-management-card.blade.php new file mode 100644 index 0000000..f55eab2 --- /dev/null +++ b/resources/views/admin/scoring/index-scoring-guide-management-card.blade.php @@ -0,0 +1,39 @@ + + + Scoring Guides + Each audition will be assigned a scoring guide. + + + + + Name + + + + + + @foreach($guides as $guide) + @if($guide->id == 0) + @continue + @endif + + {{ $guide->name }} + Edit +{{-- TODO add a link to delete if the guide is not in use--}} + + @endforeach + + + + + + + + + Create + + + + + + diff --git a/resources/views/admin/scoring/index.blade.php b/resources/views/admin/scoring/index.blade.php index 59c42e6..024d17b 100644 --- a/resources/views/admin/scoring/index.blade.php +++ b/resources/views/admin/scoring/index.blade.php @@ -1,41 +1,10 @@ +@props(['test'=>'get it']) Scoring Rules
- - - Scoring Guides - Each audition will be assigned a scoring guide. - - - - - Name - - - - - - @foreach($guides as $guide) - - {{ $guide->name }} - Edit -{{-- TODO add a link to delete if the guide is not in use--}} - - @endforeach - - - - - - - - - Create - - - - - - + @include('admin.scoring.index-scoring-guide-management-card') +
+
+ @include('admin.scoring.index-audition-scoring-guide-assignment-card')
diff --git a/resources/views/components/table/table.blade.php b/resources/views/components/table/table.blade.php index 56b8127..82d178a 100644 --- a/resources/views/components/table/table.blade.php +++ b/resources/views/components/table/table.blade.php @@ -7,7 +7,7 @@ ])
@if($with_title_area) -
+
@if($title)

attributes->merge(['class' => 'text-base font-semibold leading-6 text-gray-900']) }}>{{ $title }}

@endif @if($subtitle)

attributes->merge(['class' => 'mt-2 text-sm text-gray-700']) }}>{{ $subtitle }}

@endif diff --git a/resources/views/test.blade.php b/resources/views/test.blade.php index 76e0f8e..40b0b49 100644 --- a/resources/views/test.blade.php +++ b/resources/views/test.blade.php @@ -1,8 +1,11 @@ -@php use App\Models\Audition;use App\Models\School;use App\Models\SchoolEmailDomain;use App\Models\User;use App\Settings;use Illuminate\Support\Facades\Auth;use Illuminate\Support\Facades\Session; @endphp +@php use App\Models\Audition;use App\Models\School;use App\Models\SchoolEmailDomain;use App\Models\ScoringGuide;use App\Models\User;use App\Settings;use Illuminate\Support\Facades\Auth;use Illuminate\Support\Facades\DB;use Illuminate\Support\Facades\Session; @endphp Test Page - {{ Settings::auditionName() }} + @php + + + @endphp diff --git a/routes/web.php b/routes/web.php index b6bb377..aa53094 100644 --- a/routes/web.php +++ b/routes/web.php @@ -14,6 +14,8 @@ 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']); + Route::view('/','welcome')->middleware('guest'); // Admin Routes @@ -21,6 +23,7 @@ Route::middleware(['auth','verified',CheckIfAdmin::class])->prefix('admin/')->gr Route::view('/','admin.dashboard'); Route::post('/auditions/roomUpdate',[\App\Http\Controllers\Admin\AuditionController::class,'roomUpdate']); + // Rooms Route::prefix('rooms')->controller(\App\Http\Controllers\Admin\RoomController::class)->group(function() { Route::get('/','index'); @@ -136,7 +139,6 @@ Route::prefix('filters')->middleware(['auth','verified'])->controller(FilterCont Route::get('/admin_entry_filter/clear','clearAdminEntryFilter'); }); - //Route::get('/my_school', [SchoolController::class, 'my_school'])->middleware('auth','verified'); //Route::get('/schools/create', [SchoolController::class, 'create'])->middleware('auth','verified'); //Route::post('/schools', [SchoolController::class, 'store'])->middleware('auth','verified');