From e5b1082e1df623f10fb242a8953ad208217487ce Mon Sep 17 00:00:00 2001 From: iziram Date: Wed, 26 Jul 2023 16:43:49 +0200 Subject: [PATCH] Assiduites : lecture seule + bug fix --- app/scodoc/sco_formsemestre_status.py | 14 +- app/static/css/assiduites.css | 5 +- app/static/js/assiduites.js | 110 ++++++++++--- .../pages/signal_assiduites_group.j2 | 40 +++-- .../assiduites/widgets/minitimeline.j2 | 10 +- .../assiduites/widgets/tableau_assi.j2 | 23 --- app/templates/assiduites/widgets/timeline.j2 | 3 +- app/views/assiduites.py | 151 ++++++++++++++++++ 8 files changed, 287 insertions(+), 69 deletions(-) diff --git a/app/scodoc/sco_formsemestre_status.py b/app/scodoc/sco_formsemestre_status.py index 6cd896149..78f1592f3 100755 --- a/app/scodoc/sco_formsemestre_status.py +++ b/app/scodoc/sco_formsemestre_status.py @@ -838,9 +838,6 @@ def _make_listes_sem(formsemestre: FormSemestre, with_absences=True): weekday = datetime.datetime.today().weekday() try: if with_absences: - first_monday = sco_abs.ddmmyyyy( - formsemestre.date_debut.strftime("%d/%m/%Y") - ).prev_monday() form_abs_tmpl = f""" + + + """ except ScoInvalidDateError: # dates incorrectes dans semestres ? form_abs_tmpl = "" # @@ -904,8 +907,7 @@ def _make_listes_sem(formsemestre: FormSemestre, with_absences=True): """ ) - if with_absences: - H.append(form_abs_tmpl % group) + H.append(form_abs_tmpl % group) H.append("") H.append("") diff --git a/app/static/css/assiduites.css b/app/static/css/assiduites.css index e93f63abb..10031d7d5 100644 --- a/app/static/css/assiduites.css +++ b/app/static/css/assiduites.css @@ -11,7 +11,7 @@ } #validate_selectors { - margin-top: 5vh; + margin: 15px 0; } .no-display { @@ -91,9 +91,6 @@ /* === Gestion des etuds row === */ -.etud_holder { - margin-top: 5vh; -} .etud_row { display: grid; diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js index c506e345e..0c1697b7d 100644 --- a/app/static/js/assiduites.js +++ b/app/static/js/assiduites.js @@ -84,19 +84,19 @@ function validateSelectors(btn) { ); }); - if (getModuleImplId() == null && window.forceModule) { - const HTML = ` -

Attention, le module doit obligatoirement être renseigné.

-

Cela vient de la configuration du semestre ou plus largement du département.

-

Si c'est une erreur, veuillez voir avec le ou les responsables de votre scodoc.

- `; + // if (getModuleImplId() == null && window.forceModule) { + // const HTML = ` + //

Attention, le module doit obligatoirement être renseigné.

+ //

Cela vient de la configuration du semestre ou plus largement du département.

+ //

Si c'est une erreur, veuillez voir avec le ou les responsables de votre scodoc.

+ // `; - const content = document.createElement("div"); - content.innerHTML = HTML; + // const content = document.createElement("div"); + // content.innerHTML = HTML; - openAlertModal("Sélection du module", content); - return; - } + // openAlertModal("Sélection du module", content); + // return; + // } getAssiduitesFromEtuds(true); @@ -269,6 +269,15 @@ function executeMassActionQueue() { }; assiduite = setModuleImplId(assiduite); + if (assiduite.moduleimpl_id == null && window.forceModule) { + const html = ` +

Aucun module n'a été spécifié

+ `; + const div = document.createElement("div"); + div.innerHTML = html; + openAlertModal("Erreur Module", div); + return 0; + } const createQueue = []; //liste des assiduités qui seront créées. @@ -311,6 +320,16 @@ function executeMassActionQueue() { return assiduite; }); + if (getModuleImplId() == null && window.forceModule) { + const html = ` +

Aucun module n'a été spécifié

+ `; + const div = document.createElement("div"); + div.innerHTML = html; + openAlertModal("Erreur Module", div); + return 0; + } + const path = getUrl() + `/api/assiduites/edit`; sync_post( path, @@ -496,7 +515,7 @@ function generateMassAssiduites() { }); }); - if (!verifyDateInSemester()) { + if (!verifyDateInSemester() || readOnly) { content.querySelector(".btns_field.mass").setAttribute("disabled", "true"); } } @@ -849,6 +868,16 @@ function createAssiduite(etat, etudid) { assiduite = setModuleImplId(assiduite); + if (assiduite.moduleimpl_id == null && window.forceModule) { + const html = ` +

Aucun module n'a été spécifié

+ `; + const div = document.createElement("div"); + div.innerHTML = html; + openAlertModal("Erreur Module", div); + return false; + } + const path = getUrl() + `/api/assiduite/${etudid}/create`; sync_post( path, @@ -865,6 +894,7 @@ function createAssiduite(etat, etudid) { errorAlert(); } ); + return true; } /** @@ -889,6 +919,7 @@ function deleteAssiduite(assiduite_id) { errorAlert(); } ); + return true; } /** @@ -905,6 +936,15 @@ function editAssiduite(assiduite_id, etat) { }; assiduite = setModuleImplId(assiduite); + if (assiduite.moduleimpl_id == null && window.forceModule) { + const html = ` +

Aucun module n'a été spécifié

+ `; + const div = document.createElement("div"); + div.innerHTML = html; + openAlertModal("Erreur Module", div); + return; + } const path = getUrl() + `/api/assiduite/${assiduite_id}/edit`; let bool = false; sync_post( @@ -1072,15 +1112,16 @@ function assiduiteAction(element) { } } else { // Cas normal -> mise à jour en base + let done = false; switch (type) { case "création": - createAssiduite(etat, etudid); + done = createAssiduite(etat, etudid); break; case "édition": if (etat === "remove") { - deleteAssiduite(assiduite_id); + done = deleteAssiduite(assiduite_id); } else { - editAssiduite(assiduite_id, etat); + done = editAssiduite(assiduite_id, etat); } break; case "conflit": @@ -1105,7 +1146,7 @@ function assiduiteAction(element) { return; } - if (type != "conflit") { + if (type != "conflit" && done) { let etatAffiche; switch (etat.toUpperCase()) { @@ -1262,7 +1303,7 @@ function insertEtudRow(etud, index, output = false) { bar.appendChild(createMiniTimeline(assiduites[etud.id])); - if (!verifyDateInSemester()) { + if (!verifyDateInSemester() || readOnly) { row.querySelector(".btns_field.single").setAttribute("disabled", "true"); } } @@ -1485,7 +1526,6 @@ function fastJustify(assiduite) { if (justifs.length > 0) { justifyAssiduite(assiduite.assiduite_id, !assiduite.est_just); } else { - console.debug("WIP"); //créer un nouveau justificatif // Afficher prompt -> demander raison et état @@ -1617,3 +1657,37 @@ function errorAlert() { div.innerHTML = html; openAlertModal("Une erreur s'est produite", div); } + +const moduleimpls = {}; + +function getModuleImpl(assiduite) { + const id = assiduite.moduleimpl_id; + + if (id == null || id == undefined) { + if ( + "desc" in assiduite && + assiduite.desc != null && + assiduite.desc.indexOf("Module:Autre") != -1 + ) { + return "Autre"; + } else { + return "Pas de module"; + } + } + + if (id in moduleimpls) { + return moduleimpls[id]; + } + const url_api = getUrl() + `/api/moduleimpl/${id}`; + sync_get( + url_api, + (data) => { + moduleimpls[id] = `${data.module.code} ${data.module.abbrev}`; + }, + (data) => { + moduleimpls[id] = "Pas de module"; + } + ); + + return moduleimpls[id]; +} diff --git a/app/templates/assiduites/pages/signal_assiduites_group.j2 b/app/templates/assiduites/pages/signal_assiduites_group.j2 index d668646ea..d0c1a8a15 100644 --- a/app/templates/assiduites/pages/signal_assiduites_group.j2 +++ b/app/templates/assiduites/pages/signal_assiduites_group.j2 @@ -2,34 +2,50 @@
- {{formsemestre_id}} {{formsemestre_date_debut}} {{formsemestre_date_fin}} -

Saisie des assiduités {{gr_tit|safe}} {{sem}}

+ {% if readonly == "true" %} +

La page est en lecture seule.

+ {% endif %} +
Groupes : {{grp|safe}}
- -
Module :{{moduleimpl_select|safe}}
+
Date:
- - {{timeline|safe}} - + {% if readonly == "true" %} + + {% else %} + {% endif %} + {{timeline|safe}} + + + + {% if readonly == "false" %} +
+ +
Module :{{moduleimpl_select|safe}}
+
+ {% else %} + {% endif %}

Veillez à choisir le groupe concerné par la saisie ainsi que la date de la saisie. @@ -75,6 +91,9 @@ const nonWorkDays = [{{ nonworkdays| safe }}]; + const readOnly = {{ readonly }}; + + updateDate(); setupDate(); setupTimeLine(); @@ -89,17 +108,14 @@ const select = document.getElementById("moduleimpl_select"); - if (select.value == "") { - btn.disabled = true; + if (!readOnly && select.value == "") { document.getElementById('forcemodule').style.display = "block"; } - select.addEventListener('change', (e) => { + select?.addEventListener('change', (e) => { if (e.target.value != "") { - btn.disabled = false; document.getElementById('forcemodule').style.display = "none"; } else { - btn.disabled = true; document.getElementById('forcemodule').style.display = "block"; } }); diff --git a/app/templates/assiduites/widgets/minitimeline.j2 b/app/templates/assiduites/widgets/minitimeline.j2 index 244cfbf3e..811fd1937 100644 --- a/app/templates/assiduites/widgets/minitimeline.j2 +++ b/app/templates/assiduites/widgets/minitimeline.j2 @@ -38,15 +38,15 @@ } array.forEach((assiduité) => { - const startDate = moment(assiduité.date_debut); - const endDate = moment(assiduité.date_fin); + let startDate = moment(assiduité.date_debut); + let endDate = moment(assiduité.date_fin); if (startDate.isBefore(dayStart)) { - startDate.startOf("day").add(mt_start, "hours"); + startDate = dayEnd.clone().startOf("day").add(mt_start, "hours"); } if (endDate.isAfter(dayEnd)) { - endDate.startOf("day").add(mt_end, "hours"); + endDate = dayEnd.clone().startOf("day").add(mt_end, "hours"); } const block = document.createElement("div"); @@ -140,7 +140,7 @@ const idDiv = document.createElement("div"); idDiv.className = "assiduite-id"; - idDiv.textContent = `ID: ${assiduite.assiduite_id}`; + idDiv.textContent = `${getModuleImpl(assiduite)}`; bubble.appendChild(idDiv); const periodDivDeb = document.createElement("div"); diff --git a/app/templates/assiduites/widgets/tableau_assi.j2 b/app/templates/assiduites/widgets/tableau_assi.j2 index caf4fda30..0a133eb2d 100644 --- a/app/templates/assiduites/widgets/tableau_assi.j2 +++ b/app/templates/assiduites/widgets/tableau_assi.j2 @@ -63,30 +63,7 @@ try { stats() } catch (_) { } } - const moduleimpls = {} - function getModuleImpl(assiduite) { - const id = assiduite.moduleimpl_id; - - if (id == null || id == undefined) { - if ("desc" in assiduite && assiduite.desc != null && assiduite.desc.indexOf('Module:Autre') != -1) { - return "Autre" - } else { - return "Pas de module" - } - } - - if (id in moduleimpls) { - return moduleimpls[id]; - } - const url_api = getUrl() + `/api/moduleimpl/${id}`; - sync_get(url_api, (data) => { - moduleimpls[id] = `${data.module.code} ${data.module.abbrev}`; - }, (data) => { moduleimpls[id] = "Pas de module" }); - - return moduleimpls[id]; - - } function renderTableAssiduites(page, assiduités) { diff --git a/app/templates/assiduites/widgets/timeline.j2 b/app/templates/assiduites/widgets/timeline.j2 index 4f77c86d1..706c5f504 100644 --- a/app/templates/assiduites/widgets/timeline.j2 +++ b/app/templates/assiduites/widgets/timeline.j2 @@ -234,11 +234,12 @@