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) scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id)
}">Calcul automatique des décisions du jury</a> }">Calcul automatique des décisions du jury</a>
</li> </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) 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> </li>
""" """
) )

View File

@ -49,7 +49,7 @@
</li> </li>
{% if formsemestre_origine is not none %} {% if formsemestre_origine is not none %}
<li><a class="stdlink" href="{{ <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, scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_origine.id,
etudid=etud.id, only_one_sem=1) 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( @bp.route(
"/formsemestre_jury_but_erase/<int:formsemestre_id>", "/formsemestre_jury_erase/<int:formsemestre_id>",
methods=["GET", "POST"], methods=["GET", "POST"],
defaults={"etudid": None}, defaults={"etudid": None},
) )
@bp.route( @bp.route(
"/formsemestre_jury_but_erase/<int:formsemestre_id>/<int:etudid>", "/formsemestre_jury_erase/<int:formsemestre_id>/<int:etudid>",
methods=["GET", "POST"], methods=["GET", "POST"],
) )
@scodoc @scodoc
@permission_required(Permission.ScoView) @permission_required(Permission.ScoView)
def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None): def formsemestre_jury_erase(formsemestre_id: int, etudid: int = None):
"""Supprime la décision de jury BUT pour cette année. """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 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) only_one_sem = int(request.args.get("only_one_sem") or False)
formsemestre: FormSemestre = FormSemestre.query.filter_by( 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, formsemestre_id=formsemestre_id,
) )
) )
if not formsemestre.formation.is_apc(): is_apc = formsemestre.formation.is_apc()
raise ScoValueError("semestre non BUT")
if etudid is None: if etudid is None:
etud = None etud = None
etuds = formsemestre.get_inscrits(include_demdef=True) etuds = formsemestre.get_inscrits(include_demdef=True)
@ -2934,8 +2934,13 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None):
else: else:
etud = Identite.get_etud(etudid) etud = Identite.get_etud(etudid)
etuds = [etud] etuds = [etud]
endpoint = (
"notes.formsemestre_validation_but"
if is_apc
else "notes.formsemestre_validation_etud_form"
)
dest_url = url_for( dest_url = url_for(
"notes.formsemestre_validation_but", endpoint,
scodoc_dept=g.scodoc_dept, scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id, formsemestre_id=formsemestre_id,
etudid=etudid, etudid=etudid,
@ -2943,13 +2948,18 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None):
if request.method == "POST": if request.method == "POST":
with sco_cache.DeferredSemCacheManager(): with sco_cache.DeferredSemCacheManager():
for etud in etuds: for etud in etuds:
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre) if is_apc:
deca.erase(only_one_sem=only_one_sem) deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
log(f"formsemestre_jury_but_erase({formsemestre_id}, {etudid})") 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( flash(
( (
"décisions de jury du semestre effacées" "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" 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 ''}" + 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") else ("des " + str(len(etuds)) + " étudiants inscrits dans ce semestre")
} ?""", } ?""",
explanation=( 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.""" du semestre S{formsemestre.semestre_id} seront effacées."""
if only_one_sem if (only_one_sem or is_apc)
else """Les validations de toutes les UE, RCUE (compétences) et année else """Les validations de toutes les UE, RCUE (compétences) et année
issues de cette année scolaire seront effacées. 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>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, <p>Efface aussi toutes les validations concernant l'année BUT de ce semestre,
même si elles ont été acquises ailleurs. même si elles ont été acquises ailleurs.
</p> </p>"""
if is_apc
else ""
+ """
<div class="warning">Cette opération est irréversible ! <div class="warning">Cette opération est irréversible !
A n'utiliser que dans des cas exceptionnels, vérifiez bien tous les étudiants ensuite. A n'utiliser que dans des cas exceptionnels, vérifiez bien tous les étudiants ensuite.
</div> </div>
""", """
),
cancel_url=dest_url, cancel_url=dest_url,
) )