mirror of
https://gitlab.com/TheGamecraft/c-cms.git
synced 2026-04-21 10:49:10 -04:00
Update schedule editor
This commit is contained in:
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\OCOM;
|
||||
use Illuminate\Http\Request;
|
||||
use function GuzzleHttp\json_encode;
|
||||
use function GuzzleHttp\Psr7\str;
|
||||
|
||||
class OCOMController extends Controller
|
||||
@@ -699,4 +700,30 @@ X20,\"Participer à des activités
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function jsonList()
|
||||
{
|
||||
$ocoms = \App\OCOM::all();
|
||||
|
||||
$name = [];
|
||||
|
||||
foreach ($ocoms as $ocom) {
|
||||
array_push($name, $ocom->ocom);
|
||||
}
|
||||
|
||||
return json_encode($name);
|
||||
}
|
||||
|
||||
public function getName(string $ocom)
|
||||
{
|
||||
$foo = \App\OCOM::all()->where('ocom','=',$ocom)->first();
|
||||
if($foo != null)
|
||||
{
|
||||
return $foo->objectif_competence;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ class ScheduleEditorController extends Controller
|
||||
"end_time" => "20:30"
|
||||
],
|
||||
2 => [
|
||||
"name" => "Periode 1",
|
||||
"name" => "Periode 2",
|
||||
"begin_time" => "20:30",
|
||||
"end_time" => "21:20"
|
||||
]
|
||||
|
||||
6
public/css/material-dashboard.css
vendored
6
public/css/material-dashboard.css
vendored
@@ -3305,9 +3305,9 @@ fieldset:disabled a.btn {
|
||||
}
|
||||
|
||||
.btn-secondary:hover {
|
||||
color: #ffffff;
|
||||
background-color: #5a6268;
|
||||
border-color: #545b62;
|
||||
color: #ffffff !important;
|
||||
background-color: #5a6268 !important;
|
||||
border-color: #545b62 !important;
|
||||
}
|
||||
|
||||
.btn-secondary:focus,
|
||||
|
||||
10
public/js/plugins/autocomplete.js
vendored
10
public/js/plugins/autocomplete.js
vendored
@@ -104,3 +104,13 @@ function initAutoComplete(htmlClass)
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
function initAutoCompleteOCOM(htmlClass)
|
||||
{
|
||||
$.get('/api/ocom/list?api_token='+api_token, function ( data ) {
|
||||
var ocoms = JSON.parse(data);
|
||||
$("."+htmlClass).each(function ( index ) {
|
||||
autocomplete(document.getElementById(this.id), ocoms);
|
||||
})
|
||||
});
|
||||
}
|
||||
82
public/js/plugins/schedule/editor.js
vendored
82
public/js/plugins/schedule/editor.js
vendored
@@ -1,3 +1,5 @@
|
||||
var editorTemplate;
|
||||
|
||||
function initScheduleEditor(id, eventType)
|
||||
{
|
||||
$.ajax({
|
||||
@@ -10,7 +12,8 @@ function initScheduleEditor(id, eventType)
|
||||
loadCourse(pniveau,pperiode);
|
||||
}
|
||||
}
|
||||
initAutoComplete("AutoComplete");
|
||||
initAutoComplete("AutoCompleteUser");
|
||||
initAutoCompleteOCOM('AutoCompleteOCOM');
|
||||
},
|
||||
error: function () {
|
||||
showNotification('error','Impossible d\'initialiser l\'éditeur d\'horaire ...','top', 'center')
|
||||
@@ -84,6 +87,7 @@ function loadEventType(date)
|
||||
url: '/api/schedule/editor/template/'+id+'?api_token='+api_token,
|
||||
success: function (data) {
|
||||
var result = JSON.parse(data);
|
||||
editorTemplate = result;
|
||||
initScheduleEditor("scheduleEditor",id)
|
||||
$.each(result, function (i, val) {
|
||||
if(i == "is_mandatory" || i == "use_schedule" || i == "use_weekly_msg")
|
||||
@@ -159,3 +163,79 @@ function loadEventType(date)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function updateCourseName(niveau, periode) {
|
||||
setTimeout(function(){
|
||||
let val = $('#ocom_n'+niveau+'_p'+periode).val();
|
||||
if(val != "")
|
||||
{
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: '/api/ocom/'+val+'/name?api_token='+api_token,
|
||||
success: function (data) {
|
||||
if(data != null && data != "")
|
||||
{
|
||||
$('#name_n'+niveau+'_p'+periode).val(data);
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
showNotification('error','Erreur impossible de charger l\'objectif de rendement ...','top', 'center')
|
||||
}
|
||||
})
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
|
||||
function selectCourseMode(mode, niveau, periode)
|
||||
{
|
||||
if(mode == "course")
|
||||
{
|
||||
$('#descContainer'+niveau+'-'+periode).addClass('d-none');
|
||||
$('#isDoneContainer'+niveau+'-'+periode).removeClass('d-none');
|
||||
$('#isDoneContainer'+niveau+'-'+periode).addClass('d-flex');
|
||||
$('#OCOMContainer'+niveau+'-'+periode).removeClass('d-none');
|
||||
$('#nameContainer'+niveau+'-'+periode).removeClass('d-none');
|
||||
$('#modeSwitchC'+niveau+'-'+periode).addClass('active');
|
||||
$('#modeSwitchO'+niveau+'-'+periode).removeClass('active');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#descContainer'+niveau+'-'+periode).removeClass('d-none');
|
||||
$('#isDoneContainer'+niveau+'-'+periode).addClass('d-none');
|
||||
$('#isDoneContainer'+niveau+'-'+periode).removeClass('d-flex');
|
||||
$('#OCOMContainer'+niveau+'-'+periode).addClass('d-none');
|
||||
$('#nameContainer'+niveau+'-'+periode).addClass('d-none');
|
||||
$('#modeSwitchC'+niveau+'-'+periode).removeClass('active');
|
||||
$('#modeSwitchO'+niveau+'-'+periode).addClass('active');
|
||||
}
|
||||
}
|
||||
|
||||
function selectCourseModePeriode(mode,periode)
|
||||
{
|
||||
$.each(editorTemplate['schedule_model']['niveaux'], function (i, val) {
|
||||
selectCourseMode(mode,i+1,periode);
|
||||
});
|
||||
}
|
||||
|
||||
function selectCourseModeNiveau(mode,niveau)
|
||||
{
|
||||
$.each(editorTemplate['schedule_model']['periodes'], function (i, val) {
|
||||
selectCourseMode(mode,niveau,i+1);
|
||||
});
|
||||
}
|
||||
|
||||
function updatePlantext(toggle,id)
|
||||
{
|
||||
if($('#'+toggle).is(":checked"))
|
||||
{
|
||||
$('#'+id).removeClass('text-warning');
|
||||
$('#'+id).addClass('text-success');
|
||||
$('#'+id).html('Plan de cours remis')
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#'+id).addClass('text-warning');
|
||||
$('#'+id).removeClass('text-success');
|
||||
$('#'+id).html('Plan de cours non remis')
|
||||
}
|
||||
}
|
||||
@@ -1,36 +1,77 @@
|
||||
<div class="row pt-2 pb-2 border-bottom border-right">
|
||||
<div class="col-6 mb-1">
|
||||
<div class="form-group label-floating">
|
||||
<input type="text" placeholder="OCOM du cours" class="form-control" />
|
||||
<span class="form-control-feedback">
|
||||
<i class="material-icons">done</i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="form-group label-floating">
|
||||
<input type="text" placeholder="Nom du cours" class="form-control" />
|
||||
<span class="form-control-feedback">
|
||||
<i class="material-icons">clear</i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 mb-1">
|
||||
<div class="form-group label-floating">
|
||||
<input type="text" placeholder="Lieu du cours" class="form-control" />
|
||||
<span class="form-control-feedback">
|
||||
<i class="material-icons">done</i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="form-group label-floating">
|
||||
<div class="autocomplete">
|
||||
<input type="text" placeholder="Nom de l'instructeur" id="instruc_n{{$niveau}}_p{{$periode}}" class="form-control AutoComplete" aria-describedby="nameHelp" autocomplete="off" required>
|
||||
<div class="row bg-light">
|
||||
<div class="col-8 pr-0 m-auto d-flex">
|
||||
<div class="pr-0 m-auto d-flex" id="isDoneContainer{{$niveau}}-{{$periode}}">
|
||||
<div class="togglebutton">
|
||||
<label class="m-auto">
|
||||
<input type="checkbox" id="plan_n{{$niveau}}_p{{$periode}}" name="plan_n{{$niveau}}_p{{$periode}}" onchange="updatePlantext('plan_n{{$niveau}}_p{{$periode}}','planText_n{{$niveau}}_p{{$periode}}')">
|
||||
<span class="toggle"></span>
|
||||
</label>
|
||||
</div>
|
||||
<span class="form-control-feedback">
|
||||
<i class="material-icons">done</i>
|
||||
</span>
|
||||
<div class="text-warning p-1 justify-content-center" id="planText_n{{$niveau}}_p{{$periode}}">
|
||||
Plan de cours non remis
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 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="modeSwitchC{{$niveau}}-{{$periode}}" class="btn-secondary dropdown-item active m-1" onclick="selectCourseMode('course',{{$niveau}},{{$periode}})">Mode "Cours" pour cette période</button>
|
||||
<button id="modeSwitchO{{$niveau}}-{{$periode}}" class="btn-secondary dropdown-item m-1" onclick="selectCourseMode('other',{{$niveau}},{{$periode}})">Mode "Autre" pour cette période</button>
|
||||
<div class="dropdown-divider"></div>
|
||||
<button class="btn-secondary dropdown-item" href="#">Réinitialiser</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-content text-center">
|
||||
<div class="tab-pane active" id="home">
|
||||
<div class="row pt-2">
|
||||
<div class="col-12 d-none" id="descContainer{{$niveau}}-{{$periode}}">
|
||||
<div class="form-group">
|
||||
<label for="exampleFormControlTextarea1">Description de la période</label>
|
||||
<textarea class="form-control" id="exampleFormControlTextarea1" rows="2"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 mb-1" id="OCOMContainer{{$niveau}}-{{$periode}}">
|
||||
<div class="form-group label-floating">
|
||||
<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}}')">
|
||||
</div>
|
||||
<span class="form-control-feedback">
|
||||
<i class="material-icons">done</i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6" id="nameContainer{{$niveau}}-{{$periode}}">
|
||||
<div class="form-group label-floating">
|
||||
<input type="text" placeholder="Nom du cours" id="name_n{{$niveau}}_p{{$periode}}" class="form-control" required />
|
||||
<span class="form-control-feedback">
|
||||
<i class="material-icons">clear</i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 mb-1">
|
||||
<div class="form-group label-floating">
|
||||
<input type="text" placeholder="Lieu du cours" class="form-control" required/>
|
||||
<span class="form-control-feedback">
|
||||
<i class="material-icons">done</i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="form-group label-floating">
|
||||
<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>
|
||||
</div>
|
||||
<span class="form-control-feedback">
|
||||
<i class="material-icons">done</i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="updates">
|
||||
Test
|
||||
</div>
|
||||
</div>
|
||||
@@ -6,11 +6,24 @@
|
||||
</div>
|
||||
@foreach($eventType->schedule_model['niveaux'] as $niveau)
|
||||
<div class="col border-right border-bottom bg-dark text-white">
|
||||
<div class="form-group label-floating">
|
||||
<input type="text" placeholder="Niveau" class="form-control text-white" value="{{$niveau['name']}}" />
|
||||
<span class="form-control-feedback">
|
||||
<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
|
||||
@@ -23,11 +36,24 @@
|
||||
@foreach($eventType->schedule_model['periodes'] as $periode)
|
||||
<div class="row">
|
||||
<div class="col-2 d-inline border-right border-bottom bg-light">
|
||||
<div class="form-group label-floating">
|
||||
<input type="text" placeholder="Période" class="form-control" value="{{$periode['name']}}" />
|
||||
<span class="form-control-feedback">
|
||||
<i class="material-icons">clear</i>
|
||||
</span>
|
||||
<div class="row">
|
||||
<div class="col-9">
|
||||
<div class="form-group label-floating">
|
||||
<input type="text" placeholder="Période" 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{{$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">
|
||||
@@ -45,7 +71,7 @@
|
||||
</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 scheduleEditor-course">
|
||||
<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
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-collapse" id="collmessagedelasemaine">
|
||||
<div class="card card-collapse d-none" id="collmessagedelasemaine">
|
||||
<div class="card-header" role="tab" id="headingTwo">
|
||||
<h5 class="mb-0">
|
||||
<a class="collapsed" data-toggle="collapse" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
|
||||
@@ -86,7 +86,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-collapse" id="collschedule">
|
||||
<div class="card card-collapse d-none" id="collschedule">
|
||||
<div class="card-header" role="tab" id="headingThree">
|
||||
<h5 class="mb-0">
|
||||
<a class="collapsed" data-toggle="collapse" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
|
||||
@@ -97,7 +97,7 @@
|
||||
</div>
|
||||
<div id="collapseThree" class="collapse" role="tabpanel" aria-labelledby="headingThree" data-parent="#accordion">
|
||||
<div class="card-body" style="overflow: scroll">
|
||||
<div id="scheduleEditor" class="m-3" style="width: 90vw">
|
||||
<div id="scheduleEditor" class="m-3" style="width: 110vw">
|
||||
@loaderDot
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -42,7 +42,8 @@ Route::middleware('auth:api')->group(function () {
|
||||
Route::get('/user/list', 'UserController@apiList')->middleware('perm:user_see');
|
||||
|
||||
/** OCOM Route */
|
||||
Route::get('/ocom/list', 'UserController@apiList')->middleware('perm:user_see');
|
||||
Route::get('/ocom/list', 'OCOMController@jsonList')->middleware('perm:schedule_see');
|
||||
Route::get('/ocom/{id}/name','OCOMController@getName')->middleware('perm:schedule_see');
|
||||
|
||||
/** Inventory Route */
|
||||
Route::post('/item/delete', 'ItemController@destroy')->middleware('perm:inventory_delete');
|
||||
|
||||
Reference in New Issue
Block a user