From 22d90215a0df5071e3eaf72bb4ae543ea167d957 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sun, 19 May 2024 15:38:30 +0200 Subject: [PATCH] =?UTF-8?q?Effacer=20d=C3=A9cisions=20de=20jury=20des=20fo?= =?UTF-8?q?rmations=20classiques:=20closes=20#884?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scodoc/sco_recapcomplet.py | 4 +- .../jury/erase_decisions_annee_formation.j2 | 2 +- app/views/notes.py | 55 ++++++++++++------- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/app/scodoc/sco_recapcomplet.py b/app/scodoc/sco_recapcomplet.py index d320f5a7e..f45d43da2 100644 --- a/app/scodoc/sco_recapcomplet.py +++ b/app/scodoc/sco_recapcomplet.py @@ -198,9 +198,9 @@ def formsemestre_recapcomplet( scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id) }">Calcul automatique des décisions du jury -
  • Effacer toutes les décisions de jury BUT issues de ce semestre + }">Effacer toutes les décisions de jury issues de ce semestre
  • """ ) diff --git a/app/templates/jury/erase_decisions_annee_formation.j2 b/app/templates/jury/erase_decisions_annee_formation.j2 index 4549688b5..0df182ffe 100644 --- a/app/templates/jury/erase_decisions_annee_formation.j2 +++ b/app/templates/jury/erase_decisions_annee_formation.j2 @@ -49,7 +49,7 @@ {% if formsemestre_origine is not none %}
  • diff --git a/app/views/notes.py b/app/views/notes.py index c6d512f0c..1add286a9 100644 --- a/app/views/notes.py +++ b/app/views/notes.py @@ -2893,20 +2893,21 @@ def formsemestre_saisie_jury(formsemestre_id: int, selected_etudid: int = None): @bp.route( - "/formsemestre_jury_but_erase/", + "/formsemestre_jury_erase/", methods=["GET", "POST"], defaults={"etudid": None}, ) @bp.route( - "/formsemestre_jury_but_erase//", + "/formsemestre_jury_erase//", methods=["GET", "POST"], ) @scodoc @permission_required(Permission.ScoView) -def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None): - """Supprime la décision de jury BUT pour cette année. +def formsemestre_jury_erase(formsemestre_id: int, etudid: int = None): + """Supprime la décision de jury (classique ou BUT) pour cette année. Si l'étudiant n'est pas spécifié, efface les décisions de tous les inscrits. - Si only_one_sem, n'efface que pour le formsemestre indiqué, pas les deux de l'année. + En BUT, si only_one_sem n'efface que pour le formsemestre indiqué, pas les deux de l'année. + En classique, n'affecte que les décisions issues de ce formsemestre. """ only_one_sem = int(request.args.get("only_one_sem") or False) formsemestre: FormSemestre = FormSemestre.query.filter_by( @@ -2920,8 +2921,7 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None): formsemestre_id=formsemestre_id, ) ) - if not formsemestre.formation.is_apc(): - raise ScoValueError("semestre non BUT") + is_apc = formsemestre.formation.is_apc() if etudid is None: etud = None etuds = formsemestre.get_inscrits(include_demdef=True) @@ -2934,8 +2934,13 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None): else: etud = Identite.get_etud(etudid) etuds = [etud] + endpoint = ( + "notes.formsemestre_validation_but" + if is_apc + else "notes.formsemestre_validation_etud_form" + ) dest_url = url_for( - "notes.formsemestre_validation_but", + endpoint, scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id, etudid=etudid, @@ -2943,13 +2948,18 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None): if request.method == "POST": with sco_cache.DeferredSemCacheManager(): for etud in etuds: - deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre) - deca.erase(only_one_sem=only_one_sem) - log(f"formsemestre_jury_but_erase({formsemestre_id}, {etudid})") + if is_apc: + deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre) + deca.erase(only_one_sem=only_one_sem) + else: + sco_formsemestre_validation.formsemestre_validation_suppress_etud( + formsemestre.id, etud.id + ) + log(f"formsemestre_jury_erase({formsemestre_id}, {etud.id})") flash( ( "décisions de jury du semestre effacées" - if only_one_sem + if (only_one_sem or is_apc) else "décisions de jury des semestres de l'année BUT effacées" ) + f" pour {len(etuds)} étudiant{'s' if len(etuds) > 1 else ''}" @@ -2964,22 +2974,29 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None): else ("des " + str(len(etuds)) + " étudiants inscrits dans ce semestre") } ?""", explanation=( - f"""Les validations d'UE et autorisations de passage + ( + f"""Les validations d'UE et autorisations de passage du semestre S{formsemestre.semestre_id} seront effacées.""" - if only_one_sem - else """Les validations de toutes les UE, RCUE (compétences) et année + if (only_one_sem or is_apc) + else """Les validations de toutes les UE, RCUE (compétences) et année issues de cette année scolaire seront effacées. """ - ) - + """ + ) + + """

    Les décisions des années scolaires précédentes ne seront pas modifiées.

    + """ + + """

    Efface aussi toutes les validations concernant l'année BUT de ce semestre, même si elles ont été acquises ailleurs. -

    +

    """ + if is_apc + else "" + + """
    Cette opération est irréversible ! A n'utiliser que dans des cas exceptionnels, vérifiez bien tous les étudiants ensuite.
    - """, + """ + ), cancel_url=dest_url, )