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 @@
| {{ $dutyhourModel->date->formatLocalized('%d/%m/%Y') }} | +{{ $dutyhourModel->person }} | +{{ $dutyhourModel->place }} | +||
| + {{ __('No results for :models', ['models' => __('models.classes.dutyhours') ])}} + | +||||