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,
)