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]:
"""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):

View File

@ -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