Skip to content
Snippets Groups Projects
Commit d83ad1aa authored by Emmanuel Viennet's avatar Emmanuel Viennet
Browse files

Calcul auto jury BUT: enregistre autorisations

passage après semestre impair.
parent 431b0aa6
No related branches found
No related tags found
No related merge requests found
...@@ -634,7 +634,7 @@ class DecisionsProposeesAnnee(DecisionsProposees): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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):
......
...@@ -229,13 +229,17 @@ class ScolarAutorisationInscription(models.ScoDocModel): ...@@ -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): ...@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment