Fix: Bulletin BUT: calcul des UE de chaque etud

This commit is contained in:
Emmanuel Viennet 2022-06-25 23:22:20 +02:00
parent 29c2fb25e8
commit 060b7ad7cd
4 changed files with 17 additions and 11 deletions

View File

@ -244,7 +244,7 @@ class BulletinBUT:
f"{fmt_note(bonus_vect[ue.id])} sur {ue.acronyme}" f"{fmt_note(bonus_vect[ue.id])} sur {ue.acronyme}"
for ue in res.ues for ue in res.ues
if ue.type != UE_SPORT if ue.type != UE_SPORT
and res.modimpls_in_ue(ue.id, etudid) and res.modimpls_in_ue(ue, etudid)
and ue.id in res.bonus_ues and ue.id in res.bonus_ues
and bonus_vect[ue.id] > 0.0 and bonus_vect[ue.id] > 0.0
] ]
@ -275,9 +275,7 @@ class BulletinBUT:
nb_inscrits = self.res.get_inscriptions_counts()[scu.INSCRIT] nb_inscrits = self.res.get_inscriptions_counts()[scu.INSCRIT]
published = (not formsemestre.bul_hide_xml) or force_publishing published = (not formsemestre.bul_hide_xml) or force_publishing
if formsemestre.formation.referentiel_competence is None: if formsemestre.formation.referentiel_competence is None:
etud_ues_ids = { etud_ues_ids = {ue.id for ue in res.ues if res.modimpls_in_ue(ue, etud.id)}
ue.id for ue in res.ues if res.modimpls_in_ue(ue.id, etud.id)
}
else: else:
etud_ues_ids = res.etud_ues_ids(etud.id) etud_ues_ids = res.etud_ues_ids(etud.id)

View File

@ -157,16 +157,24 @@ class ResultatsSemestreBUT(NotesTableCompat):
""" """
return self.modimpl_coefs_df.loc[ue.id].sum() return self.modimpl_coefs_df.loc[ue.id].sum()
def modimpls_in_ue(self, ue_id, etudid, with_bonus=True) -> list[ModuleImpl]: def modimpls_in_ue(self, ue: UniteEns, etudid, with_bonus=True) -> list[ModuleImpl]:
"""Liste des modimpl ayant des coefs non nuls vers cette UE """Liste des modimpl ayant des coefs non nuls vers cette UE
et auxquels l'étudiant est inscrit. Inclus modules bonus le cas échéant. et auxquels l'étudiant est inscrit. Inclus modules bonus le cas échéant.
""" """
# sert pour l'affichage ou non de l'UE sur le bulletin et la table recap # sert pour l'affichage ou non de l'UE sur le bulletin et la table recap
coefs = self.modimpl_coefs_df # row UE, cols modimpl if ue.type == UE_SPORT:
return [
modimpl
for modimpl in self.formsemestre.modimpls_sorted
if modimpl.module.ue.id == ue.id
and self.modimpl_inscr_df[modimpl.id][etudid]
]
coefs = self.modimpl_coefs_df # row UE (sans bonus), cols modimpl
modimpls = [ modimpls = [
modimpl modimpl
for modimpl in self.formsemestre.modimpls_sorted for modimpl in self.formsemestre.modimpls_sorted
if (coefs[modimpl.id][ue_id] != 0) if modimpl.module.ue.type != UE_SPORT
and (coefs[modimpl.id][ue.id] != 0)
and self.modimpl_inscr_df[modimpl.id][etudid] and self.modimpl_inscr_df[modimpl.id][etudid]
] ]
if not with_bonus: if not with_bonus:

View File

@ -187,7 +187,7 @@ class ResultatsSemestre(ResultatsCache):
ues = sorted(list(ues), key=lambda x: x.numero or 0) ues = sorted(list(ues), key=lambda x: x.numero or 0)
return ues return ues
def modimpls_in_ue(self, ue_id, etudid, with_bonus=True) -> list[ModuleImpl]: def modimpls_in_ue(self, ue: UniteEns, etudid, with_bonus=True) -> list[ModuleImpl]:
"""Liste des modimpl de cette UE auxquels l'étudiant est inscrit. """Liste des modimpl de cette UE auxquels l'étudiant est inscrit.
Utile en formations classiques, surchargée pour le BUT. Utile en formations classiques, surchargée pour le BUT.
Inclus modules bonus le cas échéant. Inclus modules bonus le cas échéant.
@ -197,7 +197,7 @@ class ResultatsSemestre(ResultatsCache):
modimpls = [ modimpls = [
modimpl modimpl
for modimpl in self.formsemestre.modimpls_sorted for modimpl in self.formsemestre.modimpls_sorted
if modimpl.module.ue.id == ue_id if modimpl.module.ue.id == ue.id
and self.modimpl_inscr_df[modimpl.id][etudid] and self.modimpl_inscr_df[modimpl.id][etudid]
] ]
if not with_bonus: if not with_bonus:
@ -572,7 +572,7 @@ class ResultatsSemestre(ResultatsCache):
# Les moyennes des modules (ou ressources et SAÉs) dans cette UE # Les moyennes des modules (ou ressources et SAÉs) dans cette UE
idx_malus = idx # place pour colonne malus à gauche des modules idx_malus = idx # place pour colonne malus à gauche des modules
idx += 1 idx += 1
for modimpl in self.modimpls_in_ue(ue.id, etudid, with_bonus=False): for modimpl in self.modimpls_in_ue(ue, etudid, with_bonus=False):
if ue_status["is_capitalized"]: if ue_status["is_capitalized"]:
val = "-c-" val = "-c-"
else: else:

View File

@ -283,7 +283,7 @@ class ApcNiveau(db.Model, XMLModel):
raise ValueError("annee invalide pour un parcours BUT") raise ValueError("annee invalide pour un parcours BUT")
if referentiel_competence is None: if referentiel_competence is None:
raise ScoValueError( raise ScoValueError(
"pas de référentiel de compétences associé à la formation !" "Pas de référentiel de compétences associé à la formation !"
) )
annee_formation = f"BUT{annee}" annee_formation = f"BUT{annee}"
if parcour is None: if parcour is None: