Fix #672: mise à jour parcours

This commit is contained in:
Emmanuel Viennet 2023-07-31 18:46:41 +02:00
parent 4dd6530ff8
commit deff37b9b7
4 changed files with 73 additions and 32 deletions

View File

@ -230,7 +230,9 @@ def group_remove_etud(group_id: int, etudid: int):
commit=True, commit=True,
) )
# Update parcours # Update parcours
group.partition.formsemestre.update_inscriptions_parcours_from_groups() group.partition.formsemestre.update_inscriptions_parcours_from_groups(
etudid=etudid
)
sco_cache.invalidate_formsemestre(group.partition.formsemestre_id) sco_cache.invalidate_formsemestre(group.partition.formsemestre_id)
return {"group_id": group_id, "etudid": etudid} return {"group_id": group_id, "etudid": etudid}
@ -277,7 +279,7 @@ def partition_remove_etud(partition_id: int, etudid: int):
) )
db.session.commit() db.session.commit()
# Update parcours # Update parcours
partition.formsemestre.update_inscriptions_parcours_from_groups() partition.formsemestre.update_inscriptions_parcours_from_groups(etudid=etudid)
app.set_sco_dept(partition.formsemestre.departement.acronym) app.set_sco_dept(partition.formsemestre.departement.acronym)
sco_cache.invalidate_formsemestre(partition.formsemestre_id) sco_cache.invalidate_formsemestre(partition.formsemestre_id)
return {"partition_id": partition_id, "etudid": etudid} return {"partition_id": partition_id, "etudid": etudid}

View File

@ -818,11 +818,15 @@ class FormSemestre(db.Model):
db.session.commit() db.session.commit()
def update_inscriptions_parcours_from_groups(self) -> None: def update_inscriptions_parcours_from_groups(self, etudid: int = None) -> None:
"""Met à jour les inscriptions dans les parcours du semestres en """Met à jour les inscriptions dans les parcours du semestres en
fonction des groupes de parcours. fonction des groupes de parcours.
Les groupes de parcours sont ceux de la partition scu.PARTITION_PARCOURS Les groupes de parcours sont ceux de la partition scu.PARTITION_PARCOURS
et leur nom est le code du parcours (eg "Cyber"). et leur nom est le code du parcours (eg "Cyber").
Si etudid est sépcifié, n'affecte que cet étudiant,
sinon traite tous les inscrits du semestre.
""" """
if self.formation.referentiel_competence_id is None: if self.formation.referentiel_competence_id is None:
return # safety net return # safety net
@ -833,6 +837,21 @@ class FormSemestre(db.Model):
return return
# Efface les inscriptions aux parcours: # Efface les inscriptions aux parcours:
if etudid:
db.session.execute(
text(
"""UPDATE notes_formsemestre_inscription
SET parcour_id=NULL
WHERE formsemestre_id=:formsemestre_id
AND etudid=:etudid
"""
),
{
"formsemestre_id": self.id,
"etudid": etudid,
},
)
else:
db.session.execute( db.session.execute(
text( text(
"""UPDATE notes_formsemestre_inscription """UPDATE notes_formsemestre_inscription
@ -861,6 +880,26 @@ class FormSemestre(db.Model):
) )
continue continue
parcour = query.first() parcour = query.first()
if etudid:
db.session.execute(
text(
"""UPDATE notes_formsemestre_inscription ins
SET parcour_id=:parcour_id
FROM group_membership gm
WHERE formsemestre_id=:formsemestre_id
AND ins.etudid = :etudid
AND gm.etudid = :etudid
AND gm.group_id = :group_id
"""
),
{
"etudid": etudid,
"formsemestre_id": self.id,
"parcour_id": parcour.id,
"group_id": group.id,
},
)
else:
db.session.execute( db.session.execute(
text( text(
"""UPDATE notes_formsemestre_inscription ins """UPDATE notes_formsemestre_inscription ins

View File

@ -314,7 +314,7 @@ def do_formsemestre_inscription_with_modules(
formsemestre_id=formsemestre_id, formsemestre_id=formsemestre_id,
) )
# Mise à jour des inscriptions aux parcours: # Mise à jour des inscriptions aux parcours:
formsemestre.update_inscriptions_parcours_from_groups() formsemestre.update_inscriptions_parcours_from_groups(etudid=etudid)
def formsemestre_inscription_with_modules_etud( def formsemestre_inscription_with_modules_etud(

View File

@ -684,7 +684,7 @@ def change_etud_group_in_partition(etudid: int, group: GroupDescr) -> bool:
# - Update parcours # - Update parcours
if group.partition.partition_name == scu.PARTITION_PARCOURS: if group.partition.partition_name == scu.PARTITION_PARCOURS:
formsemestre.update_inscriptions_parcours_from_groups() formsemestre.update_inscriptions_parcours_from_groups(etudid=etudid)
# - invalidate cache # - invalidate cache
sco_cache.invalidate_formsemestre( sco_cache.invalidate_formsemestre(