Calcul auto jury BUT: enregistre autorisations

passage après semestre impair.
This commit is contained in:
Emmanuel Viennet 2025-02-06 11:26:07 +01:00
parent 431b0aa651
commit d83ad1aa21
2 changed files with 20 additions and 10 deletions

View File

@ -634,7 +634,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
def next_semestre_ids(self, code: str) -> set[int]: def next_semestre_ids(self, code: str) -> set[int]:
"""Les indices des semestres dans lequels l'étudiant est autorisé """Les indices des semestres dans lequels l'étudiant est autorisé
à poursuivre après le semestre courant. à 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 # La poursuite d'études dans un semestre pair d'une même année
# est de droit pour tout étudiant. # est de droit pour tout étudiant.
@ -722,7 +722,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
db.session.commit() db.session.commit()
def record(self, code: str, mark_recorded: bool = True) -> bool: 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 l'étudiant est DEM ou DEF, ne fait rien.
Si le code est None, efface le code déjà enregistré. Si le code est None, efface le code déjà enregistré.
Si mark_recorded est vrai, positionne self.recorded Si mark_recorded est vrai, positionne self.recorded
@ -773,16 +773,17 @@ class DecisionsProposeesAnnee(DecisionsProposees):
self.invalidate_formsemestre_cache() self.invalidate_formsemestre_cache()
return True return True
def record_autorisation_inscription(self, code: str): def record_autorisation_inscription(self, code: str) -> bool:
"""Autorisation d'inscription dans semestre suivant. """Autorisation d'inscription dans semestre suivant.
code: code jury sur année BUT code: code jury sur année BUT
Return vrai si modif.
""" """
if self.autorisations_recorded: if self.autorisations_recorded:
return return False
if self.inscription_etat != scu.INSCRIT: if self.inscription_etat != scu.INSCRIT:
# les dem et DEF ne continuent jamais # les dem et DEF ne continuent jamais
return return False # ? devrait effacer existant ?
ScolarAutorisationInscription.delete_autorisation_etud( modif = ScolarAutorisationInscription.delete_autorisation_etud(
etudid=self.etud.id, etudid=self.etud.id,
origin_formsemestre_id=self.formsemestre.id, origin_formsemestre_id=self.formsemestre.id,
) )
@ -793,7 +794,8 @@ class DecisionsProposeesAnnee(DecisionsProposees):
self.formsemestre.id, self.formsemestre.id,
next_semestre_id, next_semestre_id,
) )
self.autorisations_recorded = True modif = self.autorisations_recorded = True
return modif
def invalidate_formsemestre_cache(self): def invalidate_formsemestre_cache(self):
"invalide le résultats des deux formsemestres" "invalide le résultats des deux formsemestres"
@ -893,7 +895,10 @@ class DecisionsProposeesAnnee(DecisionsProposees):
not only_validantes not only_validantes
) or code in sco_codes.CODES_ANNEE_BUT_VALIDES_DE_DROIT: ) or code in sco_codes.CODES_ANNEE_BUT_VALIDES_DE_DROIT:
modif |= self.record(code) 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 return modif
def erase(self, only_one_sem=False): def erase(self, only_one_sem=False):

View File

@ -229,13 +229,17 @@ class ScolarAutorisationInscription(models.ScoDocModel):
cls, cls,
etudid: int, etudid: int,
origin_formsemestre_id: int, origin_formsemestre_id: int,
): ) -> bool:
"""Efface les autorisations de cet étudiant venant du sem. origine""" """Efface les autorisations de cet étudiant venant du sem. origine.
Vrai si modification.
"""
autorisations = cls.query.filter_by( autorisations = cls.query.filter_by(
etudid=etudid, origin_formsemestre_id=origin_formsemestre_id etudid=etudid, origin_formsemestre_id=origin_formsemestre_id
) )
modif = False
for autorisation in autorisations: for autorisation in autorisations:
db.session.delete(autorisation) db.session.delete(autorisation)
modif = True
log(f"ScolarAutorisationInscription: deleting {autorisation}") log(f"ScolarAutorisationInscription: deleting {autorisation}")
Scolog.logdb( Scolog.logdb(
"autorise_etud", "autorise_etud",
@ -243,3 +247,4 @@ class ScolarAutorisationInscription(models.ScoDocModel):
msg=f"Passage vers S{autorisation.semestre_id}: effacé", msg=f"Passage vers S{autorisation.semestre_id}: effacé",
) )
db.session.flush() db.session.flush()
return modif