Merge branch 'trunk'

This commit is contained in:
Vincent BRIDIER 2023-06-22 14:58:09 +02:00
commit 28ee9f593d
No known key found for this signature in database
GPG key ID: 8571BFA20420D512
3 changed files with 85 additions and 25 deletions

View file

@ -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'));
}
}

View file

@ -5,17 +5,23 @@
@section('content')
<div id="planning" class="container container-xxl vueComponent">
<div class="row mb-3 sticky-top bg-white">
<div class="col-2">
<h1><a href="{{ route('schedule.index') }}">{{__('Planning') }}</a></h1>
</div>
<div class="col pt-2">
<h4 class="d-inline me-3">Légende</h4>
<div class="col">
<h4 class="d-inline me-3">{{__('Légende')}}</h4>
<div class="d-inline">
@foreach(CellType::toArray() as $type)
<span class="{{ Str::slug("celltype-$type->label") }}">{{ $type->label }}</span>
@endforeach
</div>
</div>
@if (\auth()->user()->role->equals(Role::developper()))
<div class="col-2 pt-2">
@if (request()->cookie('userAuthSchedule'))
<a href="{{ route('schedule.showAllSchedules') }}" class="btn btn-primary btn-sm">{{__('Afficher les plannings')}}</a>
@else
<a href="{{ route('schedule.showMySchedule') }}" class="btn btn-primary btn-sm">{{__('Afficher mon planning')}}</a>
@endif
</div>
@endif
</div>
@php
$dataVue = [

View file

@ -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');
});
});