Fix: enregistrement autorisations d'inscriptions auto sur sem. BUT impairs

This commit is contained in:
Emmanuel Viennet 2023-02-19 13:28:59 +01:00
parent 9e52566781
commit f74713ac09
4 changed files with 27 additions and 18 deletions

View File

@ -649,12 +649,14 @@ class DecisionsProposeesAnnee(DecisionsProposees):
"""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.
""" """
ids = set()
# La poursuite d'études dans un semestre pair dune même année # La poursuite d'études dans un semestre pair dune même année
# est de droit pour tout étudiant: # est de droit pour tout étudiant.
if (self.formsemestre.semestre_id % 2) and sco_codes.CursusBUT.NB_SEM: # Pas de redoublements directs de S_impair vers S_impair
ids.add(self.formsemestre.semestre_id + 1) # (pourront être traités manuellement)
if (
self.formsemestre.semestre_id % 2
) and self.formsemestre.semestre_id < sco_codes.CursusBUT.NB_SEM:
return {self.formsemestre.semestre_id + 1}
# La poursuite détudes dans un semestre impair est possible si # La poursuite détudes dans un semestre impair est possible si
# et seulement si létudiant a obtenu : # et seulement si létudiant a obtenu :
# - la moyenne à plus de la moitié des regroupements cohérents dUE ; # - la moyenne à plus de la moitié des regroupements cohérents dUE ;
@ -664,10 +666,11 @@ class DecisionsProposeesAnnee(DecisionsProposees):
# ScoDoc ne contraint donc pas à la respecter strictement. # ScoDoc ne contraint donc pas à la respecter strictement.
# Si le code est dans BUT_CODES_PASSAGE (ADM, ADJ, PASD, PAS1NCI, ATJ), # Si le code est dans BUT_CODES_PASSAGE (ADM, ADJ, PASD, PAS1NCI, ATJ),
# autorise à passer dans le semestre suivant # autorise à passer dans le semestre suivant
ids = set()
if ( if (
self.jury_annuel self.jury_annuel
and code in sco_codes.BUT_CODES_PASSAGE and code in sco_codes.BUT_CODES_PASSAGE
and self.formsemestre_pair.semestre_id < sco_codes.CursusBUT.NB_SEM and self.formsemestre.semestre_id < sco_codes.CursusBUT.NB_SEM
): ):
ids.add(self.formsemestre.semestre_id + 1) ids.add(self.formsemestre.semestre_id + 1)
@ -723,6 +726,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
for dec_rcue, code in codes_rcues: for dec_rcue, code in codes_rcues:
dec_rcue.record(code) dec_rcue.record(code)
self.record(code_annee) self.record(code_annee)
self.record_autorisation_inscription(code_annee)
self.record_all() self.record_all()
db.session.commit() db.session.commit()
@ -755,15 +759,21 @@ class DecisionsProposeesAnnee(DecisionsProposees):
code=code, code=code,
) )
db.session.add(self.validation) db.session.add(self.validation)
db.session.commit()
log(f"Recording {self}: {code}") log(f"Recording {self}: {code}")
Scolog.logdb( Scolog.logdb(
method="jury_but", method="jury_but",
etudid=self.etud.id, etudid=self.etud.id,
msg=f"Validation année BUT{self.annee_but}: {code}", msg=f"Validation année BUT{self.annee_but}: {code}",
) )
self.recorded = True
self.invalidate_formsemestre_cache()
return True
# --- Autorisation d'inscription dans semestre suivant ? def record_autorisation_inscription(self, code: str):
"""Autorisation d'inscription dans semestre suivant"""
if self.inscription_etat != scu.INSCRIT:
# les dem et DEF ne continuent jamais
return
ScolarAutorisationInscription.delete_autorisation_etud( ScolarAutorisationInscription.delete_autorisation_etud(
etudid=self.etud.id, etudid=self.etud.id,
origin_formsemestre_id=self.formsemestre.id, origin_formsemestre_id=self.formsemestre.id,
@ -776,11 +786,6 @@ class DecisionsProposeesAnnee(DecisionsProposees):
next_semestre_id, next_semestre_id,
) )
db.session.commit()
self.recorded = True
self.invalidate_formsemestre_cache()
return True
def invalidate_formsemestre_cache(self): def invalidate_formsemestre_cache(self):
"invalide le résultats des deux formsemestres" "invalide le résultats des deux formsemestres"
if self.formsemestre_impair is not None: if self.formsemestre_impair is not None:
@ -859,7 +864,7 @@ 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, no_overwrite=no_overwrite) modif |= self.record(code, no_overwrite=no_overwrite)
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

@ -328,6 +328,9 @@ def jury_but_semestriel(
if not formsemestre.semestre_id + 1 in ( if not formsemestre.semestre_id + 1 in (
a.semestre_id for a in autorisations_passage a.semestre_id for a in autorisations_passage
): ):
ScolarAutorisationInscription.delete_autorisation_etud(
etud.id, formsemestre.id
)
ScolarAutorisationInscription.autorise_etud( ScolarAutorisationInscription.autorise_etud(
etud.id, etud.id,
formsemestre.formation.formation_code, formsemestre.formation.formation_code,

View File

@ -112,8 +112,7 @@ class ScolarAutorisationInscription(db.Model):
origin_formsemestre_id: int, origin_formsemestre_id: int,
semestre_id: int, semestre_id: int,
): ):
"""Enregistre une autorisation, remplace celle émanant du même semestre si elle existe.""" """Ajoute une autorisation"""
cls.delete_autorisation_etud(etudid, origin_formsemestre_id)
autorisation = cls( autorisation = cls(
etudid=etudid, etudid=etudid,
formation_code=formation_code, formation_code=formation_code,

View File

@ -29,7 +29,7 @@ from app.models import (
UniteEns, UniteEns,
) )
from app.scodoc import sco_utils as scu from app.scodoc import sco_utils as scu
from app.scodoc import sco_pvjury from app.scodoc import sco_dict_pv_jury
def setup_formation_referentiel(formation: Formation, refcomp_infos: dict): def setup_formation_referentiel(formation: Formation, refcomp_infos: dict):
@ -241,6 +241,8 @@ def but_compare_decisions_annee(deca: DecisionsProposeesAnnee, deca_att: dict):
if code_manuel is not None: if code_manuel is not None:
assert code_manuel in deca.codes assert code_manuel in deca.codes
deca.record(code_manuel) deca.record(code_manuel)
deca.record_autorisation_inscription(code_manuel)
db.session.commit()
assert deca.recorded assert deca.recorded
@ -306,7 +308,7 @@ def but_test_jury(formsemestre: FormSemestre, doc: dict):
but_compare_decisions_annee(deca, deca_att) but_compare_decisions_annee(deca, deca_att)
if "autorisations_inscription" in doc_formsemestre["attendu"]: if "autorisations_inscription" in doc_formsemestre["attendu"]:
if dpv is None: # lazy load if dpv is None: # lazy load
dpv = sco_pvjury.dict_pvjury(formsemestre.id) dpv = sco_dict_pv_jury.dict_pvjury(formsemestre.id)
check_autorisations_inscription( check_autorisations_inscription(
etud, dpv, doc_formsemestre["attendu"]["autorisations_inscription"] etud, dpv, doc_formsemestre["attendu"]["autorisations_inscription"]
) )