From e00fc8dd091f0d77c4f2850ffe6ce2e9edf2d2dd Mon Sep 17 00:00:00 2001 From: iziram Date: Thu, 20 Apr 2023 18:04:21 +0200 Subject: [PATCH] =?UTF-8?q?Assiduit=C3=A9s=20:=20Page=20Liste=20Assiduites?= =?UTF-8?q?=20/=20Justifs=20(WIP)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/justificatifs.py | 7 +- app/scodoc/html_sidebar.py | 2 +- app/static/css/assiduites.css | 4 + app/static/js/assiduites.js | 55 +++- app/templates/assiduites/liste_assiduites.j2 | 330 +++++++++++++++++++ app/templates/sidebar.j2 | 2 +- app/views/assiduites.py | 42 +++ 7 files changed, 434 insertions(+), 8 deletions(-) create mode 100644 app/templates/assiduites/liste_assiduites.j2 diff --git a/app/api/justificatifs.py b/app/api/justificatifs.py index 7017ca1b4..6228bcf86 100644 --- a/app/api/justificatifs.py +++ b/app/api/justificatifs.py @@ -341,6 +341,7 @@ def justif_delete(): else: output["success"][f"{i}"] = {"OK": True} db.session.commit() + return jsonify(output) @@ -356,8 +357,12 @@ def _delete_singular(justif_id: int, database): if archive_name is not None: archiver: JustificatifArchiver = JustificatifArchiver() archiver.delete_justificatif(justificatif_unique.etudid, archive_name) - database.session.delete(justificatif_unique) + + compute_assiduites_justified( + Justificatif.query.filter_by(etudid=justificatif_unique.etudid), True + ) + return (200, "OK") diff --git a/app/scodoc/html_sidebar.py b/app/scodoc/html_sidebar.py index 5403b4d96..b0d4a2348 100755 --- a/app/scodoc/html_sidebar.py +++ b/app/scodoc/html_sidebar.py @@ -138,7 +138,7 @@ def sidebar(etudid: int = None): H.append( f"""
  • Calendrier
  • -
  • Liste
  • +
  • Liste
  • """ ) diff --git a/app/static/css/assiduites.css b/app/static/css/assiduites.css index be487a7e3..1301044f4 100644 --- a/app/static/css/assiduites.css +++ b/app/static/css/assiduites.css @@ -482,4 +482,8 @@ #page-assiduite-content>* { margin: 1.5% 0; +} + +.rouge { + color: crimson; } \ No newline at end of file diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js index bd004f427..94efe5f92 100644 --- a/app/static/js/assiduites.js +++ b/app/static/js/assiduites.js @@ -856,6 +856,23 @@ function actualizeEtudAssiduite(etudid, has_formsemestre = true) { }); } +function getAllAssiduitesFromEtud(etudid, action) { + const url_api = getUrl() + `/api/assiduites/${etudid}`; + + $.ajax({ + async: true, + type: "GET", + url: url_api, + success: (data, status) => { + if (status === "success") { + assiduites[etudid] = data; + action(data); + } + }, + error: () => {}, + }); +} + /** * Déclenchement d'une action après appuie sur un bouton d'assiduité * @param {HTMLInputElement} element Bouton d'assiduité appuyé @@ -1100,10 +1117,6 @@ function createMiniTimeline(assiduitesArray) { } //ajouter affichage assiduites on over setupAssiduiteBuble(block, assiduité); - - if (assiduité.est_just) { - block.classList.add("justified"); - } } const action = (justificatifs) => { @@ -1675,7 +1688,7 @@ window.onload = () => { splitAssiduiteModal(selectedAssiduite); } }); - editBtn.addEventListener("click", () => { + editBtn?.addEventListener("click", () => { if (selectedAssiduite) { editAssiduiteModal(selectedAssiduite); } @@ -1934,3 +1947,35 @@ function createJustificatif(justif) { } ); } + +function getAllJustificatifsFromEtud(etudid, action) { + const url_api = getUrl() + `/api/justificatifs/${etudid}`; + $.ajax({ + async: true, + type: "GET", + url: url_api, + success: (data, status) => { + if (status === "success") { + action(data); + } + }, + error: () => {}, + }); +} + +function deleteJustificatif(justif_id) { + const path = getUrl() + `/api/justificatif/delete`; + sync_post( + path, + [justif_id], + (data, status) => { + //success + if (data.success.length > 0) { + } + }, + (data, status) => { + //error + console.error(data, status); + } + ); +} diff --git a/app/templates/assiduites/liste_assiduites.j2 b/app/templates/assiduites/liste_assiduites.j2 new file mode 100644 index 000000000..0f60c91d4 --- /dev/null +++ b/app/templates/assiduites/liste_assiduites.j2 @@ -0,0 +1,330 @@ +{% include "assiduites/alert.j2" %} +{% include "assiduites/prompt.j2" %} +{% block app_content %} + +
    + +

    Liste de l'assiduité et des justificatifs de {{sco.etud.nomprenom}}

    + +

    Assiduités :

    + + + + + + + + + + + + +
    DébutFinÉtatModuleJustifiée
    +
    +
    +

    Justificatifs :

    + + + + + + + + + + + +
    DébutFinÉtatRaison
    +
    +
    + + +
    +{% endblock app_content %} + + + + \ No newline at end of file diff --git a/app/templates/sidebar.j2 b/app/templates/sidebar.j2 index d04138076..b579a1f03 100755 --- a/app/templates/sidebar.j2 +++ b/app/templates/sidebar.j2 @@ -73,7 +73,7 @@ {% endif %}
  • Calendrier
  • -
  • Liste
  • {% endif %} diff --git a/app/views/assiduites.py b/app/views/assiduites.py index 83bf22b57..d622ebb12 100644 --- a/app/views/assiduites.py +++ b/app/views/assiduites.py @@ -201,6 +201,48 @@ def signal_assiduites_etud(): ).build() +@bp.route("/ListeAssiduitesEtud") +@scodoc +@permission_required(Permission.ScoAbsChange) +def liste_assiduites_etud(): + """ + liste_assiduites_etud Affichage de toutes les assiduites et justificatifs d'un etudiant + Args: + etudid (int): l'identifiant de l'étudiant + + Returns: + str: l'html généré + """ + + etudid = request.args.get("etudid", -1) + etud: Identite = Identite.query.get_or_404(etudid) + if etud.dept_id != g.scodoc_dept_id: + abort(404, "étudiant inexistant dans ce département") + + header: str = html_sco_header.sco_header( + page_title="Liste des assiduités", + init_qtip=True, + javascripts=[ + "js/assiduites.js", + "libjs/moment.new.min.js", + "libjs/moment-timezone.js", + ], + cssstyles=CSSSTYLES + + [ + "css/assiduites.css", + ], + ) + + return HTMLBuilder( + header, + render_template( + "assiduites/liste_assiduites.j2", + sco=ScoData(etud), + date=datetime.date.today().isoformat(), + ), + ).build() + + @bp.route("/SignalAssiduiteGr") @scodoc @permission_required(Permission.ScoAbsChange)