From a6ffc740e33af45c1137b87b6455f98d2183a290 Mon Sep 17 00:00:00 2001 From: Nicolas Demangeat Date: Thu, 22 Jun 2023 11:08:17 +0000 Subject: [PATCH] add feature to filter auth user schedule and refactor controller --- app/Http/Controllers/ScheduleController.php | 92 ++++++++++++++++----- resources/views/schedule/index.blade.php | 16 ++-- routes/web.php | 2 + 3 files changed, 85 insertions(+), 25 deletions(-) diff --git a/app/Http/Controllers/ScheduleController.php b/app/Http/Controllers/ScheduleController.php index 98e597e..ebe369c 100644 --- a/app/Http/Controllers/ScheduleController.php +++ b/app/Http/Controllers/ScheduleController.php @@ -28,32 +28,49 @@ class ScheduleController extends Controller parent::__construct(); $this->middleware('is-admin'); } - + /** + * Display schedule. + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse + * @throws \Illuminate\Contracts\Container\BindingResolutionException BindingResolutionException. + * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException RouteNotFoundException. + */ public function index(Request $request) { + if (!\auth()->user()->role->equals(Role::developper()) && !is_null($request->cookie('userAuthSchedule'))) { + return $this->showAllSchedules(); + } + $date = CarbonImmutable::now()->startOfWeek(); $nbweeks = config('schedules.shownWeeks'); if ($request->p) { $date = CarbonImmutable::createFromFormat('d/m/Y', $request->p)->startOfWeek(); } + $users = []; + if (!is_null($request->cookie('userAuthSchedule'))) { + $dbusers = User::where('id', auth()->user()->id)->get(); + } else { + $dbusers = User::where('role', Role::developper())->get(); + } - $dbusers = User::where('role', Role::developper())->get(); - $users = []; foreach ($dbusers as $user) { $users[$user->id] = ['name' => $user->name]; } - - $schedules = Schedule::whereHas('user', function(Builder $query) { - $query->where('deleted_at', NULL); + $schedules = Schedule::whereHas('user', function (Builder $query) use ($request) { + $query->where('deleted_at', null); + $query->where('role', Role::developper()); + if (!is_null($request->cookie('userAuthSchedule'))) { + $query->where('id', auth()->user()->id); + } }) - ->whereDate('date', '>=', $date) - ->whereDate('date', '<=', $date->addDays($nbweeks * 7 - 1)) - ->orderBy('user_id') - ->orderBy('slot') - ->orderBy('date') - ->get(); - + ->whereDate('date', '>=', $date) + ->whereDate('date', '<=', $date->addDays($nbweeks * 7 - 1)) + ->orderBy('user_id') + ->orderBy('slot') + ->orderBy('date') + ->get(); + $arSchedules = array(); $prevUserId = null; $prevDate = null; @@ -72,7 +89,7 @@ class ScheduleController extends Controller } if ($prevUserId != $schedule->user_id) { - // nouveau user + // New user. $arSchedules[$schedule->user_id] = array( $schedule->slot => array( $schedule->date->format('d/m/Y') => array( @@ -86,9 +103,9 @@ class ScheduleController extends Controller ) ); } else { - // same user + // Same user. if ($prevSlot != $schedule->slot) { - // new slot + // New slot. $arSchedules[$schedule->user_id][$schedule->slot] = array( $schedule->date->format('d/m/Y') => array( 'id' => $schedule->id, @@ -100,9 +117,9 @@ class ScheduleController extends Controller ), ); } else { - // same slot + // Same slot. if ($prevDate != $schedule->date) { - // new date + // New date. $arSchedules[$schedule->user_id][$schedule->slot][$schedule->date->format('d/m/Y')] = array( 'id' => $schedule->id, 'type' => $schedule->activity, @@ -111,10 +128,11 @@ class ScheduleController extends Controller // $schedule->id_lie, 'model_lie' => $model_lie, ); - } else { + } + // else { // same date // should never be here - } + // }. }//end if }//end if $prevUserId = $schedule->user_id; @@ -134,6 +152,12 @@ class ScheduleController extends Controller return view('schedule.index', compact('users', 'date', 'weekCells', 'arSchedules')); } + /** + * Display cell content. + * @param \App\Http\Requests\StoreScheduleRequest $request + * @return \Illuminate\Http\JsonResponse + * @throws \Illuminate\Contracts\Container\BindingResolutionException BindingResolutionException. + */ public function setCellContent(StoreScheduleRequest $request) { $date = CarbonImmutable::createFromFormat('d/m/Y', $request->date); @@ -169,10 +193,38 @@ class ScheduleController extends Controller return \response()->json(['status' => true, 'sched' => $arSchd]); } + /** + * Delet cell content. + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + * @throws \Illuminate\Contracts\Container\BindingResolutionException BindingResolutionException. + */ public function eraseCellContent(Request $request) { $schedule = Schedule::findOrFail($request->id); $schedule->delete(); return \response()->json(['status' => true]); } + + /** + * Display the auth user schedule. + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Contracts\Container\BindingResolutionException BindingResolutionException. + * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException RouteNotFoundException. + */ + public function showMySchedule() + { + return \redirect()->route('schedule.index')->withCookie(cookie()->forever('userAuthSchedule', 'true')); + } + + /** + * Display all the dev schedule. + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Contracts\Container\BindingResolutionException BindingResolutionException. + * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException RouteNotFoundException. + */ + public function showAllSchedules() + { + return \redirect()->route('schedule.index')->withCookie(cookie()->forget('userAuthSchedule')); + } } diff --git a/resources/views/schedule/index.blade.php b/resources/views/schedule/index.blade.php index e5bed39..f65931a 100644 --- a/resources/views/schedule/index.blade.php +++ b/resources/views/schedule/index.blade.php @@ -5,17 +5,23 @@ @section('content')
- -
-

Légende

+
+

{{__('Légende')}}

@foreach(CellType::toArray() as $type) label") }}">{{ $type->label }} @endforeach
+ @if (\auth()->user()->role->equals(Role::developper())) +
+ @if (request()->cookie('userAuthSchedule')) + {{__('Afficher les plannings')}} + @else + {{__('Afficher mon planning')}} + @endif +
+ @endif
@php $dataVue = [ diff --git a/routes/web.php b/routes/web.php index 94f56ea..e6ed73b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -195,5 +195,7 @@ Route::middleware('auth:web')->group(function () { ->name('setCellContent'); Route::post('/eraseCellContent', [ScheduleController::class, 'eraseCellContent']) ->name('eraseCellContent'); + Route::get('/show-my-schedule', [ScheduleController::class, 'showMySchedule'])->name('showMySchedule'); + Route::get('/show-all-schedules', [ScheduleController::class, 'showAllSchedules'])->name('showAllSchedules'); }); });