diff --git a/app/but/jury_but.py b/app/but/jury_but.py index 3c1e1b189945982fbe39204fa34bbab915dbd004..9d416568bbec3fd1e8cbf19a89b4965b2da3613f 100644 --- a/app/but/jury_but.py +++ b/app/but/jury_but.py @@ -634,7 +634,7 @@ class DecisionsProposeesAnnee(DecisionsProposees): def next_semestre_ids(self, code: str) -> set[int]: """Les indices des semestres dans lequels l'étudiant est autorisé à poursuivre après le semestre courant. - code: code jury sur année BUT + code: code jury sur année BUT (inutilisé sur semestres impairs) """ # La poursuite d'études dans un semestre pair d'une même année # est de droit pour tout étudiant. @@ -722,7 +722,7 @@ class DecisionsProposeesAnnee(DecisionsProposees): db.session.commit() def record(self, code: str, mark_recorded: bool = True) -> bool: - """Enregistre le code de l'année, et au besoin l'autorisation d'inscription. + """Enregistre le code de l'année, mais pas l'autorisation d'inscription. Si l'étudiant est DEM ou DEF, ne fait rien. Si le code est None, efface le code déjà enregistré. Si mark_recorded est vrai, positionne self.recorded @@ -773,16 +773,17 @@ class DecisionsProposeesAnnee(DecisionsProposees): self.invalidate_formsemestre_cache() return True - def record_autorisation_inscription(self, code: str): + def record_autorisation_inscription(self, code: str) -> bool: """Autorisation d'inscription dans semestre suivant. code: code jury sur année BUT + Return vrai si modif. """ if self.autorisations_recorded: - return + return False if self.inscription_etat != scu.INSCRIT: # les dem et DEF ne continuent jamais - return - ScolarAutorisationInscription.delete_autorisation_etud( + return False # ? devrait effacer existant ? + modif = ScolarAutorisationInscription.delete_autorisation_etud( etudid=self.etud.id, origin_formsemestre_id=self.formsemestre.id, ) @@ -793,7 +794,8 @@ class DecisionsProposeesAnnee(DecisionsProposees): self.formsemestre.id, next_semestre_id, ) - self.autorisations_recorded = True + modif = self.autorisations_recorded = True + return modif def invalidate_formsemestre_cache(self): "invalide le résultats des deux formsemestres" @@ -893,7 +895,10 @@ class DecisionsProposeesAnnee(DecisionsProposees): not only_validantes ) or code in sco_codes.CODES_ANNEE_BUT_VALIDES_DE_DROIT: modif |= self.record(code) - self.record_autorisation_inscription(code) + modif |= self.record_autorisation_inscription(code) + elif self.formsemestre.semestre_id % 2: # semestre impair: passage de droit + modif |= self.record_autorisation_inscription(code) + return modif def erase(self, only_one_sem=False): diff --git a/app/models/validations.py b/app/models/validations.py index fee681ee2cbefa733e86b59cf88b163e9aaf9f20..25417b4258f9e0cf842e306f7f7ab49a62c1cc9f 100644 --- a/app/models/validations.py +++ b/app/models/validations.py @@ -229,13 +229,17 @@ class ScolarAutorisationInscription(models.ScoDocModel): cls, etudid: int, origin_formsemestre_id: int, - ): - """Efface les autorisations de cet étudiant venant du sem. origine""" + ) -> bool: + """Efface les autorisations de cet étudiant venant du sem. origine. + Vrai si modification. + """ autorisations = cls.query.filter_by( etudid=etudid, origin_formsemestre_id=origin_formsemestre_id ) + modif = False for autorisation in autorisations: db.session.delete(autorisation) + modif = True log(f"ScolarAutorisationInscription: deleting {autorisation}") Scolog.logdb( "autorise_etud", @@ -243,3 +247,4 @@ class ScolarAutorisationInscription(models.ScoDocModel): msg=f"Passage vers S{autorisation.semestre_id}: effacé", ) db.session.flush() + return modif