diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js index 91fee8cf..a29c2f25 100644 --- a/app/static/js/assiduites.js +++ b/app/static/js/assiduites.js @@ -837,3 +837,64 @@ function dateCouranteEstTravaillee() { } return true; } + +/** + * Ajout de la visualisation des assiduités de la mini timeline + * @param {HTMLElement} el l'élément survollé + * @param {Assiduité} assiduite l'assiduité représentée par l'élément + */ +function setupAssiduiteBubble(el, assiduite) { + function formatDateModal(dateStr) { + const date = new Date(Date.removeUTC(dateStr)); + return date.format("DD/MM/Y HH:mm"); + } + + if (!assiduite) return; + + const bubble = document.createElement("div"); + bubble.className = "assiduite-bubble"; + bubble.classList.add(assiduite.etat.toLowerCase()); + + const idDiv = document.createElement("div"); + idDiv.className = "assiduite-id"; + getModuleImpl(assiduite).then((modImpl) => { + idDiv.textContent = `${modImpl}`; + }); + bubble.appendChild(idDiv); + + const periodDivDeb = document.createElement("div"); + periodDivDeb.className = "assiduite-period"; + periodDivDeb.textContent = `${formatDateModal(assiduite.date_debut)}`; + bubble.appendChild(periodDivDeb); + const periodDivFin = document.createElement("div"); + periodDivFin.className = "assiduite-period"; + periodDivFin.textContent = `${formatDateModal(assiduite.date_fin)}`; + bubble.appendChild(periodDivFin); + + const stateDiv = document.createElement("div"); + stateDiv.className = "assiduite-state"; + stateDiv.textContent = `État: ${assiduite.etat.capitalize()}`; + bubble.appendChild(stateDiv); + + const motifDiv = document.createElement("div"); + stateDiv.className = "assiduite-why"; + const motif = ["", null, undefined].includes(assiduite.desc) + ? "Pas de motif" + : assiduite.desc.capitalize(); + stateDiv.textContent = `Motif: ${motif}`; + bubble.appendChild(motifDiv); + + const userIdDiv = document.createElement("div"); + userIdDiv.className = "assiduite-user_id"; + userIdDiv.textContent = `saisie le ${formatDateModal( + assiduite.entry_date, + " à " + )}`; + + if (assiduite.user_id != null) { + userIdDiv.textContent += `\npar ${assiduite.user_nom_complet}`; + } + bubble.appendChild(userIdDiv); + + el.appendChild(bubble); +} diff --git a/app/templates/assiduites/pages/signal_assiduites_diff.j2 b/app/templates/assiduites/pages/signal_assiduites_diff.j2 index b61b538b..699024bc 100644 --- a/app/templates/assiduites/pages/signal_assiduites_diff.j2 +++ b/app/templates/assiduites/pages/signal_assiduites_diff.j2 @@ -1,101 +1,371 @@ -{# - - - TODO : revoir le fonctionnement de cette page (trop lente / complexe) - - Utiliser majoritairement du python - #} - {% extends "sco_page.j2" %} {% block styles %} - {{ super() }} - +{{ super() }} + + + + + +{# Temporaire #} + + {% endblock styles %} +{% block scripts %} +{{ super() }} + + + +{% include "sco_timepicker.j2" %} + + + +{% endblock scripts %} + {% block title %} - {{title}} +{{title}} {% endblock title %} {% block app_content %} -{% include "assiduites/widgets/alert.j2" %} -{% include "assiduites/widgets/prompt.j2" %} -{% include "assiduites/widgets/conflict.j2" %} -{% include "assiduites/widgets/toast.j2" %} - -

Signalement différé de l'assiduité {{gr |safe}}

-
Attention, cette page utilise des couleurs et conventions différentes - de celles des autres pages ScoDoc: elle sera prochainement modifée, merci de votre patience. -
-

{{sem | safe }}

+
+ -{{diff | safe}} +
+

Nouvelle période

+ + + -
-

Explication de la saisie différée

-

Si la colonne n'est pas valide elle sera affichée en rouge, passez le curseur sur la colonne pour afficher - le message d'erreur

-

Sélectionner la date de début de la colonne mettra automatiquement la date de fin à la durée d'une séance - (préférence de département)

-

Modifier le module alors que des informations d'assiduité sont déjà enregistrées pour la période changera leur - module.

-

Il y a 4 boutons sur la colonne permettant d'enregistrer l'information pour tous les étudiants

-

Le dernier des boutons retire l'information présente.

-

Vous pouvez ajouter des colonnes en appuyant sur le bouton +

-

Vous pouvez supprimer une colonne en appuyant sur la croix qui se situe dans le coin haut droit de la colonne. -

+ + + +
+ + + + +
+

Actions

+ + + + + + +
+ +
+ + + +
+ +
Période
+ + {% for etud in etudiants %} +
+ {{etud.nomprenom}} + {{ etud.nomprenom }} +
+ {% endfor %} + + + +
+ + +{% include "assiduites/widgets/alert.j2" %} {% endblock app_content %} - - -{% block scripts %} - {{ super() }} - - - -{% endblock scripts %} diff --git a/app/templates/assiduites/pages/signal_assiduites_group.j2 b/app/templates/assiduites/pages/signal_assiduites_group.j2 index 341b624a..c3f43af4 100644 --- a/app/templates/assiduites/pages/signal_assiduites_group.j2 +++ b/app/templates/assiduites/pages/signal_assiduites_group.j2 @@ -30,8 +30,8 @@ const nonWorkDays = [{{ nonworkdays| safe }}]; const readOnly = {{ readonly }}; - window.forceModule = "{{ forcer_module }}" - window.forceModule = window.forceModule == "True" ? true : false + window.forceModule = "{{ forcer_module }}" == "True" + const etudsDefDem = {{ defdem | safe }} const select = document.getElementById("moduleimpl_select"); diff --git a/app/templates/assiduites/widgets/minitimeline.j2 b/app/templates/assiduites/widgets/minitimeline.j2 index dfe15fc7..8a6b4d11 100644 --- a/app/templates/assiduites/widgets/minitimeline.j2 +++ b/app/templates/assiduites/widgets/minitimeline.j2 @@ -85,66 +85,6 @@ return timeline; } - /** - * Ajout de la visualisation des assiduités de la mini timeline - * @param {HTMLElement} el l'élément survollé - * @param {Assiduité} assiduite l'assiduité représentée par l'élément - */ - function setupAssiduiteBubble(el, assiduite) { - - function formatDateModal(dateStr){ - const date = new Date(Date.removeUTC(dateStr)); - return date.format("DD/MM/Y HH:mm"); - } - - if (!assiduite) return; - - const bubble = document.createElement('div'); - bubble.className = "assiduite-bubble"; - bubble.classList.add(assiduite.etat.toLowerCase()); - - const idDiv = document.createElement("div"); - idDiv.className = "assiduite-id"; - getModuleImpl(assiduite).then((modImpl) => { - idDiv.textContent = `${modImpl}`; - }); - bubble.appendChild(idDiv); - - const periodDivDeb = document.createElement("div"); - periodDivDeb.className = "assiduite-period"; - periodDivDeb.textContent = `${formatDateModal(assiduite.date_debut)}`; - bubble.appendChild(periodDivDeb); - const periodDivFin = document.createElement("div"); - periodDivFin.className = "assiduite-period"; - periodDivFin.textContent = `${formatDateModal(assiduite.date_fin)}`; - bubble.appendChild(periodDivFin); - - const stateDiv = document.createElement("div"); - stateDiv.className = "assiduite-state"; - stateDiv.textContent = `État: ${assiduite.etat.capitalize()}`; - bubble.appendChild(stateDiv); - - const motifDiv = document.createElement("div"); - stateDiv.className = "assiduite-why"; - const motif = ["", null, undefined].includes(assiduite.desc) ? "Pas de motif" : assiduite.desc.capitalize(); - stateDiv.textContent = `Motif: ${motif}`; - bubble.appendChild(motifDiv); - - const userIdDiv = document.createElement("div"); - userIdDiv.className = "assiduite-user_id"; - userIdDiv.textContent = `saisie le ${formatDateModal( - assiduite.entry_date, - " à " - )}`; - - if (assiduite.user_id != null) { - userIdDiv.textContent += `\npar ${assiduite.user_nom_complet}` - } - bubble.appendChild(userIdDiv); - - el.appendChild(bubble); - } - function setMiniTick(timelineDate, dayStart, dayDuration) { const endDate = timelineDate.clone().startOf("day"); endDate.setHours(13, 0); diff --git a/app/views/assiduites.py b/app/views/assiduites.py index 4d89939f..d77729fc 100644 --- a/app/views/assiduites.py +++ b/app/views/assiduites.py @@ -1813,33 +1813,8 @@ def signal_assiduites_diff(): formsemestre_id: int = request.args.get("formsemestre_id", -1) formsemestre: FormSemestre = FormSemestre.get_formsemestre(formsemestre_id) - date: str = request.args.get("jour", datetime.date.today().isoformat()) - date_deb: str = request.args.get("date_deb") - date_fin: str = request.args.get("date_fin") - semaine: str = request.args.get("semaine") - - # Dans le cas où on donne une semaine plutot qu'un jour - if semaine is not None: - # On génère la semaine iso à partir de l'anne scolaire. - semaine = ( - f"{scu.annee_scolaire()}-W{semaine}" if "W" not in semaine else semaine - ) - # On met à jour les dates avec le date de debut et fin de semaine - date_deb: datetime.date = datetime.datetime.strptime( - semaine + "-1", "%Y-W%W-%w" - ) - date_fin: datetime.date = date_deb + datetime.timedelta(days=6) - etudiants: list[Identite] = [] - # --- Vérification de la date --- - real_date = scu.is_iso_formated(date, True).date() - - if real_date < formsemestre.date_debut: - date = formsemestre.date_debut.isoformat() - elif real_date > formsemestre.date_fin: - date = formsemestre.date_fin.isoformat() - # Vérification des groupes if group_ids is None: group_ids = [] @@ -1875,26 +1850,16 @@ def signal_assiduites_diff(): return render_template( "assiduites/pages/signal_assiduites_diff.j2", - defaultDates=_get_days_between_dates(date_deb, date_fin), - defdem=_get_etuds_dem_def(formsemestre), - diff=_differee( - etudiants=etudiants, - moduleimpl_select=_module_selector( - formsemestre, request.args.get("moduleimpl_id", None) - ), - date=date, - periode={ - "deb": formsemestre.date_debut.isoformat(), - "fin": formsemestre.date_fin.isoformat(), - }, - ), + etudiants=etudiants, + moduleimpl_select=_module_selector(formsemestre=formsemestre), gr=gr_tit, nonworkdays=_non_work_days(), sco=ScoData(formsemestre=formsemestre), - sem=formsemestre.titre_num(), - timeEvening=ScoDocSiteConfig.get("assi_afternoon_time", "18:00:00"), - timeMorning=ScoDocSiteConfig.get("assi_morning_time", "08:00:00"), - timeNoon=ScoDocSiteConfig.get("assi_lunch_time", "13:00:00"), + forcer_module=sco_preferences.get_preference( + "forcer_module", + formsemestre_id=formsemestre_id, + dept_id=g.scodoc_dept_id, + ), )