diff --git a/app/scodoc/sco_assiduites.py b/app/scodoc/sco_assiduites.py index 3990cd82f..1ad5332d4 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 206cdc56e..2d0724463 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 20902c4a9..1456f6714 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( -
- +

${etud.nom}

${etud.prenom}
- -
+
@@ -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 ce8e9e0f1..3f8099342 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 d18021806..80e14a6d6 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 f3febd833..835cb3084 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 f1180c6ce..2dec4a2ce 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 3736d45f3..b11970541 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()