diff --git a/app/pe/moys/pe_ressemtag.py b/app/pe/moys/pe_ressemtag.py index c0d473171..cff92b94e 100644 --- a/app/pe/moys/pe_ressemtag.py +++ b/app/pe/moys/pe_ressemtag.py @@ -155,7 +155,9 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag): # pe_affichage.pe_print(f" -> Traitement du tag {tag}") info_tag = tags_dict["personnalises"][tag] # Les moyennes générales par UEs - moy_ues_tag = self.compute_moy_ues_tag(info_tag=info_tag, pole=None) + moy_ues_tag = self.compute_moy_ues_tag( + self.ues_inscr_parcours_df, info_tag=info_tag, pole=None + ) # Mémorise les moyennes self.moyennes_tags[tag] = pe_moytag.MoyennesTag( tag, @@ -176,7 +178,7 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag): # Ajoute la moyenne générale par ressources if "moyennes_ue_res_sae" in options and options["moyennes_ue_res_sae"]: moy_res_gen = self.compute_moy_ues_tag( - info_tag=None, pole=ModuleType.RESSOURCE + self.ues_inscr_parcours_df, info_tag=None, pole=ModuleType.RESSOURCE ) self.moyennes_tags["ressources"] = pe_moytag.MoyennesTag( "ressources", @@ -187,7 +189,9 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag): # Ajoute la moyenne générale par saes if "moyennes_ue_res_sae" in options and options["moyennes_ue_res_sae"]: - moy_saes_gen = self.compute_moy_ues_tag(info_tag=None, pole=ModuleType.SAE) + moy_saes_gen = self.compute_moy_ues_tag( + self.ues_inscr_parcours_df, info_tag=None, pole=ModuleType.SAE + ) self.moyennes_tags["saes"] = pe_moytag.MoyennesTag( "saes", pe_moytag.CODE_MOY_UE, @@ -264,16 +268,21 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag): return capitalisations def compute_moy_ues_tag( - self, info_tag: dict[int, dict] = None, pole=None + self, + ues_inscr_parcours_df: pd.DataFrame, + info_tag: dict[int, dict] = None, + pole=None, ) -> pd.DataFrame: """Calcule la moyenne par UE des étudiants pour un tag donné, - en ayant connaissance des informations sur le tag. + en ayant connaissance des informations sur le tag et des inscriptions des étudiants aux différentes UEs. info_tag détermine les modules pris en compte : * si non `None`, seuls les modules rattachés au tag sont pris en compte * si `None`, tous les modules (quelque soit leur rattachement au tag) sont pris en compte (sert au calcul de la moyenne générale par ressource ou SAE) + ues_inscr_parcours_df détermine les UEs pour lesquels le calcul d'une moyenne à un sens. + `pole` détermine les modules pris en compte : * si `pole` vaut `ModuleType.RESSOURCE`, seules les ressources sont prises @@ -282,10 +291,11 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag): * si `pole` vaut `None` (ou toute autre valeur), tous les modules sont pris en compte (moyenne d'UEs) - Les informations sur le tag sont un dictionnaire listant les modimpl_id rattachés au tag, et pour chacun leur éventuel coefficient de **repondération**. + Args: + ues_inscr_parcours_df: L'inscription aux UEs Returns: Le dataframe des moyennes du tag par UE """ @@ -332,6 +342,9 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag): colonnes = [ue.id for ue in self.ues_standards] moyennes_ues_tag = moyennes_ues_tag[colonnes] + # Applique le masque d'inscription aux UE pour ne conserver que les UE dans lequel l'étudiant est inscrit + moyennes_ues_tag = moyennes_ues_tag[colonnes] * ues_inscr_parcours_df[colonnes] + # Transforme les UEs en acronyme acronymes = [self.ues_to_acronymes[ue.id] for ue in self.ues_standards] moyennes_ues_tag.columns = acronymes diff --git a/app/pe/moys/pe_tabletags.py b/app/pe/moys/pe_tabletags.py index d726a1493..6c5ecbe4d 100644 --- a/app/pe/moys/pe_tabletags.py +++ b/app/pe/moys/pe_tabletags.py @@ -106,9 +106,6 @@ class TableTag(object): Returns: Le dataframe complet de synthèse """ - if not self.is_significatif(): - return None - # Les tags visés tags_tries = self.get_all_significant_tags() if not tags_cibles: @@ -123,6 +120,9 @@ class TableTag(object): else: df = pd.DataFrame(index=self.etudids) + if not self.is_significatif(): + return df + # Ajout des données par tags for tag in tags_cibles: if tag in self.moyennes_tags: diff --git a/app/pe/pe_jury.py b/app/pe/pe_jury.py index 3881615b3..103c8919a 100644 --- a/app/pe/pe_jury.py +++ b/app/pe/pe_jury.py @@ -90,7 +90,18 @@ class JuryPE(object): diplome : l'année d'obtention du diplome BUT et du jury de PE (généralement février XXXX) """ - def __init__(self, diplome: int, formsemestre_id_base, options=None): + def __init__( + self, + diplome: int, + formsemestre_id_base, + options={ + "moyennes_tags": True, + "moyennes_ue_res_sae": True, + "moyennes_ues_rcues": True, + "min_max_moy": False, + "publipostage": False, + }, + ): pe_affichage.pe_start_log() self.diplome = diplome "L'année du diplome" @@ -151,7 +162,11 @@ class JuryPE(object): self._gen_xls_synthese_jury_par_tag(zipfile) self._gen_html_synthese_par_etudiant(zipfile) except Exception as e: - raise e + if pe_affichage.PE_DEBUG == True: + raise e + else: + pe_affichage.pe_print(str(e)) + # raise e # et le log self._add_log_to_zip(zipfile) @@ -222,14 +237,15 @@ class JuryPE(object): ) as writer: onglets = [] for res_sem_tag in self.ressembuttags.values(): - onglet = res_sem_tag.get_repr(verbose=True) - onglet = onglet.replace("Semestre ", "S") - onglets += ["📊" + onglet] - df = res_sem_tag.to_df() - # Conversion colonnes en multiindex - df = convert_colonnes_to_multiindex(df) - # écriture dans l'onglet - df.to_excel(writer, onglet, index=True, header=True) + if res_sem_tag.is_significatif(): + onglet = res_sem_tag.get_repr(verbose=True) + onglet = onglet.replace("Semestre ", "S") + onglets += ["📊" + onglet] + df = res_sem_tag.to_df(options=self.options) + # Conversion colonnes en multiindex + df = convert_colonnes_to_multiindex(df) + # écriture dans l'onglet + df.to_excel(writer, onglet, index=True, header=True) pe_affichage.pe_print( f"--> Export excel de {', '.join(onglets)}", info=True ) @@ -316,7 +332,7 @@ class JuryPE(object): if sxtag.is_significatif(): onglet = sxtag.get_repr(verbose=False) onglets += ["📊" + onglet] - df = sxtag.to_df() + df = sxtag.to_df(options=self.options) # Conversion colonnes en multiindex df = convert_colonnes_to_multiindex(df) @@ -416,7 +432,7 @@ class JuryPE(object): onglet = rcs_tag.get_repr(verbose=False) onglets += ["📊" + onglet] - df = rcs_tag.to_df() + df = rcs_tag.to_df(options=self.options) # Conversion colonnes en multiindex df = convert_colonnes_to_multiindex(df) onglets += ["📊" + onglet] @@ -508,7 +524,7 @@ class JuryPE(object): if interclass.is_significatif(): onglet = interclass.get_repr() onglets += ["📊" + onglet] - df = interclass.to_df(cohorte="Promo") + df = interclass.to_df(cohorte="Promo", options=self.options) # Conversion colonnes en multiindex df = convert_colonnes_to_multiindex(df) onglets += [onglet]