diff --git a/app/models/assiduites.py b/app/models/assiduites.py index f645f5c5a..241e44aa6 100644 --- a/app/models/assiduites.py +++ b/app/models/assiduites.py @@ -353,12 +353,12 @@ class Assiduite(ScoDocModel): elif self.external_data is not None and "module" in self.external_data: return ( - "Tout module" + "Autre module (pas dans la liste)" if self.external_data["module"] == "Autre" else self.external_data["module"] ) - return "Non spécifié" if traduire else None + return "Module non spécifié" if traduire else None def get_saisie(self) -> str: """ diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js index c9fd3fb9d..e22764b5e 100644 --- a/app/static/js/assiduites.js +++ b/app/static/js/assiduites.js @@ -401,7 +401,7 @@ async function creerTousLesEtudiants(etuds) { * @returns {String} */ async function getModuleImpl(assiduite) { - if (assiduite == null) return "Pas de module"; + if (assiduite == null) return "Module non spécifié"; const id = assiduite.moduleimpl_id; if (id == null || id == undefined) { @@ -414,7 +414,7 @@ async function getModuleImpl(assiduite) { ? "Autre module (pas dans la liste)" : assiduite.external_data.module; } else { - return "Pas de module"; + return "Module non spécifié"; } } @@ -890,6 +890,11 @@ function setupAssiduiteBubble(el, assiduite) { actionsDiv.appendChild(infos); bubble.appendChild(actionsDiv); + const stateDiv = document.createElement("div"); + stateDiv.className = "assiduite-state"; + stateDiv.textContent = `État: ${assiduite.etat.capitalize()}`; + bubble.appendChild(stateDiv); + const idDiv = document.createElement("div"); idDiv.className = "assiduite-id"; getModuleImpl(assiduite).then((modImpl) => { @@ -897,26 +902,32 @@ function setupAssiduiteBubble(el, assiduite) { }); 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); + // Affichage des dates + // si les jours sont les mêmes, on affiche "jour hh:mm - hh:mm" + // sinon on affiche "jour hh:mm - jour hh:mm" + const periodDiv = document.createElement("div"); + periodDiv.className = "assiduite-period"; + const dateDeb = new Date(Date.removeUTC(assiduite.date_debut)); + const dateFin = new Date(Date.removeUTC(assiduite.date_fin)); + if (dateDeb.isSame(dateFin, "day")) { + const jour = dateDeb.format("DD/MM/YYYY"); + const deb = dateDeb.format("HH:mm"); + const fin = dateFin.format("HH:mm"); + periodDiv.textContent = `${jour} de ${deb} à ${fin}`; + } else { + const jourDeb = dateDeb.format("DD/MM/YYYY"); + const jourFin = dateFin.format("DD/MM/YYYY"); + periodDiv.textContent = `du ${jourDeb} au ${jourFin}`; + } - const stateDiv = document.createElement("div"); - stateDiv.className = "assiduite-state"; - stateDiv.textContent = `État: ${assiduite.etat.capitalize()}`; - bubble.appendChild(stateDiv); + bubble.appendChild(periodDiv); const motifDiv = document.createElement("div"); - stateDiv.className = "assiduite-why"; + motifDiv.className = "assiduite-why"; const motif = ["", null, undefined].includes(assiduite.desc) - ? "Pas de motif" + ? "Non spécifié" : assiduite.desc.capitalize(); - stateDiv.textContent = `Motif: ${motif}`; + motifDiv.textContent = `Motif: ${motif}`; bubble.appendChild(motifDiv); const userIdDiv = document.createElement("div"); diff --git a/app/templates/assiduites/widgets/assiduite_bubble.j2 b/app/templates/assiduites/widgets/assiduite_bubble.j2 index 23004a866..546bd9a6a 100644 --- a/app/templates/assiduites/widgets/assiduite_bubble.j2 +++ b/app/templates/assiduites/widgets/assiduite_bubble.j2 @@ -1,8 +1,7 @@
-
{{moduleimpl}}
-
{{date_debut}}
-
{{date_fin}}
État: {{etat}}
+
{{moduleimpl}}
+
{{date}}
Motif: {{motif}}
{{saisie}}
\ No newline at end of file diff --git a/app/views/assiduites.py b/app/views/assiduites.py index b9020dec4..f5ffe223f 100644 --- a/app/views/assiduites.py +++ b/app/views/assiduites.py @@ -2581,14 +2581,26 @@ def _generate_assiduite_bubble(assiduite: Assiduite) -> str: # Récupérer informations saisie saisie: str = assiduite.get_saisie() - motif: str = assiduite.description if assiduite.description else "" + motif: str = assiduite.description or "Non spécifié" + + # Récupérer date + + if assiduite.date_debut.date() == assiduite.date_fin.date(): + jour = assiduite.date_debut.strftime("%d/%m/%Y") + heure_deb: str = assiduite.date_debut.strftime("%H:%M") + heure_fin: str = assiduite.date_fin.strftime("%H:%M") + date: str = f"{jour} de {heure_deb} à {heure_fin}" + else: + date: str = ( + f"du {assiduite.date_debut.strftime('%d/%m/%Y')} " + + f"au {assiduite.date_fin.strftime('%d/%m/%Y')}" + ) return render_template( "assiduites/widgets/assiduite_bubble.j2", moduleimpl=moduleimpl_infos, etat=scu.EtatAssiduite(assiduite.etat).name.lower(), - date_debut=assiduite.date_debut.strftime("%d/%m/%Y %H:%M"), - date_fin=assiduite.date_fin.strftime("%d/%m/%Y %H:%M"), + date=date, saisie=saisie, motif=motif, )