Schedule route/controller/blade
This commit is contained in:
parent
c0d98694b9
commit
be58906a0a
4 changed files with 203 additions and 0 deletions
60
app/Http/Controllers/ScheduleController.php
Normal file
60
app/Http/Controllers/ScheduleController.php
Normal 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'));
|
||||
}
|
||||
}
|
||||
|
|
@ -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')
|
||||
|
|
|
|||
137
resources/views/schedule/index.blade.php
Normal file
137
resources/views/schedule/index.blade.php
Normal 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
|
||||
|
|
@ -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');
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue