Schedule route/controller/blade

This commit is contained in:
Olivier Legat 2021-12-04 17:09:22 +01:00
parent c0d98694b9
commit be58906a0a
4 changed files with 203 additions and 0 deletions

View file

@ -0,0 +1,60 @@
<?php
namespace App\Http\Controllers;
use App\Enums\Planning\CellType;
use App\Enums\Role;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Carbon\CarbonImmutable;
class ScheduleController extends Controller
{
public function index(Request $request)
{
$date = CarbonImmutable::now()->startOfWeek();
$nbweek = 2;
$users = User::where('role', Role::developper())->get();
if ($request->p) {
$date = CarbonImmutable::createFromFormat('d/m/Y',$request->p)->startOfWeek();
}
$schedules = array(
//userid
1 =>
array(
//day
'29/11/2021'=>
array(
//slot
0 => array(
//elements
'text'=>'item1',
'type'=>'projects'
),
1 => array(
'text'=>'item2',
'type'=>'dev'
),
2 => array(
'text'=>'item3',
'type'=>'dev'
),
),
'01/12/2021' =>
array(
1 => array(
'text'=>'item2'
),
2 => array(
'text'=>'item3'
),
),
)
);
return view('schedule.index', compact('users','date','nbweek','schedules'));
}
}

View file

@ -24,6 +24,7 @@
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.16/dist/sweetalert2.min.css" integrity="sha256-qpXwccFYncH5gTqXFe9EXZ8QeDw1Re68bbNVfFZzIzg=" crossorigin="anonymous">
@crudPoliciesCSS
@stack('customCss')
</head>
<body>
@include('layout.nav')

View file

@ -0,0 +1,137 @@
@extends('layout.app')
@push('customCss')
<style>
.grid-1week {
display: grid;
grid-template-columns: 3fr repeat(5, 1fr);
grid-auto-rows: minmax(10px, auto);
}
.grid-2week {
display: grid;
grid-template-columns: 3fr repeat(10, 1fr);
grid-auto-rows: minmax(10px, auto);
align-items: center;
}
.grid-week div {
border: 1px solid;
display: flex;
justify-content: center;
align-self: stretch;
align-items: center;
}
.name {
grid-column: auto;
grid-row: auto /span 4;
}
.support {
background-color: {{CellType::support()->value}};
}
.rnd {
background-color: {{CellType::rnd()->value}};
}
.dev {
background-color: {{CellType::dev()->value}};
}
.projects {
background-color: {{CellType::projects()->value}};
}
.management {
background-color: {{CellType::management()->value}};
}
.absence {
background-color: {{CellType::absence()->value}};
}
</style>
@endpush
@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="d-inline">
@foreach(CellType::toArray() as $type)
<span style="background-color: {{ $type->value }}; border: 1px solid black;">{{ $type->label }}</span>
@endforeach
</div>
</div>
</div>
<div class="plannings">
<div class="row justify-content-center">
<div class="col-1 text-center">
<a class="sticky-top btn btn-primary mt-5" href="{{route('schedule.index')}}?p={{$date->addDays(-($nbweek*7))->format('d/m/Y')}}">←</a>
</div>
<div class="col-10 grid-week grid-{{$nbweek}}week">
<!--line header-->
<div class="empty"></div>
@for ($i = 0; $i < ($nbweek*5); $i++)
<div class="day">{{$date->addDays($i)->format('d/m/Y')}}</div>
@endfor
@foreach($users as $user)
<!-- user $j -->
<div class="name">{{$user->name}}</div>
@for ($k=0; $k < 4; $k++)
<!--line slot $k-->
@for ($i = 0; $i < ($nbweek*5); $i++)
<div class="day {{ $schedules[$user->id][$date->addDays($i)->format('d/m/Y')][$k]['type'] ?? '' }}">
{{$schedules[$user->id][$date->addDays($i)->format('d/m/Y')][$k]['text'] ?? ''}}
</div>
@endfor
@endfor
@endforeach
</div>
<div class="col-1 text-center">
<a class="sticky-top btn btn-primary mt-5" href="{{route('schedule.index')}}?p={{$date->addDays($nbweek*7)->format('d/m/Y')}}">→</a>
</div>
</div>
</div>
{{--<div class="grid-week grid-2week">
<!--line header-->
<div class="empty"></div>
@for ($i = 0; $i < 10; $i++)
<div class="day"></div>
@endfor
@for ($j = 0; $j < 4; $j++)
<!-- user $j -->
<!--line slot1-->
<div class="name"></div>
@for ($i = 0; $i < 10; $i++)
<div class="day"></div>
@endfor
<!--line slot2-->
@for ($i = 0; $i < 10; $i++)
<div class="day"></div>
@endfor
<!--line slot 3-->
@for ($i = 0; $i < 10; $i++)
<div class="day"></div>
@endfor
<!--line slot 4-->
@for ($i = 0; $i < 10; $i++)
<div class="day"></div>
@endfor
@endfor
</div>--}}
</div>
@endsection
@push('scriptsConstants')
<script>
window._routes = {
"planning.index": "{{ route('planning.index') }}",
"ticket.show": "{{ route('ticket.show', 'TICKET') }}",
"projects.show": "{{ route('projects.show', 'PROJECT') }}",
"sites.show": "{{ route('sites.show', 'SITE') }}",
"ticket.index": "{{ route('ticket.index') }}",
"projects.index": "{{ route('projects.index') }}",
"sites.index": "{{ route('sites.index') }}",
"planning.setCellContent": "{{ route('planning.setCellContent') }}",
"planning.eraseCellContent": "{{ route('planning.eraseCellContent') }}"
};
</script>
@endpush

View file

@ -5,6 +5,7 @@ use App\Http\Controllers\HomeController;
use App\Http\Controllers\LogController;
use App\Http\Controllers\PlanningController;
use App\Http\Controllers\ProjectController;
use App\Http\Controllers\ScheduleController;
use App\Http\Controllers\SiteController;
use App\Http\Controllers\TicketController;
use App\Http\Controllers\UserController;
@ -82,4 +83,8 @@ Route::middleware(['auth'])->group(function () {
Route::post('/eraseCellContent', [PlanningController::class, 'eraseCellContent'])
->name('eraseCellContent');
});
Route::prefix('/schedule')->name('schedule.')->group(function () {
Route::get('/', [ScheduleController::class, 'index'])->name('index');
});
});