From ba28d5f3c8ae023fad44c75dad4017ea42899875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9o=20BARAS=20=28IUT1=20Grenoble=29?= Date: Tue, 27 Feb 2024 18:16:25 +0100 Subject: [PATCH] Ajout de l'option "Afficher les colonnes min/max/moy" --- app/forms/pe/pe_sem_recap.py | 1 + app/pe/moys/pe_interclasstag.py | 5 ++--- app/pe/moys/pe_moy.py | 14 +++++++++++--- app/pe/moys/pe_moytag.py | 26 ++++++++++++++++++-------- app/pe/moys/pe_tabletags.py | 3 ++- app/pe/pe_jury.py | 3 ++- 6 files changed, 36 insertions(+), 16 deletions(-) diff --git a/app/forms/pe/pe_sem_recap.py b/app/forms/pe/pe_sem_recap.py index b85e6e9b..6dd25166 100644 --- a/app/forms/pe/pe_sem_recap.py +++ b/app/forms/pe/pe_sem_recap.py @@ -52,6 +52,7 @@ class ParametrageClasseurPE(FlaskForm): ) min_max_moy = BooleanField("Afficher les colonnes min/max/moy") + synthese_individuelle_etud = BooleanField( "Générer les synthèses HTML étudiant par étudiant" ) diff --git a/app/pe/moys/pe_interclasstag.py b/app/pe/moys/pe_interclasstag.py index 70624f96..382d88fe 100644 --- a/app/pe/moys/pe_interclasstag.py +++ b/app/pe/moys/pe_interclasstag.py @@ -280,7 +280,7 @@ class InterClassTag(pe_tabletags.TableTag): return None def compute_df_synthese_moyennes_tag( - self, tag, aggregat=None, type_colonnes=False + self, tag, aggregat=None, type_colonnes=False, options={"min_max_moy": True} ) -> pd.DataFrame: """Construit le dataframe retraçant pour les données des moyennes pour affichage dans la synthèse du jury PE. (cf. to_df()) @@ -322,8 +322,7 @@ class InterClassTag(pe_tabletags.TableTag): if tag in rcstag.moyennes_tags: moytag: pd.DataFrame = rcstag.moyennes_tags[tag] df_moytag = moytag.to_df( - aggregat=aggregat, - cohorte="Groupe", + aggregat=aggregat, cohorte="Groupe", options=options ) # Modif les colonnes au regard du 1er df_moytag significatif lu diff --git a/app/pe/moys/pe_moy.py b/app/pe/moys/pe_moy.py index 328c07b4..38883edf 100644 --- a/app/pe/moys/pe_moy.py +++ b/app/pe/moys/pe_moy.py @@ -18,7 +18,12 @@ class Moyenne: ] """Colonnes du df""" - COLONNES_SYNTHESE = ["note", "rang", "min", "max", "moy"] + @classmethod + def get_colonnes_synthese(cls, with_min_max_moy): + if with_min_max_moy: + return ["note", "rang", "min", "max", "moy"] + else: + return ["note", "rang"] def __init__(self, notes: pd.Series): """Classe centralisant la synthèse des moyennes/classements d'une série @@ -97,9 +102,12 @@ class Moyenne: return df - def get_df_synthese(self): + def get_df_synthese(self, with_min_max_moy=None): """Renvoie le df de synthese limité aux colonnes de synthese""" - df = self.df[self.COLONNES_SYNTHESE].copy() + colonnes_synthese = Moyenne.get_colonnes_synthese( + with_min_max_moy=with_min_max_moy + ) + df = self.df[colonnes_synthese].copy() df["rang"] = df["rang"].replace("nan", "") return df diff --git a/app/pe/moys/pe_moytag.py b/app/pe/moys/pe_moytag.py index 68b0022c..1d8bcc00 100644 --- a/app/pe/moys/pe_moytag.py +++ b/app/pe/moys/pe_moytag.py @@ -107,15 +107,18 @@ class MoyennesTag: return moy_gen_tag - def to_df(self, aggregat=None, cohorte=None) -> pd.DataFrame: + def to_df( + self, aggregat=None, cohorte=None, options={"min_max_moy": True} + ) -> pd.DataFrame: """Renvoie le df synthétisant l'ensemble des données connues Adapte les intitulés des colonnes aux données fournies (nom d'aggrégat, type de cohorte). - - `pole` détermine les modules à prendre en compte dans la moyenne (None=tous, - RESSOURCES ou SAES) """ + if "min_max_moy" not in options or options["min_max_moy"]: + with_min_max_moy = True + else: + with_min_max_moy = False etudids_sorted = sorted(self.etudids) @@ -124,20 +127,27 @@ class MoyennesTag: # Ajout des notes pour tous les champs champs = list(self.champs) for champ in champs: - df_champ = self.moyennes_gen[champ].get_df_synthese() # le dataframe + df_champ = self.moyennes_gen[champ].get_df_synthese( + with_min_max_moy=with_min_max_moy + ) # le dataframe # Renomme les colonnes + cols = [ get_colonne_df(aggregat, self.tag, champ, cohorte, critere) - for critere in pe_moy.Moyenne.COLONNES_SYNTHESE + for critere in pe_moy.Moyenne.get_colonnes_synthese( + with_min_max_moy=with_min_max_moy + ) ] df_champ.columns = cols df = df.join(df_champ) # Ajoute la moy générale - df_moy_gen = self.moyenne_gen.get_df_synthese() + df_moy_gen = self.moyenne_gen.get_df_synthese(with_min_max_moy=with_min_max_moy) cols = [ get_colonne_df(aggregat, self.tag, CHAMP_GENERAL, cohorte, critere) - for critere in pe_moy.Moyenne.COLONNES_SYNTHESE + for critere in pe_moy.Moyenne.get_colonnes_synthese( + with_min_max_moy=with_min_max_moy + ) ] df_moy_gen.columns = cols df = df.join(df_moy_gen) diff --git a/app/pe/moys/pe_tabletags.py b/app/pe/moys/pe_tabletags.py index 5da211c5..d726a149 100644 --- a/app/pe/moys/pe_tabletags.py +++ b/app/pe/moys/pe_tabletags.py @@ -89,6 +89,7 @@ class TableTag(object): aggregat=None, tags_cibles=None, cohorte=None, + options={"min_max_moy": True}, ) -> pd.DataFrame: """Renvoie un dataframe listant toutes les données des moyennes/classements/nb_inscrits/min/max/moy @@ -126,7 +127,7 @@ class TableTag(object): for tag in tags_cibles: if tag in self.moyennes_tags: moy_tag_df = self.moyennes_tags[tag].to_df( - aggregat=aggregat, cohorte=cohorte + aggregat=aggregat, cohorte=cohorte, options=options ) df = df.join(moy_tag_df) diff --git a/app/pe/pe_jury.py b/app/pe/pe_jury.py index 440af3f3..423f6ffa 100644 --- a/app/pe/pe_jury.py +++ b/app/pe/pe_jury.py @@ -682,7 +682,7 @@ class JuryPE(object): if interclass.is_significatif(): # Le dataframe du classement sur le groupe df_groupe = interclass.compute_df_synthese_moyennes_tag( - tag, aggregat=aggregat, type_colonnes=False + tag, aggregat=aggregat, type_colonnes=False, options=self.options ) if not df_groupe.empty: aff_aggregat += [aggregat] @@ -694,6 +694,7 @@ class JuryPE(object): aggregat=aggregat, tags_cibles=[tag], cohorte="Promo", + options=self.options, ) if not df_promo.empty: