diff --git a/app/scodoc/sco_assiduites.py b/app/scodoc/sco_assiduites.py
index 3990cd82fd..1ad5332d40 100644
--- a/app/scodoc/sco_assiduites.py
+++ b/app/scodoc/sco_assiduites.py
@@ -311,7 +311,7 @@ def filter_by_date(
)
-def filter_justificatifs_by_etat(justificatifs: Justificatif, etat: str) -> Query:
+def filter_justificatifs_by_etat(justificatifs: Query, etat: str) -> Query:
"""
Filtrage d'une collection de justificatifs en fonction de leur état
"""
diff --git a/app/static/css/assiduites.css b/app/static/css/assiduites.css
index 206cdc56e7..2d07244633 100644
--- a/app/static/css/assiduites.css
+++ b/app/static/css/assiduites.css
@@ -136,6 +136,8 @@
flex-direction: column;
align-items: flex-start;
margin: 0 5%;
+
+ cursor: pointer;
}
.etud_row.def .nom::after,
diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js
index 20902c4a95..1456f67142 100644
--- a/app/static/js/assiduites.js
+++ b/app/static/js/assiduites.js
@@ -1065,9 +1065,17 @@ function actualizeEtudAssiduite(etudid) {
});
}
-function getAllAssiduitesFromEtud(etudid, action, order = false) {
+function getAllAssiduitesFromEtud(
+ etudid,
+ action,
+ order = false,
+ justifs = false
+) {
const url_api =
- getUrl() + `/api/assiduites/${etudid}${order ? "/query?order" : ""}`;
+ getUrl() +
+ `/api/assiduites/${etudid}${
+ order ? "/query?order%".replace("%", justifs ? "&with_justifs" : "") : ""
+ }`;
$.ajax({
async: true,
@@ -1241,12 +1249,10 @@ function generateEtudRow(
-
+
@@ -1567,8 +1573,10 @@ function fastJustify(assiduite) {
createJustificatif(justif);
- // justifyAssiduite(assiduite.assiduite_id, true);
generateAllEtudRow();
+ try {
+ loadAll();
+ } catch {}
};
const content = document.createElement("fieldset");
diff --git a/app/templates/assiduites/pages/calendrier.j2 b/app/templates/assiduites/pages/calendrier.j2
index ce8e9e0f1f..3f8099342e 100644
--- a/app/templates/assiduites/pages/calendrier.j2
+++ b/app/templates/assiduites/pages/calendrier.j2
@@ -354,5 +354,7 @@
setterAnnee(defAnnee)
};
+
+ function isCalendrier() { return true }
{% endblock pageContent %}
\ No newline at end of file
diff --git a/app/templates/assiduites/pages/liste_assiduites.j2 b/app/templates/assiduites/pages/liste_assiduites.j2
index d18021806a..80e14a6d67 100644
--- a/app/templates/assiduites/pages/liste_assiduites.j2
+++ b/app/templates/assiduites/pages/liste_assiduites.j2
@@ -48,8 +48,40 @@
\ No newline at end of file
diff --git a/app/templates/assiduites/widgets/minitimeline.j2 b/app/templates/assiduites/widgets/minitimeline.j2
index f3febd833b..835cb30842 100644
--- a/app/templates/assiduites/widgets/minitimeline.j2
+++ b/app/templates/assiduites/widgets/minitimeline.j2
@@ -71,6 +71,11 @@
updateSelectedSelect(getCurrentAssiduiteModuleImplId());
updateJustifyBtn();
}
+ try {
+ if (isCalendrier()) {
+ window.location = `ListeAssiduitesEtud?etudid=${etudid}&assiduite_id=${assiduité.assiduite_id}`
+ }
+ } catch { }
});
//ajouter affichage assiduites on over
setupAssiduiteBuble(block, assiduité);
diff --git a/app/templates/assiduites/widgets/tableau_base.j2 b/app/templates/assiduites/widgets/tableau_base.j2
index f1180c6cee..2dec4a2cea 100644
--- a/app/templates/assiduites/widgets/tableau_base.j2
+++ b/app/templates/assiduites/widgets/tableau_base.j2
@@ -18,6 +18,9 @@
document.addEventListener("click", () => {
contextMenu.style.display = "none";
+ if (contextMenu.childElementCount > 3) {
+ contextMenu.removeChild(contextMenu.lastElementChild)
+ }
});
editOption.addEventListener("click", () => {
@@ -94,6 +97,11 @@
}
}
+ if (k == "obj_id") {
+ const obj_id = el.assiduite_id || el.justif_id;
+ return f.obj_id.includes(obj_id)
+ }
+
return true;
})
@@ -234,8 +242,8 @@
}
function loadAll() {
- try { getAllAssiduitesFromEtud(etudid, assiduiteCallBack, true) } catch (_) { }
- try { getAllJustificatifsFromEtud(etudid, justificatifCallBack, true) } catch (_) { }
+ try { getAllAssiduitesFromEtud(etudid, assiduiteCallBack, true, true) } catch (_) { }
+ try { getAllJustificatifsFromEtud(etudid, justificatifCallBack, true, true) } catch (_) { }
}
function order(keyword, callback = () => { }, el, assi = true) {
@@ -645,6 +653,27 @@
contextMenu.style.top = `${e.clientY - contextMenu.offsetHeight}px`;
contextMenu.style.left = `${e.clientX}px`;
contextMenu.style.display = "block";
+ if (contextMenu.childElementCount > 3) {
+ contextMenu.removeChild(contextMenu.lastElementChild)
+ }
+ if (selectedRow.getAttribute('type') == "assiduite") {
+
+ const li = document.createElement('li')
+ li.textContent = "Justifier"
+
+ li.addEventListener('click', () => {
+ let obj_id = selectedRow.getAttribute('obj_id');
+ assiduite = Object.values(assiduites).flat().filter((a) => { return a.assiduite_id == obj_id })
+ console.log(assiduite[0])
+ if (assiduite && !assiduite[0].est_just && assiduite[0].etat != "PRESENT") {
+ fastJustify(assiduite[0])
+ } else {
+ openAlertModal("Erreur", document.createTextNode("L'assiduité est déjà justifiée ou ne peut pas l'être."))
+ }
+ })
+
+ contextMenu.appendChild(li)
+ }
}
diff --git a/app/views/assiduites.py b/app/views/assiduites.py
index 3736d45f3f..b119705415 100644
--- a/app/views/assiduites.py
+++ b/app/views/assiduites.py
@@ -299,6 +299,8 @@ def liste_assiduites_etud():
if etud.dept_id != g.scodoc_dept_id:
abort(404, "étudiant inexistant dans ce département")
+ assiduite_id: int = request.args.get("assiduite_id", -1)
+
header: str = html_sco_header.sco_header(
page_title="Liste des assiduités",
init_qtip=True,
@@ -319,6 +321,7 @@ def liste_assiduites_etud():
"assiduites/pages/liste_assiduites.j2",
sco=ScoData(etud),
date=datetime.date.today().isoformat(),
+ assi_id=assiduite_id,
),
).build()