diff --git a/app/but/jury_but.py b/app/but/jury_but.py index 6861c8ecd..83b1d9ddb 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 8a1a8dd0d..7686d7897 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 6580e089f..6fa14f9ea 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 db7de789a..27334aac5 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 ! -

+
+
diff --git a/app/views/notes.py b/app/views/notes.py index 3a5e3bbe7..cf5da2e36 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, )