diff --git a/app/but/jury_but.py b/app/but/jury_but.py index 90978a23..821f564b 100644 --- a/app/but/jury_but.py +++ b/app/but/jury_but.py @@ -779,6 +779,16 @@ class DecisionsProposeesAnnee(DecisionsProposees): if self.formsemestre_pair is not None: sco_cache.invalidate_formsemestre(formsemestre_id=self.formsemestre_pair.id) + def has_notes_en_attente(self) -> bool: + "Vrai si l'étudiant a au moins une note en attente dans le semestre origine de ce deca" + res = ( + self.res_pair + if self.formsemestre_pair + and (self.formsemestre.id == self.formsemestre_pair.id) + else self.res_impair + ) + return res and self.etud.id in res.get_etudids_attente() + def record_all( self, no_overwrite: bool = True, only_validantes: bool = False ) -> bool: @@ -787,11 +797,16 @@ class DecisionsProposeesAnnee(DecisionsProposees): - Si "à cheval", ne modifie pas les codes UE de l'année scolaire précédente. - Pour les RCUE: n'enregistre que si la nouvelle décision est plus favorable que l'ancienne. - Si only_validantes, n'enregistre que des décisions "validantes" de droit: ADM ou CMP. + Si only_validantes, n'enregistre que des décisions "validantes" de droit: ADM ou CMP, + et seulement si l'étudiant n'a pas de notes en ATTente. Return: True si au moins un code modifié et enregistré. """ modif = False + # Vérification notes en attente dans formsemestre origine + if only_validantes and self.has_notes_en_attente(): + return False + # Toujours valider dans l'ordre UE, RCUE, Année annee_scolaire = self.formsemestre.annee_scolaire() # UEs diff --git a/app/comp/res_common.py b/app/comp/res_common.py index 392e2a87..d6fdc7d6 100644 --- a/app/comp/res_common.py +++ b/app/comp/res_common.py @@ -172,6 +172,12 @@ class ResultatsSemestre(ResultatsCache): if m.module.module_type == scu.ModuleType.SAE ] + def get_etudids_attente(self) -> set[int]: + """L'ensemble des etudids ayant au moins une note en ATTente""" + return set().union( + *[mr.etudids_attente for mr in self.modimpls_results.values()] + ) + # --- JURY... def load_validations(self) -> ValidationsSemestre: """Load validations, set attribute and return value""" diff --git a/app/templates/but/formsemestre_validation_auto_but.j2 b/app/templates/but/formsemestre_validation_auto_but.j2 index 56a1eae5..db7de789 100644 --- a/app/templates/but/formsemestre_validation_auto_but.j2 +++ b/app/templates/but/formsemestre_validation_auto_but.j2 @@ -17,6 +17,8 @@