From ccc589f4d51f593d5baaa8f4f5b766669c3c878e Mon Sep 17 00:00:00 2001
From: Emmanuel Viennet
Date: Tue, 20 Jun 2023 21:01:40 +0200
Subject: [PATCH] =?UTF-8?q?Modifie=20effacement=20d=C3=A9cisions=20annuell?=
=?UTF-8?q?es=20BUT=20et=20RCUE.=20Am=C3=A9liore=20affichage=20d=C3=A9cisi?=
=?UTF-8?q?ons?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/but/jury_but.py | 35 +++++++++++--------
app/models/validations.py | 14 +++++---
app/static/css/jury_delete_manual.css | 6 +++-
.../but/formsemestre_validation_auto_but.j2 | 10 ++++--
app/views/notes.py | 7 +++-
5 files changed, 49 insertions(+), 23 deletions(-)
diff --git a/app/but/jury_but.py b/app/but/jury_but.py
index 6861c8ecdf..83b1d9ddb3 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 8a1a8dd0d4..7686d78976 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 {self.ue.acronyme}
+ {('parcours '
+ + ", ".join([p.code for p in self.ue.parcours]))
+ + ""
+ if self.ue.parcours else ""}
+ de {self.ue.formation.acronyme}
{("émise par " + self.formsemestre.html_link_status())
if self.formsemestre else ""}
- :{self.code}
+ : {self.code}
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 "?"}
- ({self.code}
- le {self.event_date.strftime("%d/%m/%Y")} à {self.event_date.strftime("%Hh%M")})
+ {self.formsemestre.html_link_status() if self.formsemestre else ""}
+ : {self.code}
+ 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 6580e089f3..6fa14f9ea0 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 db7de789ac..27334aac54 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 manuellement les décisions manquantes,
notamment sur les UEs en dessous de 10.
-
- Il est nécessaire de relire soigneusement les décisions à l'issue de cette procédure !
-
+
+
+ - Ne jamais lancer ce calcul avant que toutes les notes ne soient saisies !
+ (verrouiller le semestre ensuite)
+
+ - Il est nécessaire de relire soigneusement les décisions à l'issue de cette procédure !
+
diff --git a/app/views/notes.py b/app/views/notes.py
index 3a5e3bbe74..cf5da2e36b 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):
)
+ """
Les décisions des années scolaires précédentes ne seront pas modifiées.
-
Cette opération est irréversible !
+
Efface aussi toutes les validations concernant l'année BUT de ce semestre,
+ même si elles ont été acquises ailleurs.
+
+
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,
)