diff --git a/app/Http/Controllers/Admin/EntryController.php b/app/Http/Controllers/Admin/EntryController.php index c5f0368..0de49cf 100644 --- a/app/Http/Controllers/Admin/EntryController.php +++ b/app/Http/Controllers/Admin/EntryController.php @@ -15,8 +15,50 @@ class EntryController extends Controller public function index() { if(! Auth::user()->is_admin) abort(403); - $entries = Entry::with(['student.school','audition'])->orderBy('updated_at','DESC')->paginate(10); - return view('admin.entries.index', ['entries' => $entries] ); + $filters = session('adminEntryFilters'); + $minGrade = Audition::min('minimum_grade'); + $maxGrade = Audition::max('maximum_grade'); + $auditions = Audition::orderBy('score_order')->get(); + $schools = School::orderBy('name')->get(); + + + $entries = Entry::with(['student.school','audition']); + $entries->orderBy('updated_at','DESC'); + if($filters) { + if($filters['audition']) { + $entries->where('audition_id', $filters['audition']); + } + if($filters['school']) { + $entries->whereHas('student', function($query) use ($filters) { + $query->where('school_id', '=', $filters['school']); + }); + } + if($filters['grade']) { + $entries->whereHas('student', function($query) use ($filters) { + $query->where('grade', $filters['grade']); + }); + } + + if($filters['first_name']) { + $entries->whereHas('student', function($query) use ($filters) { + $query->where('first_name', 'like', '%' . $filters['first_name'] . '%'); + }); + } + + if($filters['last_name']) { + $entries->whereHas('student', function($query) use ($filters) { + $query->where('last_name', 'like', '%' . $filters['last_name'] . '%'); + }); + } + } + + $entries = $entries->paginate(10); + return view('admin.entries.index', ['entries' => $entries, + 'auditions' => $auditions, + 'schools'=> $schools, + 'minGrade' => $minGrade, + 'maxGrade' => $maxGrade, + 'filters' => $filters] ); } public function create() diff --git a/app/Http/Controllers/FilterController.php b/app/Http/Controllers/FilterController.php new file mode 100644 index 0000000..bfda9ab --- /dev/null +++ b/app/Http/Controllers/FilterController.php @@ -0,0 +1,28 @@ + $filters]); + return redirect('/admin/entries'); + } + + public function clearAdminEntryFilter(Request $request) + { + session()->forget('adminEntryFilters'); + return redirect('/admin/entries'); + } +} diff --git a/resources/views/admin/entries/index.blade.php b/resources/views/admin/entries/index.blade.php index 1473c5b..360ddbb 100644 --- a/resources/views/admin/entries/index.blade.php +++ b/resources/views/admin/entries/index.blade.php @@ -1,7 +1,52 @@ Entry Administration +{{-- Filter Control--}} + Set Filters + + + + Audition + + @foreach($auditions as $audition) + + @endforeach + + + School + + @foreach($schools as $school) + + @endforeach + + + Grade + + @php($n = $minGrade) + @while($n <= $maxGrade) + + @php($n++); + @endwhile + + + + + + Clear Filters + Apply Filters + + + + +{{-- Results Table--}} + Entries Click id to edit diff --git a/resources/views/components/form/body-grid.blade.php b/resources/views/components/form/body-grid.blade.php index 632b7ba..ba46ef4 100644 --- a/resources/views/components/form/body-grid.blade.php +++ b/resources/views/components/form/body-grid.blade.php @@ -16,7 +16,7 @@ '11' => 'sm:grid-cols-11', '12' => 'sm:grid-cols-12' ]; - $classes = "grid max-w-2xl grid-cols-1 gap-x-6 gap-y-3 "; + $classes = "grid grid-cols-1 gap-x-6 gap-y-3 "; $classes .= $columnClasses["$columns"] @endphp
merge(['class' => $classes]) }}> diff --git a/resources/views/test.blade.php b/resources/views/test.blade.php index 8c62fbe..ba3389a 100644 --- a/resources/views/test.blade.php +++ b/resources/views/test.blade.php @@ -5,5 +5,7 @@ {{ Audition::max('maximum_grade') }} is the oldest grade used.
{{ Audition::min('minimum_grade') }} is the youngest grade. + @php( session(['testFnameFilter' => 'Matt'])) + diff --git a/routes/web.php b/routes/web.php index d74237a..5d4ad1d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,7 @@ use App\Http\Controllers\DashboardController; use App\Http\Controllers\EntryController; +use App\Http\Controllers\FilterController; use App\Http\Controllers\SchoolController; use App\Http\Controllers\StudentController; use App\Http\Controllers\TestController; @@ -103,6 +104,12 @@ Route::middleware(['auth','verified'])->controller(SchoolController::class)->gro Route::patch('/schools/{school}','update'); }); +// Filter Related Routes +Route::prefix('filters')->middleware(['auth','verified'])->controller(FilterController::class)->group(function() { + Route::post('/admin_entry_filter','adminEntryFilter'); + 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');