Filters working on admin entries page
This commit is contained in:
parent
91f47717d3
commit
d5fd164049
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FilterController extends Controller
|
||||
{
|
||||
public function adminEntryFilter(Request $request)
|
||||
{
|
||||
$filters = array();
|
||||
$filters['audition'] = request('audition_filter') ? request('audition_filter') : null;
|
||||
$filters['school'] = request('school_filter') ? request('school_filter') : null;
|
||||
$filters['grade'] = request('grade_filter') ? request('grade_filter') : null;
|
||||
$filters['first_name'] = request('first_name_filter') ? request('first_name_filter') : null;
|
||||
$filters['last_name'] = request('last_name_filter') ? request('last_name_filter') : null;
|
||||
|
||||
// session(['admin_entry_filter', $filters]);
|
||||
session(['adminEntryFilters' => $filters]);
|
||||
return redirect('/admin/entries');
|
||||
}
|
||||
|
||||
public function clearAdminEntryFilter(Request $request)
|
||||
{
|
||||
session()->forget('adminEntryFilters');
|
||||
return redirect('/admin/entries');
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,52 @@
|
|||
<x-layout.app>
|
||||
<x-slot:page_title>Entry Administration</x-slot:page_title>
|
||||
|
||||
{{-- Filter Control--}}
|
||||
<x-card.card>
|
||||
<x-card.heading>Set Filters</x-card.heading>
|
||||
<x-form.form action="/filters/admin_entry_filter" method="POST">
|
||||
<x-form.body-grid columns="12">
|
||||
<x-form.select name="audition_filter" colspan="5">
|
||||
<x-slot:label>Audition</x-slot:label>
|
||||
<option value="">No Audition Filter</option>
|
||||
@foreach($auditions as $audition)
|
||||
<option value="{{ $audition->id }}" {{ ($filters['audition'] ?? null) == $audition->id ? 'SELECTED':'' }}>
|
||||
{{ $audition->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</x-form.select>
|
||||
<x-form.select name="school_filter" colspan="5">
|
||||
<x-slot:label>School</x-slot:label>
|
||||
<option value="">No School Filter</option>
|
||||
@foreach($schools as $school)
|
||||
<option value="{{ $school->id }}" {{ ($filters['school'] ?? null) == $school->id ? 'SELECTED':'' }}>
|
||||
{{ $school->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</x-form.select>
|
||||
<x-form.select name="grade_filter" colspan="2">
|
||||
<x-slot:label>Grade</x-slot:label>
|
||||
<option value="">No Grade Filter</option>
|
||||
@php($n = $minGrade)
|
||||
@while($n <= $maxGrade)
|
||||
<option value="{{ $n }}" {{ ($filters['grade'] ?? null) == $n ? 'SELECTED':'' }}>
|
||||
{{ $n }}
|
||||
</option>
|
||||
@php($n++);
|
||||
@endwhile
|
||||
</x-form.select>
|
||||
<x-form.field name="first_name_filter" colspan="6" label_text="First Name" value="{{ ($filters['first_name'] ?? null) }}"/>
|
||||
<x-form.field name="last_name_filter" colspan="6" label_text="Last Name" value="{{ ($filters['last_name'] ?? null) }}"/>
|
||||
</x-form.body-grid>
|
||||
<x-form.footer>
|
||||
<x-form.button-nocolor href="filters/admin_entry_filter/clear">Clear Filters</x-form.button-nocolor>
|
||||
<x-form.button>Apply Filters</x-form.button>
|
||||
</x-form.footer>
|
||||
</x-form.form>
|
||||
</x-card.card>
|
||||
|
||||
{{-- Results Table--}}
|
||||
<x-card.card class="mt-4">
|
||||
<x-table.table with_title_area>
|
||||
<x-slot:title class="ml-3">Entries</x-slot:title>
|
||||
<x-slot:subtitle class="ml-3">Click id to edit</x-slot:subtitle>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
<div {{ $attributes->merge(['class' => $classes]) }}>
|
||||
|
|
|
|||
|
|
@ -5,5 +5,7 @@
|
|||
{{ Audition::max('maximum_grade') }} is the oldest grade used. <br>
|
||||
{{ Audition::min('minimum_grade') }} is the youngest grade.
|
||||
|
||||
@php( session(['testFnameFilter' => 'Matt']))
|
||||
|
||||
|
||||
</x-layout.app>
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
Loading…
Reference in New Issue