diff --git a/app/Http/Controllers/Admin/AuditionController.php b/app/Http/Controllers/Admin/AuditionController.php new file mode 100644 index 0000000..2a48851 --- /dev/null +++ b/app/Http/Controllers/Admin/AuditionController.php @@ -0,0 +1,30 @@ +is_admin) abort(403); + $auditions = Audition::with(['event','entries'])->orderBy('score_order')->paginate(10); + return view('admin.auditions.index', ['auditions' => $auditions] ); + } + + public function create() + { + if(! Auth::user()->is_admin) abort(403); + return view('admin.auditions.create'); + } + + public function edit(Audition $audition) + { + if(! Auth::user()->is_admin) abort(403); + return view('admin.auditions.edit', ['audition' => $audition]); + } +} diff --git a/app/Http/Controllers/Admin/EntryController.php b/app/Http/Controllers/Admin/EntryController.php index 142c1a7..c5f0368 100644 --- a/app/Http/Controllers/Admin/EntryController.php +++ b/app/Http/Controllers/Admin/EntryController.php @@ -15,7 +15,7 @@ class EntryController extends Controller public function index() { if(! Auth::user()->is_admin) abort(403); - $entries = Entry::with(['student.school','audition'])->orderBy('created_at','DESC')->paginate(10); + $entries = Entry::with(['student.school','audition'])->orderBy('updated_at','DESC')->paginate(10); return view('admin.entries.index', ['entries' => $entries] ); } @@ -23,7 +23,7 @@ class EntryController extends Controller { if(! Auth::user()->is_admin) abort(403); $students = Student::with('school')->orderBy('last_name')->orderBy('first_name')->get(); - $auditions = Audition::orderBy('name')->get(); + $auditions = Audition::orderBy('score_order')->get(); return view('admin.entries.create', ['students' => $students, 'auditions' => $auditions]); } @@ -47,7 +47,7 @@ class EntryController extends Controller { if(! Auth::user()->is_admin) abort(403); $students = Student::with('school')->orderBy('last_name')->orderBy('first_name')->get(); - $auditions = Audition::orderBy('name')->get(); + $auditions = Audition::orderBy('score_order')->get(); return view('admin.entries.edit', ['entry' => $entry, 'students' => $students, 'auditions' => $auditions]); } diff --git a/app/Models/Audition.php b/app/Models/Audition.php index 8c599d2..f5af924 100644 --- a/app/Models/Audition.php +++ b/app/Models/Audition.php @@ -5,21 +5,39 @@ namespace App\Models; 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\HasOne; +use PhpParser\Node\Scalar\String_; +use function now; class Audition extends Model { use HasFactory; - - public function event(): BelongsTo - { - return $this->belongsTo(Event::class); - } + protected $guarded = []; public static function deadlineNotPast() { return Audition::where('entry_deadline', '>=', now())->get(); } + public function event(): BelongsTo + { + return $this->belongsTo(Event::class); + } + + public function entries(): HasMany + { + return $this->hasMany(Entry::class); + } + + public function dislpay_fee(): String + { + return '$' . number_format($this->entry_fee / 100, 2); + } + + + + + // TODO add order column to be able to sort in score order } diff --git a/database/migrations/2024_06_03_053659_rename_order_column_in_auditions_table_to_score_order.php b/database/migrations/2024_06_03_053659_rename_order_column_in_auditions_table_to_score_order.php new file mode 100644 index 0000000..74de188 --- /dev/null +++ b/database/migrations/2024_06_03_053659_rename_order_column_in_auditions_table_to_score_order.php @@ -0,0 +1,29 @@ +renameColumn('order', 'score_order'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('auditions', function (Blueprint $table) { + $table->renameColumn('score_order', 'order'); + }); + } +}; diff --git a/database/seeders/AuditionSeeder.php b/database/seeders/AuditionSeeder.php index 7d103c5..66d6cd3 100644 --- a/database/seeders/AuditionSeeder.php +++ b/database/seeders/AuditionSeeder.php @@ -54,7 +54,7 @@ class AuditionSeeder extends Seeder DB::table('auditions')->insert([ 'event_id' => $event->id, 'name' => $level . ' ' . $instrument, - 'order' => $n, + 'score_order' => $n, 'entry_deadline' => '2040-12-31', 'entry_fee' => '1000', 'minimum_grade' => $minGrade, diff --git a/resources/views/admin/auditions/index.blade.php b/resources/views/admin/auditions/index.blade.php new file mode 100644 index 0000000..804d1fe --- /dev/null +++ b/resources/views/admin/auditions/index.blade.php @@ -0,0 +1,45 @@ + + Audition Administration + + + + Auditions + Click name to edit + + New Audition + + + + + Event + Name + Order + Deadline + Entry Fee + Grade Range + Entries + + + + + + @foreach($auditions as $audition) + + {{ $audition->event->name }} + {{ $audition->name }} + {{ $audition->score_order }} + {{ $audition->entry_deadline }} + {{ $audition->dislpay_fee() }} + {{ $audition->minimum_grade }} - {{ $audition->maximum_grade }} + {{ $audition->entries->count() }} + + @endforeach + + + + +
+ {{ $auditions->links('vendor.pagination.simple-audition') }} +
+
+{{--TODO add options to filter the page--}} diff --git a/resources/views/admin/entries/edit.blade.php b/resources/views/admin/entries/edit.blade.php index d52ee92..112b2e0 100644 --- a/resources/views/admin/entries/edit.blade.php +++ b/resources/views/admin/entries/edit.blade.php @@ -26,7 +26,7 @@ - Create Entry + Edit Entry diff --git a/resources/views/components/layout/navbar-admin.blade.php b/resources/views/components/layout/navbar-admin.blade.php index 3fbf687..94b3fa7 100644 --- a/resources/views/components/layout/navbar-admin.blade.php +++ b/resources/views/components/layout/navbar-admin.blade.php @@ -22,6 +22,7 @@ Schools Students Entries + Auditions {{-- Dashboard--}} {{-- Students--}} diff --git a/routes/web.php b/routes/web.php index 1b91a00..d74237a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -18,6 +18,15 @@ Route::view('/','welcome')->middleware('guest'); Route::middleware(['auth','verified',CheckIfAdmin::class])->prefix('admin/')->group(function() { Route::view('/','admin.dashboard'); + // Admin Auditions Routes + Route::prefix('auditions')->controller(\App\Http\Controllers\Admin\AuditionController::class)->group(function() { + Route::get('/','index'); + Route::get('/create','create'); + Route::post('/','store'); + Route::get('/{entry}/edit','edit'); + Route::patch('/{entry}','update'); + }); + // Admin Entries Routes Route::prefix('entries')->controller(\App\Http\Controllers\Admin\EntryController::class)->group(function() { Route::get('/','index');