This commit is contained in:
Mathieu Lagace
2020-01-21 21:14:48 -05:00
parent c20024ed96
commit 9e21124e90
12 changed files with 189 additions and 98 deletions

View File

@@ -36,6 +36,7 @@ class EventController extends Controller
*/ */
public function store() public function store()
{ {
dd(\request());
$event = new Event(); $event = new Event();
$event->name = request('name'); $event->name = request('name');

View File

@@ -625,6 +625,8 @@ X20,\"Participer à des activités
$ocom = ""; $ocom = "";
preg_match('/[MC]\S\d\d.\d\d[A-Z]?/',$match,$ocom); preg_match('/[MC]\S\d\d.\d\d[A-Z]?/',$match,$ocom);
if(!OCOM::where('ocom',$ocom)->first())
{
$oren = ""; $oren = "";
preg_match('/[X\d]\d\d/',$ocom[0],$oren); preg_match('/[X\d]\d\d/',$ocom[0],$oren);
@@ -642,6 +644,7 @@ X20,\"Participer à des activités
$newocom->objectif_rendement = $orens[$oren[0]]; $newocom->objectif_rendement = $orens[$oren[0]];
$newocom->save(); $newocom->save();
} }
}
dd(\App\OCOM::all()); dd(\App\OCOM::all());
} }

View File

@@ -28,6 +28,27 @@ class ScheduleEditorController extends Controller
return json_encode($eventType); return json_encode($eventType);
} }
public function getEmptyPeriode(int $id)
{
return view('admin.schedule.editor.periode',[
'periode_name' => 'Periode '.$id,
'periode_begin_time' => '00:00',
'periode_end_time' => '00:00',
'periode_id' => $id,
'nbLevel' => request('nblevel')
]);
}
public function getEmptyLevel(int $id)
{
return view('admin.schedule.editor.level',['periode_id' => \request('nbPeriode'),'level_id' => $id]);
}
public function getLevelHeader(int $id)
{
return view('admin.schedule.editor.levelHeader',['level_id' => $id,'level_name' => 'Niveau '.$id]);
}
public function test() public function test()
{ {
$evenType = new \App\EventType(); $evenType = new \App\EventType();

View File

@@ -3305,9 +3305,9 @@ fieldset:disabled a.btn {
} }
.btn-secondary:hover { .btn-secondary:hover {
color: #ffffff !important; color: #ffffff;
background-color: #5a6268 !important; background-color: #5a6268;
border-color: #545b62 !important; border-color: #545b62;
} }
.btn-secondary:focus, .btn-secondary:focus,

View File

@@ -1,4 +1,7 @@
var editorTemplate; var editorTemplate;
var nbOfPeriode;
var nbOfLevel;
var emptyPeriode;
function initScheduleEditor(id, eventType) function initScheduleEditor(id, eventType)
{ {
@@ -7,8 +10,8 @@ function initScheduleEditor(id, eventType)
url: '/api/schedule/editor/init/'+eventType+'?api_token='+api_token, url: '/api/schedule/editor/init/'+eventType+'?api_token='+api_token,
success: function (template) { success: function (template) {
$("#"+id).html(template); $("#"+id).html(template);
for (let pniveau = 1; pniveau <= 3; pniveau++) { for (let pniveau = 1; pniveau <= nbOfLevel; pniveau++) {
for (let pperiode = 1; pperiode <= 3; pperiode++) { for (let pperiode = 1; pperiode <= nbOfPeriode; pperiode++) {
loadCourse(pniveau,pperiode); loadCourse(pniveau,pperiode);
} }
} }
@@ -36,6 +39,7 @@ function initScheduleEditor(id, eventType)
lang: 'fr' lang: 'fr'
}); });
$('select').selectpicker(); $('select').selectpicker();
} }
function switchUseWeeklyMsg() function switchUseWeeklyMsg()
@@ -78,6 +82,54 @@ function loadCourse(periode,niveau)
}) })
} }
function addPeriode()
{
var periodeToAdd = nbOfPeriode+1;
$.ajax({
type: 'GET',
url: '/api/schedule/editor/emptyperiode/'+periodeToAdd+'?api_token='+api_token+'&nblevel='+nbOfLevel,
success: function (template) {
$('#row-'+nbOfPeriode).after(template);
for (let i = 1; i <= nbOfLevel; i++) {
loadCourse(periodeToAdd,i);
}
nbOfPeriode = periodeToAdd;
initAutoComplete("AutoCompleteUser");
initAutoCompleteOCOM('AutoCompleteOCOM');
},
error: function () {
showNotification('error','Impossible d\'initialiser l\'éditeur d\'horaire ...','top', 'center')
}
})
}
function addLevel()
{
var levelToAdd = nbOfLevel+1;
var oldnbOfLevel = nbOfLevel;
nbOfLevel++;
$.ajax({
type: 'GET',
url: '/api/schedule/editor/levelHeader/'+levelToAdd+'?api_token='+api_token,
success: function (template) {
$('#levelHeader-'+oldnbOfLevel).after(template)
for (let i = 1; i <= nbOfPeriode; i++) {
$('#container-'+oldnbOfLevel+'-'+i).after('<div id="container-'+levelToAdd+'-'+i+'" niveau="'+levelToAdd+'" periode="'+i+'" class="col m-0 border-bottom border-right scheduleEditor-course">@loaderDot</div>');
}
for (let i = 1; i <= nbOfPeriode; i++) {
loadCourse(i,levelToAdd);
}
},
error: function () {
showNotification('error','Impossible d\'ajouter une nouvelle entête de niveau ...','top', 'center')
}
})
setTimeout(function () {
initAutoComplete("AutoCompleteUser");
initAutoCompleteOCOM('AutoCompleteOCOM');
},1000)
}
function loadEventType(date) function loadEventType(date)
{ {
var selectInput = $('#type'); var selectInput = $('#type');
@@ -88,6 +140,8 @@ function loadEventType(date)
success: function (data) { success: function (data) {
var result = JSON.parse(data); var result = JSON.parse(data);
editorTemplate = result; editorTemplate = result;
nbOfLevel = editorTemplate.schedule_model.niveaux.length;
nbOfPeriode = editorTemplate.schedule_model.periodes.length;
initScheduleEditor("scheduleEditor",id) initScheduleEditor("scheduleEditor",id)
$.each(result, function (i, val) { $.each(result, function (i, val) {
if(i == "is_mandatory" || i == "use_schedule" || i == "use_weekly_msg") if(i == "is_mandatory" || i == "use_schedule" || i == "use_weekly_msg")
@@ -212,16 +266,16 @@ function selectCourseMode(mode, niveau, periode)
function selectCourseModePeriode(mode,periode) function selectCourseModePeriode(mode,periode)
{ {
$.each(editorTemplate['schedule_model']['niveaux'], function (i, val) { for (let i = 0; i < nbOfLevel; i++) {
selectCourseMode(mode,i+1,periode); selectCourseMode(mode,i+1,periode);
}); }
} }
function selectCourseModeNiveau(mode,niveau) function selectCourseModeNiveau(mode,niveau)
{ {
$.each(editorTemplate['schedule_model']['periodes'], function (i, val) { for (let i = 0; i < nbOfPeriode; i++) {
selectCourseMode(mode,niveau,i+1); selectCourseMode(mode,niveau,i+1);
}); }
} }
function updatePlantext(toggle,id) function updatePlantext(toggle,id)

View File

@@ -25,18 +25,18 @@
</div> </div>
</div> </div>
<div class="tab-content text-center"> <div class="tab-content text-center">
<div class="tab-pane active" id="home"> <div class="tab-pane active">
<div class="row pt-2"> <div class="row pt-2">
<div class="col-12 d-none" id="descContainer{{$niveau}}-{{$periode}}"> <div class="col-12 d-none" id="descContainer{{$niveau}}-{{$periode}}">
<div class="form-group"> <div class="form-group">
<label for="exampleFormControlTextarea1">Description de la période</label> <label for="exampleFormControlTextarea1">Description de la période</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="2"></textarea> <textarea class="form-control" name="desc_n{{$niveau}}_p{{$periode}}" id="exampleFormControlTextarea1" rows="2"></textarea>
</div> </div>
</div> </div>
<div class="col-6 mb-1" id="OCOMContainer{{$niveau}}-{{$periode}}"> <div class="col-6 mb-1" id="OCOMContainer{{$niveau}}-{{$periode}}">
<div class="form-group label-floating"> <div class="form-group label-floating">
<div class="autocomplete"> <div class="autocomplete">
<input type="text" placeholder="OCOM du cours" id="ocom_n{{$niveau}}_p{{$periode}}" class="form-control AutoCompleteOCOM" aria-describedby="nameHelp" autocomplete="off" required onblur="updateCourseName('{{$niveau}}','{{$periode}}')"> <input type="text" placeholder="OCOM du cours" id="ocom_n{{$niveau}}_p{{$periode}}" name="ocom_n{{$niveau}}_p{{$periode}}" class="form-control AutoCompleteOCOM" aria-describedby="nameHelp" autocomplete="off" value="M103.02" required onblur="updateCourseName('{{$niveau}}','{{$periode}}')">
</div> </div>
<span class="form-control-feedback"> <span class="form-control-feedback">
<i class="material-icons">done</i> <i class="material-icons">done</i>
@@ -45,7 +45,7 @@
</div> </div>
<div class="col-6" id="nameContainer{{$niveau}}-{{$periode}}"> <div class="col-6" id="nameContainer{{$niveau}}-{{$periode}}">
<div class="form-group label-floating"> <div class="form-group label-floating">
<input type="text" placeholder="Nom du cours" id="name_n{{$niveau}}_p{{$periode}}" class="form-control" required /> <input type="text" placeholder="Nom du cours" id="name_n{{$niveau}}_p{{$periode}}" name="name_n{{$niveau}}_p{{$periode}}" value="Nom du cours" class="form-control" required />
<span class="form-control-feedback"> <span class="form-control-feedback">
<i class="material-icons">clear</i> <i class="material-icons">clear</i>
</span> </span>
@@ -53,7 +53,7 @@
</div> </div>
<div class="col-6 mb-1"> <div class="col-6 mb-1">
<div class="form-group label-floating"> <div class="form-group label-floating">
<input type="text" placeholder="Lieu du cours" class="form-control" required/> <input type="text" placeholder="Lieu du cours" name="location_n{{$niveau}}_p{{$periode}}" value="Lieu du cours" class="form-control" required/>
<span class="form-control-feedback"> <span class="form-control-feedback">
<i class="material-icons">done</i> <i class="material-icons">done</i>
</span> </span>
@@ -62,7 +62,7 @@
<div class="col-6"> <div class="col-6">
<div class="form-group label-floating"> <div class="form-group label-floating">
<div class="autocomplete"> <div class="autocomplete">
<input type="text" placeholder="Nom de l'instructeur" id="instruc_n{{$niveau}}_p{{$periode}}" class="form-control AutoCompleteUser" aria-describedby="nameHelp" autocomplete="off" required> <input type="text" placeholder="Nom de l'instructeur" id="instruc_n{{$niveau}}_p{{$periode}}" name="instruc_n{{$niveau}}_p{{$periode}}" value="Mathieu" class="form-control AutoCompleteUser" aria-describedby="nameHelp" autocomplete="off" required>
</div> </div>
<span class="form-control-feedback"> <span class="form-control-feedback">
<i class="material-icons">done</i> <i class="material-icons">done</i>
@@ -71,7 +71,4 @@
</div> </div>
</div> </div>
</div> </div>
<div class="tab-pane" id="updates">
Test
</div>
</div> </div>

View File

@@ -0,0 +1,3 @@
<div id="container-{{$level_id}}-{{$periode_id}}" niveau="{{$level_id}}" periode="{{$periode_id}}" class="col m-0 border-bottom border-right scheduleEditor-course">
@loaderDot
</div>

View File

@@ -0,0 +1,21 @@
<div id="levelHeader-{{$level_id}}" class="col border-right border-bottom bg-dark text-white">
<div class="row">
<div class="col-9">
<div class="form-group label-floating">
<input type="text" placeholder="Niveau" name="level_name_{{$level_id}}" class="form-control text-white" value="{{$level_name}}" />
<span class="form-control-feedback">
<i class="material-icons">clear</i>
</span>
</div>
</div>
<div class="col-3 text-right">
<button type="button" class="btn btn-link btn-sm dropdown-toggle dropdown-toggle-split text-white" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<button id="modeSwitchPeriodeC{{$level_id}}" class="btn-secondary dropdown-item m-1" onclick="selectCourseModeNiveau('course',{{$level_id}})">Mode "Cours" pour toutes les périodes</button>
<button id="modeSwitchPeriodeO{{$level_id}}" class="btn-secondary dropdown-item m-1" onclick="selectCourseModeNiveau('other',{{$level_id}})">Mode "Autre" pour toutes les période</button>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,43 @@
<div class="row" id="row-{{$periode_id}}">
<div class="col-2 d-inline border-right border-bottom bg-light">
<div class="row">
<div class="col-9">
<div class="form-group label-floating">
<input type="text" placeholder="Période" name="periode_name_{{$periode_id}}" class="form-control" value="{{$periode_name}}" />
<span class="form-control-feedback">
<i class="material-icons">clear</i>
</span>
</div>
</div>
<div class="col-3 text-right">
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<button id="modeSwitchPeriodeC{{$periode_id}}" class="btn-secondary dropdown-item m-1" onclick="selectCourseModePeriode('course',{{$periode_id}})">Mode "Cours" pour toute la période</button>
<button id="modeSwitchPeriodeO{{$periode_id}}" class="btn-secondary dropdown-item m-1" onclick="selectCourseModePeriode('other',{{$periode_id}})">Mode "Autre" pour toute la période</button>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="form-group label-floating">
<input type="time" class="form-control" name="periode_begin_time_{{$periode_id}}" value="{{$periode_begin_time}}" />
<span class="form-control-feedback"><i class="material-icons">clear</i></span>
</div>
</div>
<div class="col-6">
<div class="form-group label-floating">
<input type="time" class="form-control" name="periode_end_time_{{$periode_id}}" value="{{$periode_end_time}}" />
<span class="form-control-feedback"><i class="material-icons">clear</i></span>
</div>
</div>
</div>
</div>
@for($i = 1; $i <= $nbLevel;$i++)
@include('admin.schedule.editor.level',['periode_id' => $periode_id,'level_id' => $i])
@endfor
<div class="col-1">
</div>
</div>

View File

@@ -5,84 +5,26 @@
</b> </b>
</div> </div>
@foreach($eventType->schedule_model['niveaux'] as $niveau) @foreach($eventType->schedule_model['niveaux'] as $niveau)
<div class="col border-right border-bottom bg-dark text-white"> @include('admin.schedule.editor.levelHeader',['level_id' => $loop->index+1,'level_name' => $niveau['name']])
<div class="row">
<div class="col-9">
<div class="form-group label-floating">
<input type="text" placeholder="Niveau" class="form-control text-white" value="{{$niveau['name']}}" />
<span class="form-control-feedback">
<i class="material-icons">clear</i>
</span>
</div>
</div>
<div class="col-3 text-right">
<button type="button" class="btn btn-link btn-sm dropdown-toggle dropdown-toggle-split text-white" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<button id="modeSwitchPeriodeC{{$loop->index+1}}" class="btn-secondary dropdown-item m-1" onclick="selectCourseModeNiveau('course',{{$loop->index+1}})">Mode "Cours" pour toutes les périodes</button>
<button id="modeSwitchPeriodeO{{$loop->index+1}}" class="btn-secondary dropdown-item m-1" onclick="selectCourseModeNiveau('other',{{$loop->index+1}})">Mode "Autre" pour toutes les période</button>
</div>
</div>
</div>
</div>
@endforeach @endforeach
<div class="col-1"> <div class="col-1">
<button class="btn btn-primary btn-fab btn-fab-mini btn-round"> <button class="btn btn-primary btn-fab btn-fab-mini btn-round" onclick="addLevel()">
<i class="material-icons">add</i> <i class="material-icons">add</i>
</button> </button>
</div> </div>
</div> </div>
@foreach($eventType->schedule_model['periodes'] as $periode) @foreach($eventType->schedule_model['periodes'] as $periode)
<div class="row"> @include('admin.schedule.editor.periode',[
<div class="col-2 d-inline border-right border-bottom bg-light"> 'periode_name' => $periode['name'],
<div class="row"> 'periode_begin_time' => $periode['begin_time'],
<div class="col-9"> 'periode_end_time' => $periode['end_time'],
<div class="form-group label-floating"> 'periode_id' => $loop->index+1,
<input type="text" placeholder="Période" class="form-control" value="{{$periode['name']}}" /> 'nbLevel' => count($eventType->schedule_model['niveaux'])
<span class="form-control-feedback"> ])
<i class="material-icons">clear</i>
</span>
</div>
</div>
<div class="col-3 text-right">
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<button id="modeSwitchPeriodeC{{$loop->index+1}}" class="btn-secondary dropdown-item m-1" onclick="selectCourseModePeriode('course',{{$loop->index+1}})">Mode "Cours" pour toute la période</button>
<button id="modeSwitchPeriodeO{{$loop->index+1}}" class="btn-secondary dropdown-item m-1" onclick="selectCourseModePeriode('other',{{$loop->index+1}})">Mode "Autre" pour toute la période</button>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="form-group label-floating">
<input type="time" class="form-control" value="{{$periode['begin_time']}}" />
<span class="form-control-feedback"><i class="material-icons">clear</i></span>
</div>
</div>
<div class="col-6">
<div class="form-group label-floating">
<input type="time" class="form-control" value="{{$periode['end_time']}}" />
<span class="form-control-feedback"><i class="material-icons">clear</i></span>
</div>
</div>
</div>
</div>
@foreach($eventType->schedule_model['niveaux'] as $niveau)
<div id="container-{{$loop->index+1}}-{{$loop->parent->index+1}}" niveau="{{$loop->index+1}}" periode="{{$loop->parent->index+1}}" class="col m-0 border-bottom border-right scheduleEditor-course">
@loaderDot
</div>
@endforeach
<div class="col-1">
</div>
</div>
@endforeach @endforeach
<div class="row"> <div class="row">
<div class="col-2 p-2"> <div class="col-2 p-2">
<button class="btn btn-primary btn-fab btn-fab-mini btn-round"> <button class="btn btn-primary btn-fab btn-fab-mini btn-round" onclick="addPeriode()">
<i class="material-icons">add</i> <i class="material-icons">add</i>
</button> </button>
</div> </div>

View File

@@ -22,6 +22,9 @@ Route::middleware('auth:api')->group(function () {
Route::get('/schedule/editor/init/{id}','ScheduleEditorController@getTemplate')->middleware('perm:schedule_edit'); Route::get('/schedule/editor/init/{id}','ScheduleEditorController@getTemplate')->middleware('perm:schedule_edit');
Route::get('/schedule/editor/course/{niveau}/{periode}','ScheduleEditorController@getCourseEmpty')->middleware('perm:schedule_edit'); Route::get('/schedule/editor/course/{niveau}/{periode}','ScheduleEditorController@getCourseEmpty')->middleware('perm:schedule_edit');
Route::get('/schedule/editor/template/{id}','ScheduleEditorController@getEventTemplate')->middleware('perm:schedule_add'); Route::get('/schedule/editor/template/{id}','ScheduleEditorController@getEventTemplate')->middleware('perm:schedule_add');
Route::get('/schedule/editor/emptyperiode/{id}','ScheduleEditorController@getEmptyPeriode')->middleware('perm:schedule_add');
Route::get('/schedule/editor/emptylevel/{id}','ScheduleEditorController@getEmptyLevel')->middleware('perm:schedule_add');
Route::get('/schedule/editor/levelHeader/{id}','ScheduleEditorController@getLevelHeader')->middleware('perm:schedule_add');
Route::post('/schedule/event/delete/{id}','ScheduleController@delete')->middleware('perm:schedule_delete'); Route::post('/schedule/event/delete/{id}','ScheduleController@delete')->middleware('perm:schedule_delete');
/** Booking */ /** Booking */

View File

@@ -16,6 +16,9 @@ use Illuminate\Support\Facades\Storage;
Auth::routes(); Auth::routes();
Route::get('logout', 'Auth\LoginController@logout')->name('logout'); Route::get('logout', 'Auth\LoginController@logout')->name('logout');
Route::get("/test/{id}",'ScheduleEditorController@getEventTemplate'); Route::get("/test/{id}",'ScheduleEditorController@getEventTemplate');
Route::get("/test/{id}",'ScheduleEditorController@getEventTemplate');
Route::get('/ocom/create','OCOMController@create');
/** Public Route */ /** Public Route */