Effacer décisions de jury des formations classiques: closes #884

This commit is contained in:
Emmanuel Viennet 2024-05-19 15:38:30 +02:00
parent 043985bff6
commit 22d90215a0
3 changed files with 39 additions and 22 deletions

View File

@ -198,9 +198,9 @@ def formsemestre_recapcomplet(
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id)
}">Calcul automatique des décisions du jury</a>
</li>
<li><a class="stdlink" href="{url_for('notes.formsemestre_jury_but_erase',
<li><a class="stdlink" href="{url_for('notes.formsemestre_jury_erase',
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id, only_one_sem=1)
}">Effacer <em>toutes</em> les décisions de jury BUT issues de ce semestre</a>
}">Effacer <em>toutes</em> les décisions de jury issues de ce semestre</a>
</li>
"""
)

View File

@ -49,7 +49,7 @@
</li>
{% if formsemestre_origine is not none %}
<li><a class="stdlink" href="{{
url_for('notes.formsemestre_jury_but_erase',
url_for('notes.formsemestre_jury_erase',
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_origine.id,
etudid=etud.id, only_one_sem=1)
}}">

View File

@ -2893,20 +2893,21 @@ def formsemestre_saisie_jury(formsemestre_id: int, selected_etudid: int = None):
@bp.route(
"/formsemestre_jury_but_erase/<int:formsemestre_id>",
"/formsemestre_jury_erase/<int:formsemestre_id>",
methods=["GET", "POST"],
defaults={"etudid": None},
)
@bp.route(
"/formsemestre_jury_but_erase/<int:formsemestre_id>/<int:etudid>",
"/formsemestre_jury_erase/<int:formsemestre_id>/<int:etudid>",
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.
"""
)
+ """
)
+ """
<p>Les décisions des années scolaires précédentes ne seront pas modifiées.</p>
"""
+ """
<p>Efface aussi toutes les validations concernant l'année BUT de ce semestre,
même si elles ont été acquises ailleurs.
</p>
</p>"""
if is_apc
else ""
+ """
<div class="warning">Cette opération est irréversible !
A n'utiliser que dans des cas exceptionnels, vérifiez bien tous les étudiants ensuite.
</div>
""",
"""
),
cancel_url=dest_url,
)