From 238b6b10d4ba763e96556e77439826e18edc4978 Mon Sep 17 00:00:00 2001 From: iziram Date: Tue, 30 May 2023 11:47:59 +0200 Subject: [PATCH] =?UTF-8?q?Assiduites=20:=20pr=C3=A9f=C3=A9rences=20-=20jo?= =?UTF-8?q?urs=20travaill=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scodoc/sco_preferences.py | 11 ++++ app/static/css/assiduites.css | 6 +++ app/static/js/assiduites.js | 50 ++++++++++++++++++- .../assiduites/signal_assiduites_etud.j2 | 11 ++-- .../assiduites/signal_assiduites_group.j2 | 2 + app/views/assiduites.py | 8 +++ 6 files changed, 83 insertions(+), 5 deletions(-) diff --git a/app/scodoc/sco_preferences.py b/app/scodoc/sco_preferences.py index 99080600b..ec21d0095 100644 --- a/app/scodoc/sco_preferences.py +++ b/app/scodoc/sco_preferences.py @@ -642,6 +642,17 @@ class BasePreferences(object): "category": "assi", }, ), + ( + "non_travail", + { + "initvalue": "sam, dim", + "title": "Jours non travaillés", + "size": 40, + "category": "assi", + "only_global": True, + "explanation": "Liste des jours (lun,mar,mer,jeu,ven,sam,dim)", + }, + ), # portal ( "portal_url", diff --git a/app/static/css/assiduites.css b/app/static/css/assiduites.css index 1301044f4..701cdc9be 100644 --- a/app/static/css/assiduites.css +++ b/app/static/css/assiduites.css @@ -28,6 +28,9 @@ .infos { position: relative; width: fit-content; + display: flex; + justify-content: space-evenly; + align-content: center; } #datestr { @@ -36,6 +39,9 @@ border: 1px #444 solid; border-radius: 5px; padding: 5px; + min-width: 100px; + display: inline-block; + min-height: 20px; } #tl_slider { diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js index 2a2325603..d3264bc15 100644 --- a/app/static/js/assiduites.js +++ b/app/static/js/assiduites.js @@ -467,7 +467,18 @@ function updateDate() { const date = dateInput.valueAsDate; - $("#datestr").text(formatDate(date).capitalize()); + if (!verifyNonWorkDays(date.getDay(), nonWorkDays)) { + $("#datestr").text(formatDate(date).capitalize()); + dateInput.setAttribute("value", date.toISOString().split("T")[0]); + return true; + } else { + const att = document.createTextNode( + "Le jour sélectionné n'est pas un jour travaillé." + ); + openAlertModal("Erreur", att, "", "crimson"); + dateInput.value = dateInput.getAttribute("value"); + return false; + } } function verifyDateInSemester() { @@ -519,6 +530,39 @@ function formatDateModal(str, separator = "·") { return new moment.tz(str, TIMEZONE).format(`DD/MM/Y ${separator} HH:mm`); } +/** + * Vérifie si la date sélectionnée n'est pas un jour non travaillé + * Renvoie Vrai si le jour est non travaillé + */ +function verifyNonWorkDays(day, nonWorkdays) { + let d = ""; + switch (day) { + case 0: + d = "dim"; + break; + case 1: + d = "lun"; + break; + case 2: + d = "mar"; + break; + case 3: + d = "mer"; + break; + case 4: + d = "jeu"; + break; + case 5: + d = "ven"; + break; + case 6: + d = "sam"; + break; + } + + return nonWorkdays.indexOf(d) != -1; +} + /** * Fonction qui vérifie si une période est dans un interval * Objet période / interval @@ -573,7 +617,9 @@ function isConflictSameAsTimeLine(conflict) { * @returns {Date} la date sélectionnée */ function getDate() { - const date = document.querySelector("#tl_date").valueAsDate; + const date = new Date( + document.querySelector("#tl_date").getAttribute("value") + ); date.setHours(0, 0, 0, 0); return date; } diff --git a/app/templates/assiduites/signal_assiduites_etud.j2 b/app/templates/assiduites/signal_assiduites_etud.j2 index 100528acf..7e77f7b49 100644 --- a/app/templates/assiduites/signal_assiduites_etud.j2 +++ b/app/templates/assiduites/signal_assiduites_etud.j2 @@ -37,7 +37,7 @@
Date: - +
{{timeline|safe}} @@ -70,11 +70,16 @@