diff --git a/app/but/jury_but.py b/app/but/jury_but.py
index 6861c8ecdf7022db2a985183d98776c03eb7c398..83b1d9ddb39c975fb3a2a628c07af880e60ab63f 100644
--- a/app/but/jury_but.py
+++ b/app/but/jury_but.py
@@ -902,6 +902,8 @@ class DecisionsProposeesAnnee(DecisionsProposees):
Efface même si étudiant DEM ou DEF.
Si à cheval ou only_one_sem, n'efface que les décisions UE et les
autorisations de passage du semestre d'origine du deca.
+
+ Dans tous les cas, efface les validations de l'année en cours.
(commite la session.)
"""
if only_one_sem or self.a_cheval:
@@ -916,8 +918,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
else:
for dec_ue in self.decisions_ues.values():
dec_ue.erase()
- for dec_rcue in self.decisions_rcue_by_niveau.values():
- dec_rcue.erase()
+
if self.formsemestre_impair:
ScolarAutorisationInscription.delete_autorisation_etud(
self.etud.id, self.formsemestre_impair.id
@@ -926,21 +927,27 @@ class DecisionsProposeesAnnee(DecisionsProposees):
ScolarAutorisationInscription.delete_autorisation_etud(
self.etud.id, self.formsemestre_pair.id
)
- validations = ApcValidationAnnee.query.filter_by(
+ # Efface les RCUEs
+ for dec_rcue in self.decisions_rcue_by_niveau.values():
+ dec_rcue.erase()
+
+ # Efface les validations concernant l'année BUT
+ # de ce semestre
+ validations = (
+ ApcValidationAnnee.query.filter_by(
etudid=self.etud.id,
- # XXX efface les validations émise depuis ce semestre
- # et pas toutes celles concernant cette l'année...
- # (utiliser formation_id pour changer cette politique)
- formsemestre_id=self.formsemestre.id,
ordre=self.annee_but,
)
- for validation in validations:
- db.session.delete(validation)
- Scolog.logdb(
- "jury_but",
- etudid=self.etud.id,
- msg=f"Validation année BUT{self.annee_but}: effacée",
- )
+ .join(Formation)
+ .filter_by(formation_code=self.formsemestre.formation.formation_code)
+ )
+ for validation in validations:
+ db.session.delete(validation)
+ Scolog.logdb(
+ "jury_but",
+ etudid=self.etud.id,
+ msg=f"Validation année BUT{self.annee_but}: effacée",
+ )
# Efface éventuelles validations de semestre
# (en principe inutilisées en BUT)
diff --git a/app/models/validations.py b/app/models/validations.py
index 8a1a8dd0d4f0693d95c9f5a6376ac3b0ff0e2e06..7686d78976a85f3d7b197f5a42ae396fb89b3019 100644
--- a/app/models/validations.py
+++ b/app/models/validations.py
@@ -79,17 +79,23 @@ class ScolarFormSemestreValidation(db.Model):
def html(self, detail=False) -> str:
"Affichage html"
if self.ue_id is not None:
- return f"""Validation de l'UE {self.ue.acronyme} de {self.ue.formation.acronyme}
+ return f"""Validation de l'UE <b>{self.ue.acronyme}</b>
+ {('parcours <span class="parcours">'
+ + ", ".join([p.code for p in self.ue.parcours]))
+ + "</span>"
+ if self.ue.parcours else ""}
+ de {self.ue.formation.acronyme}
{("émise par " + self.formsemestre.html_link_status())
if self.formsemestre else ""}
- :<b>{self.code}</b>
+ : <b>{self.code}</b>
le {self.event_date.strftime("%d/%m/%Y")} à {self.event_date.strftime("%Hh%M")}
"""
else:
return f"""Validation du semestre S{
self.formsemestre.semestre_id if self.formsemestre else "?"}
- (<b>{self.code}</b>
- le {self.event_date.strftime("%d/%m/%Y")} à {self.event_date.strftime("%Hh%M")})
+ {self.formsemestre.html_link_status() if self.formsemestre else ""}
+ : <b>{self.code}</b>
+ le {self.event_date.strftime("%d/%m/%Y")} à {self.event_date.strftime("%Hh%M")}
"""
diff --git a/app/static/css/jury_delete_manual.css b/app/static/css/jury_delete_manual.css
index 6580e089f38b1bad0ff634c120b4f443e4c58a01..6fa14f9ea009b0ea8e46fe11c13c091c4cdcfc3b 100644
--- a/app/static/css/jury_delete_manual.css
+++ b/app/static/css/jury_delete_manual.css
@@ -6,4 +6,8 @@ div.jury_decisions_list div {
div.jury_decisions_list form {
display: inline-block;
-}
\ No newline at end of file
+}
+
+span.parcours {
+ color:blueviolet;
+}
diff --git a/app/templates/but/formsemestre_validation_auto_but.j2 b/app/templates/but/formsemestre_validation_auto_but.j2
index db7de789ac2d7301518656b0da173a607dc49ad5..27334aac5466ac8b0f28320cd1998e6034e501d4 100644
--- a/app/templates/but/formsemestre_validation_auto_but.j2
+++ b/app/templates/but/formsemestre_validation_auto_but.j2
@@ -26,9 +26,13 @@
En conséquence, saisir ensuite <b>manuellement les décisions manquantes</b>,
notamment sur les UEs en dessous de 10.
</p>
-<p class="warning">
- Il est nécessaire de relire soigneusement les décisions à l'issue de cette procédure !
-</p>
+<div class="warning">
+ <ul>
+ <li>Ne jamais lancer ce calcul avant que toutes les notes ne soient saisies !
+ (verrouiller le semestre ensuite)
+ </li>
+ <li>Il est nécessaire de relire soigneusement les décisions à l'issue de cette procédure !</li>
+</div>
<div class="row">
diff --git a/app/views/notes.py b/app/views/notes.py
index 3a5e3bbe74a6bdb11fdab40c7c0e929ffbfe63b5..cf5da2e36bcd4f2113641af46401ae5865ab569f 100644
--- a/app/views/notes.py
+++ b/app/views/notes.py
@@ -2898,7 +2898,12 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None):
)
+ """
<p>Les décisions des années scolaires précédentes ne seront pas modifiées.</p>
- <div class="warning">Cette opération est irréversible !</div>
+ <p>Efface aussi toutes les validations concernant l'année BUT de ce semestre,
+ même si elles ont été acquises ailleurs.
+ </p>
+ <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,
)