forked from ScoDoc/ScoDoc
Export Excel : Améliore les entêtes des colonnes + supprime l'affichage des classements des étudiants sans note
This commit is contained in:
parent
387af40b65
commit
66fbb0afbc
@ -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é
|
||||
|
@ -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
|
||||
|
@ -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,49 +354,33 @@ class JuryPE(object):
|
||||
]
|
||||
if tag in trajectoire_tagguee.moyennes_tags:
|
||||
bilan = trajectoire_tagguee.moyennes_tags[tag]
|
||||
|
||||
note = TableTag.get_note_for_df(bilan, etudid)
|
||||
if note != np.nan:
|
||||
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
|
||||
)
|
||||
(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]
|
||||
|
||||
if note != np.nan:
|
||||
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
|
||||
)
|
||||
(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
|
||||
@ -492,3 +484,4 @@ def compute_interclassements(
|
||||
)
|
||||
aggregats_interclasses_taggues[nom_aggregat] = interclass
|
||||
return aggregats_interclasses_taggues
|
||||
|
||||
|
@ -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)
|
Loading…
Reference in New Issue
Block a user