Suppression de toutes les décisions de jury d'un semestre

This commit is contained in:
Emmanuel Viennet 2023-01-30 15:30:25 -03:00 committed by iziram
parent f6d442beb4
commit e9f23d8b3e
4 changed files with 58 additions and 24 deletions

View File

@ -841,6 +841,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
et autorisations d'inscription émises.
Efface même si étudiant DEM ou DEF.
Si à cheval, n'efface que pour le semestre d'origine du deca.
(commite la session.)
"""
if only_one_sem or self.a_cheval:
# N'efface que les autorisations venant de ce semestre,

View File

@ -166,9 +166,15 @@ def formsemestre_recapcomplet(
H.append("<p>")
if mode_jury:
H.append(
f"""<a class="stdlink" href="{url_for('notes.formsemestre_validation_auto',
f"""<p><a class="stdlink" href="{url_for('notes.formsemestre_validation_auto',
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id)
}">Calcul automatique des décisions du jury</a></p>"""
}">Calcul automatique des décisions du jury</a>
</p><a class="stdlink" href="{url_for('notes.formsemestre_jury_but_erase',
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id, only_one_sem=1)
}">Effacer <em>toutes</em> les décisions de jury du semestre</a>
<p>
</p>
"""
)
else:
H.append(

View File

@ -7,7 +7,7 @@
<h2>{{ title }}</h2>
<div style="margin-top: 16px;">
{{ explanation }}
{{ explanation|safe }}
</div>
<div style="margin-top: 16px;">
<form method="post">

View File

@ -2817,6 +2817,11 @@ def formsemestre_jury_but_recap(formsemestre_id: int, selected_etudid: int = Non
)
@bp.route(
"/formsemestre_jury_but_erase/<int:formsemestre_id>",
methods=["GET", "POST"],
defaults={"etudid": None},
)
@bp.route(
"/formsemestre_jury_but_erase/<int:formsemestre_id>/<int:etudid>",
methods=["GET", "POST"],
@ -2828,42 +2833,64 @@ def formsemestre_jury_but_erase(
):
"""Supprime la décision de jury BUT pour cette année.
Si only_one_sem, n'efface que pour le formsemestre indiqué, pas les deux de l'année.
Si l'étudiant n'est pas spécifié, efface les décisions de tous les inscrits.
"""
only_one_sem = int(request.args.get("only_one_sem") or False)
if not sco_permissions_check.can_validate_sem(formsemestre_id):
raise ScoValueError("opération non autorisée")
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
if not formsemestre.formation.is_apc():
raise ScoValueError("semestre non BUT")
etud: Identite = Identite.query.get_or_404(etudid)
if not sco_permissions_check.can_validate_sem(formsemestre_id):
raise ScoValueError("opération non autorisée")
dest_url = url_for(
"notes.formsemestre_validation_but",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
etudid=etudid,
)
if etudid is None:
etud = None
etuds = formsemestre.get_inscrits(include_demdef=True)
dest_url = url_for(
"notes.formsemestre_saisie_jury",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
)
else:
etud: Identite = Identite.query.get_or_404(etudid)
etuds = [etud]
dest_url = url_for(
"notes.formsemestre_validation_but",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
etudid=etudid,
)
if request.method == "POST":
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
deca.erase(only_one_sem=only_one_sem)
db.session.commit()
log(f"formsemestre_jury_but_erase({formsemestre_id}, {etudid})")
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})")
flash(
"décisions de jury du semestre effacées"
if only_one_sem
else "décisions de jury des semestres de l'année BUT effacées"
(
"décisions de jury du semestre effacées"
if only_one_sem
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 ''}"
)
return redirect(dest_url)
return render_template(
"confirm_dialog.html",
title=f"Effacer les validations de jury de {etud.nomprenom} ?",
explanation=f"""Les validations d'UE et autorisations de passage
title=f"""Effacer les validations de jury {
("de" + etud.nomprenom)
if etud
else ("des " + str(len(etuds)) + " étudiants inscrits dans ce semestre")
} ?""",
explanation=(
f"""Les validations d'UE et autorisations de passage
du semestre S{formsemestre.semestre_id} seront effacées."""
if only_one_sem
else """Ses validations de toutes les UE, RCUE (compétences) et année
if only_one_sem
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.
""",
"""
)
+ """<div class="warning">Cette opération est irréversible !</div>""",
cancel_url=dest_url,
)