Export Excel : Améliore les entêtes des colonnes + supprime l'affichage des classements des étudiants sans note

This commit is contained in:
Cléo Baras 2024-02-02 06:11:21 +01:00
parent 387af40b65
commit 66fbb0afbc
4 changed files with 82 additions and 82 deletions

View File

@ -12,6 +12,8 @@ if not PE_DEBUG:
else:
pe_print = print # print function
# Affichage dans le tableur pe en cas d'absence de notes
SANS_NOTE = "-"
def nom_semestre_etape(semestre: FormSemestre, avec_fid=False) -> str:
"""Nom d'un semestre à afficher dans le descriptif des étapes de la scolarité

View File

@ -75,81 +75,55 @@ TODO:: A améliorer si BUT en moins de 6 semestres
PARCOURS = {
"S1": {
"aggregat": ["S1"],
"ordre": 1,
"affichage_court": "S1",
"affichage_long": "Semestre 1",
"descr": "Semestre 1 (S1)",
},
"S2": {
"aggregat": ["S2"],
"ordre": 2,
"affichage_court": "S2",
"affichage_long": "Semestre 2",
"descr": "Semestre 2 (S2)",
},
"1A": {
"aggregat": ["S1", "S2"],
"ordre": 3,
"affichage_court": "1A",
"affichage_long": "1ère année",
"descr": "BUT1 (S1+S2)",
},
"S3": {
"aggregat": ["S3"],
"ordre": 4,
"affichage_court": "S3",
"affichage_long": "Semestre 3",
"descr": "Semestre 3 (S3)",
},
"S4": {
"aggregat": ["S4"],
"ordre": 5,
"affichage_court": "S4",
"affichage_long": "Semestre 4",
"descr": "Semestre 4 (S4)",
},
"2A": {
"aggregat": ["S3", "S4"],
"ordre": 6,
"affichage_court": "2A",
"affichage_long": "2ème année",
"descr": "BUT2 (S3+S4)",
},
"3S": {
"aggregat": ["S1", "S2", "S3"],
"ordre": 7,
"affichage_court": "S1+S2+S3",
"affichage_long": "BUT du semestre 1 au semestre 3",
"descr": "Moyenne du semestre 1 au semestre 3 (S1+S2+S3)",
},
"4S": {
"aggregat": ["S1", "S2", "S3", "S4"],
"ordre": 8,
"affichage_court": "BUT",
"affichage_long": "BUT du semestre 1 au semestre 4",
"descr": "Moyenne du semestre 1 au semestre 4 (S1+S2+S3+S4)",
},
"S5": {
"aggregat": ["S5"],
"ordre": 9,
"affichage_court": "S5",
"affichage_long": "Semestre 5",
"descr": "Semestre 5 (S5)",
},
"S6": {
"aggregat": ["S6"],
"ordre": 10,
"affichage_court": "S6",
"affichage_long": "Semestre 6",
"descr": "Semestre 6 (S6)",
},
"3A": {
"aggregat": ["S5", "S6"],
"ordre": 11,
"affichage_court": "3A",
"affichage_long": "3ème année",
"descr": "3ème année (S5+S6)",
},
"5S": {
"aggregat": ["S1", "S2", "S3", "S4", "S5"],
"ordre": 12,
"affichage_court": "S1+S2+S3+S4+S5",
"affichage_long": "BUT du semestre 1 au semestre 5",
"descr": "Moyenne du semestre 1 au semestre 5 (S1+S2+S3+S4+S5)",
},
"6S": {
"aggregat": ["S1", "S2", "S3", "S4", "S5", "S6"],
"ordre": 13,
"affichage_court": "BUT",
"affichage_long": "BUT (tout semestre inclus)",
"descr": "Moyenne globale BUT (S1+S2+S3+S4+S5+S6)",
},
}
NBRE_SEMESTRES_DIPLOMANT = 6

View File

@ -46,6 +46,9 @@ import io
import os
from zipfile import ZipFile
import numpy as np
from app.pe.pe_tabletags import TableTag
from app.scodoc.gen_tables import SeqGenTable
from app.pe.pe_etudiant import EtudiantsJuryPE
from app.pe.pe_trajectoire import TrajectoiresJuryPE, Trajectoire
@ -332,13 +335,18 @@ class JuryPE(object):
# La trajectoire de l'étudiant sur l'aggrégat
trajectoire = self.trajectoires.suivi[etudid][aggregat]
# La note de l'étudiant (chargement à venir)
note = np.nan
# L'affichage de l'aggrégat dans le tableur excel
descr = pe_comp.PARCOURS[aggregat]["descr"]
# Les moyennes par tag de cette trajectoire
donnees[etudid] |= {
(aggregat, "", "notes"): "-",
(aggregat, "groupe", "class."): "-",
(aggregat, "groupe", "min"): "-",
(aggregat, "groupe", "moy"): "-",
(aggregat, "groupe", "max"): "-",
(descr, "", "note"): pe_affichage.SANS_NOTE,
(descr, "statistique du groupe", "class."): pe_affichage.SANS_NOTE,
(descr, "statistique du groupe", "min"): pe_affichage.SANS_NOTE,
(descr, "statistique du groupe", "moy"): pe_affichage.SANS_NOTE,
(descr, "statistique du groupe", "max"): pe_affichage.SANS_NOTE,
}
if trajectoire:
trajectoire_tagguee = self.trajectoires_tagguees[
@ -346,50 +354,34 @@ class JuryPE(object):
]
if tag in trajectoire_tagguee.moyennes_tags:
bilan = trajectoire_tagguee.moyennes_tags[tag]
donnees[etudid] |= {
(aggregat, "", "notes"): round(
bilan["notes"].loc[etudid], 2
),
(
aggregat,
"groupe",
"class",
): f"{bilan['classements'].loc[etudid]}/{bilan['nb_inscrits']}",
(aggregat, "groupe", "min"): round(
bilan["min"], 2
),
(aggregat, "groupe", "moy"): round(
bilan["moy"], 2
),
(aggregat, "groupe", "max"): round(
bilan["max"], 2
)
}
note = TableTag.get_note_for_df(bilan, etudid)
if note != np.nan:
donnees[etudid] |= {
(descr, "", "note"): note,
(descr, "statistique du groupe", "class."): TableTag.get_class_for_df(bilan, etudid),
(descr, "statistique du groupe", "min"): TableTag.get_min_for_df(bilan),
(descr, "statistique du groupe", "moy"): TableTag.get_moy_for_df(bilan),
(descr, "statistique du groupe", "max"): TableTag.get_max_for_df(bilan)
}
"""L'interclassement"""
interclass = self.interclassements_taggues[aggregat]
donnees[etudid] |= {
(aggregat, f"promotion {self.diplome}", "class."): "-",
(aggregat, f"promotion {self.diplome}", "min"): "-",
(aggregat, f"promotion {self.diplome}", "moy"): "-",
(aggregat, f"promotion {self.diplome}", "max"): "-",
(descr, f"statistique de la promotion {self.diplome}", "class."): pe_affichage.SANS_NOTE,
(descr, f"statistique de la promotion {self.diplome}", "min"): pe_affichage.SANS_NOTE,
(descr, f"statistique de la promotion {self.diplome}", "moy"): pe_affichage.SANS_NOTE,
(descr, f"statistique de la promotion {self.diplome}", "max"): pe_affichage.SANS_NOTE,
}
if tag in interclass.moyennes_tags:
bilan = interclass.moyennes_tags[tag]
donnees[etudid] |= {
(aggregat, f"promotion {self.diplome}", "class."): f"{bilan['classements'].loc[etudid]}/{bilan['nb_inscrits']}",
(aggregat, f"promotion {self.diplome}", "min"): round(
bilan["min"], 2
),
(aggregat, f"promotion {self.diplome}", "moy"): round(
bilan["moy"], 2
),
(aggregat, f"promotion {self.diplome}", "max"): round(
bilan["max"], 2
)
}
if note != np.nan:
donnees[etudid] |= {
(descr, f"statistique de la promotion {self.diplome}", "class."): TableTag.get_class_for_df(bilan, etudid),
(descr, f"statistique de la promotion {self.diplome}", "min"): TableTag.get_min_for_df(bilan),
(descr, f"statistique de la promotion {self.diplome}", "moy"): TableTag.get_moy_for_df(bilan),
(descr, f"statistique de la promotion {self.diplome}", "max"): TableTag.get_max_for_df(bilan)
}
# Fin de l'aggrégat
# Construction du dataFrame
@ -492,3 +484,4 @@ def compute_interclassements(
)
aggregats_interclasses_taggues[nom_aggregat] = interclass
return aggregats_interclasses_taggues

View File

@ -48,8 +48,6 @@ TAGS_RESERVES = ["but"]
class TableTag(object):
def __init__(self):
"""Classe centralisant différentes méthodes communes aux
SemestreTag, TrajectoireTag, AggregatInterclassTag
@ -105,3 +103,36 @@ class TableTag(object):
df = df.join(self.moyennes_tags[tag]["classements"].rename(f"class {tag}"))
return df.to_csv(sep=";")
@classmethod
def get_min_for_df(cls, bilan: dict) -> float:
"""Partant d'un dictionnaire `bilan` généralement une moyennes_tags pour un tag donné,
revoie le min renseigné pour affichage dans un df"""
return round(bilan["min"], 2)
@classmethod
def get_max_for_df(cls, bilan: dict) -> float:
"""Partant d'un dictionnaire `bilan` généralement une moyennes_tags pour un tag donné,
renvoie le max renseigné pour affichage dans un df"""
return round(bilan["max"], 2)
@classmethod
def get_moy_for_df(cls, bilan: dict) -> float:
"""Partant d'un dictionnaire `bilan` généralement une moyennes_tags pour un tag donné,
renvoie la moyenne renseignée pour affichage dans un df"""
return round(bilan["moy"], 2)
@classmethod
def get_class_for_df(cls, bilan: dict, etudid: int) -> str:
"""Partant d'un dictionnaire `bilan` généralement une moyennes_tags pour un tag donné,
renvoie le classement ramené au nombre d'inscrits,
pour un étudiant donné par son etudid"""
return f"{bilan['classements'].loc[etudid]}/{bilan['nb_inscrits']}"
@classmethod
def get_note_for_df(cls, bilan: dict, etudid: int):
"""Partant d'un dictionnaire `bilan` généralement une moyennes_tags pour un tag donné,
renvoie la note (moyenne)
pour un étudiant donné par son etudid"""
return round(bilan["notes"].loc[etudid], 2)