From fa810ad17fa8dbcb8b8387de05f551ac6ac3cd3d Mon Sep 17 00:00:00 2001 From: "noah.lancien" Date: Tue, 18 Apr 2023 12:39:40 +0000 Subject: [PATCH] Added duty hours display on homepage --- app/Http/Controllers/Controller.php | 41 ++++++++++++ app/Http/Controllers/HomeController.php | 28 +++++++- resources/views/home.blade.php | 61 +++++++++++++++++- resources/views/modules/searchBar.blade.php | 46 +++++++++++++ .../views/modules/tableColSorter.blade.php | 64 +++++++++++++++++++ 5 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 resources/views/modules/searchBar.blade.php create mode 100644 resources/views/modules/tableColSorter.blade.php diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index efa4c3d..9a02c7e 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -10,6 +10,8 @@ use App\Enums\TicketStatus; use App\Models\Ticket; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\View; class Controller extends BaseController @@ -130,4 +132,43 @@ class Controller extends BaseController } return $query; } + + /** + * Sort columns with a query + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param array $ignore + * @return \Illuminate\Database\Eloquent\Builder + */ + protected function sortQuery(Builder $query, array $ignore = []): Builder + { + $rName = request()->route()->getName(); + $table = $query->getModel()->getTable(); + if (request()->sort_col) { + Session::put("$rName.sort_col", request()->sort_col); + Session::put("$rName.sorted", true); + } + if (request()->sort_way) { + Session::put("$rName.sort_way", request()->sort_way); + Session::put("$rName.sorted", true); + } + if (request()->rst) { + Session::remove("$rName.sorted"); + Session::remove("$rName.sort_col"); + Session::remove("$rName.sort_way"); + } + if (request()->sort_col and request()->sort_way and Schema::hasColumn($table, request()->sort_col)) { + if ( + !isset($ignore) or + (isset($ignore) and !in_array(request()->sort_col, $ignore)) + ) { + $query = $query->orderBy(\sprintf("$table.%s", request()->sort_col), request()->sort_way); + } + } elseif (Schema::hasColumn($table, 'order')) { + $query = $query->orderBy('order', 'ASC'); + Session::put("$rName.sort_col", 'order'); + Session::put("$rName.sort_way", 'asc'); + } + return $query; + } } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 61e1c76..320fb0e 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -2,15 +2,39 @@ namespace App\Http\Controllers; +use App\Models\Dutyhour; +use Illuminate\Http\Request; + class HomeController extends Controller { /** * Show Home page * + * @param Illuminate\Http\Request $request * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory */ - public function home() + public function home(Request $request) { - return view('home'); + /** + * Get only duty hours for today or later. + * @var \Illuminate\Database\Eloquent\Builder $dutyhour + */ + $dutyhour = Dutyhour::where('date', '>', now()->modify('-1 day'))->orderBy('date', 'asc'); + + if ($request->search) { + $this->searchQuery( + $dutyhour, + $request->search, + null, + 'date', + ); + } + + $this->sortQuery($dutyhour); + $searchFields = trans('Date'); + + $dutyhourModels = $dutyhour->paginate(10); + + return view('home', compact('dutyhourModels', 'searchFields')); } } diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 2dbc80f..4e7a2a1 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -8,11 +8,70 @@
-
+ +
+
+
+
+

+ {{ __('models.classes.dutyhours') }} +

+
+
+
+
+ @include('modules.searchBar') +
+
+ {{ $dutyhourModels->withQueryString()->onEachSide(1)->links() }} +
+
+
+
+
+ + + @php + $rst = !is_null(request()->rst); + $routeName = request()->route()->getName(); + $noOrder = Session::get("$routeName.sort_col") !== 'order' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); + $noOrder = Session::get("$routeName.sort_col") !== '' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); + $cols = ['date' => __('Date'), 'person' => __('Personne présente'), 'place' => __('Lieu de la permanence')]; + @endphp + @include('modules.tableColSorter', ['cols' => $cols, 'mobileHide' => ['status']]) + + + @if($dutyhourModels->count()) + @foreach ($dutyhourModels as $dutyhourModel) + + + + + + @endforeach + @else + + + + @endif + +
{{ $dutyhourModel->date->formatLocalized('%d/%m/%Y') }}{{ $dutyhourModel->person }}{{ $dutyhourModel->place }}
+ {{ __('No results for :models', ['models' => __('models.classes.dutyhours') ])}} +
+
+
+
+
+
+ {{ $dutyhourModels->withQueryString()->onEachSide(1)->links() }} +
+
+
+
@endsection diff --git a/resources/views/modules/searchBar.blade.php b/resources/views/modules/searchBar.blade.php new file mode 100644 index 0000000..91ec119 --- /dev/null +++ b/resources/views/modules/searchBar.blade.php @@ -0,0 +1,46 @@ +@php + $iArgs = []; + if(request()->sort_col) { + $iArgs['sort_col'] = request()->sort_col; + } + + if(request()->search) { + $iArgs['search'] = request()->sort_way; + } +@endphp +
+
+
+
+ + @if(request()->sort_col) + + @endif + @if(request()->sort_way) + + @endif + @if(request()->rangefilter) + + @endif + @if(request()->group) + + @endif + + + + @push('scripts') + + @endpush +
+
+
+
diff --git a/resources/views/modules/tableColSorter.blade.php b/resources/views/modules/tableColSorter.blade.php new file mode 100644 index 0000000..b6e56ed --- /dev/null +++ b/resources/views/modules/tableColSorter.blade.php @@ -0,0 +1,64 @@ +@php +$route = request()->route(); +$routeName = $route->getName(); +$rst = !is_null(request()->rst) || !Session::has("$routeName.sorted"); +$noOrder = Session::get("$routeName.sort_col") !== 'order' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); +$noOrder = Session::get("$routeName.sort_col") !== '' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); + +View::share('noOrder', $noOrder); +$ignore = (isset($ignore) and is_array($ignore)) ? $ignore : []; +@endphp + + @foreach($cols as $col => $colname) + @php + $iArgs = ['sort_col' => $col]; + if(request()->search) { + $iArgs['search'] = request()->search; + } + @endphp + {{-- NO Sort for order column --}} + @if($col === 'order' or in_array($col, $ignore)) + @if($noOrder and !$rst and !in_array($col, $ignore)) @continue @endif + + {{ $colname }} + + @continue + @endif + + + {{ $colname }} + @if(!session("$routeName.sort_way") or session("$routeName.sort_col") !== $col or (session("$routeName.sort_way") === 'desc' and session("$routeName.sort_col") === $col)) + +  ↓  + + @endif + @if(!session("$routeName.sort_way") or session("$routeName.sort_col") !== $col or (session("$routeName.sort_way") === 'asc' and session("$routeName.sort_col") === $col)) + +  ↑  + + @endif + + + @endforeach + {{-- Buttons Col --}} + + @if($noOrder and !$rst) + + + + @else + + + + @endif + +