diff --git a/app/models/assiduites.py b/app/models/assiduites.py
index f645f5c5acbb58e13365cd4b079aae1d0c7d5755..241e44aa636f1c34c6ed8d754477f02fa454d489 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 c9fd3fb9dc9f90f0f482e833ff6d28b4b36548a5..e22764b5eb34923efcb585d55a7914d53d8d20dd 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 23004a866489623b3bbb516e3a6b507c1065672a..546bd9a6abcb5d5b55c82dba40585f109b69bff5 100644
--- a/app/templates/assiduites/widgets/assiduite_bubble.j2
+++ b/app/templates/assiduites/widgets/assiduite_bubble.j2
@@ -1,8 +1,7 @@
<div class="assiduite-bubble {{etat}}">
- <div class="assiduite-id">{{moduleimpl}}</div>
- <div class="assiduite-period">{{date_debut}}</div>
- <div class="assiduite-period">{{date_fin}}</div>
<div class="assiduite-state">État: {{etat}}</div>
+ <div class="assiduite-id">{{moduleimpl}}</div>
+ <div class="assiduite-period">{{date}}</div>
<div class="assiduite-why">Motif: {{motif}}</div>
<div class="assiduite-user_id">{{saisie}}</div>
</div>
\ No newline at end of file
diff --git a/app/views/assiduites.py b/app/views/assiduites.py
index b9020dec470cd8fcd9079dd9fa66eaa0d87505a9..f5ffe223fd5b33c9a8462ff4576a334117dc8e8b 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,
)