forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -12,6 +12,8 @@ if not PE_DEBUG:
|
|||||||
else:
|
else:
|
||||||
pe_print = print # print function
|
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:
|
def nom_semestre_etape(semestre: FormSemestre, avec_fid=False) -> str:
|
||||||
"""Nom d'un semestre à afficher dans le descriptif des étapes de la scolarité
|
"""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 = {
|
PARCOURS = {
|
||||||
"S1": {
|
"S1": {
|
||||||
"aggregat": ["S1"],
|
"aggregat": ["S1"],
|
||||||
"ordre": 1,
|
"descr": "Semestre 1 (S1)",
|
||||||
"affichage_court": "S1",
|
|
||||||
"affichage_long": "Semestre 1",
|
|
||||||
},
|
},
|
||||||
"S2": {
|
"S2": {
|
||||||
"aggregat": ["S2"],
|
"aggregat": ["S2"],
|
||||||
"ordre": 2,
|
"descr": "Semestre 2 (S2)",
|
||||||
"affichage_court": "S2",
|
|
||||||
"affichage_long": "Semestre 2",
|
|
||||||
},
|
},
|
||||||
"1A": {
|
"1A": {
|
||||||
"aggregat": ["S1", "S2"],
|
"aggregat": ["S1", "S2"],
|
||||||
"ordre": 3,
|
"descr": "BUT1 (S1+S2)",
|
||||||
"affichage_court": "1A",
|
|
||||||
"affichage_long": "1ère année",
|
|
||||||
},
|
},
|
||||||
"S3": {
|
"S3": {
|
||||||
"aggregat": ["S3"],
|
"aggregat": ["S3"],
|
||||||
"ordre": 4,
|
"descr": "Semestre 3 (S3)",
|
||||||
"affichage_court": "S3",
|
|
||||||
"affichage_long": "Semestre 3",
|
|
||||||
},
|
},
|
||||||
"S4": {
|
"S4": {
|
||||||
"aggregat": ["S4"],
|
"aggregat": ["S4"],
|
||||||
"ordre": 5,
|
"descr": "Semestre 4 (S4)",
|
||||||
"affichage_court": "S4",
|
|
||||||
"affichage_long": "Semestre 4",
|
|
||||||
},
|
},
|
||||||
"2A": {
|
"2A": {
|
||||||
"aggregat": ["S3", "S4"],
|
"aggregat": ["S3", "S4"],
|
||||||
"ordre": 6,
|
"descr": "BUT2 (S3+S4)",
|
||||||
"affichage_court": "2A",
|
|
||||||
"affichage_long": "2ème année",
|
|
||||||
},
|
},
|
||||||
"3S": {
|
"3S": {
|
||||||
"aggregat": ["S1", "S2", "S3"],
|
"aggregat": ["S1", "S2", "S3"],
|
||||||
"ordre": 7,
|
"descr": "Moyenne du semestre 1 au semestre 3 (S1+S2+S3)",
|
||||||
"affichage_court": "S1+S2+S3",
|
|
||||||
"affichage_long": "BUT du semestre 1 au semestre 3",
|
|
||||||
},
|
},
|
||||||
"4S": {
|
"4S": {
|
||||||
"aggregat": ["S1", "S2", "S3", "S4"],
|
"aggregat": ["S1", "S2", "S3", "S4"],
|
||||||
"ordre": 8,
|
"descr": "Moyenne du semestre 1 au semestre 4 (S1+S2+S3+S4)",
|
||||||
"affichage_court": "BUT",
|
|
||||||
"affichage_long": "BUT du semestre 1 au semestre 4",
|
|
||||||
},
|
},
|
||||||
"S5": {
|
"S5": {
|
||||||
"aggregat": ["S5"],
|
"aggregat": ["S5"],
|
||||||
"ordre": 9,
|
"descr": "Semestre 5 (S5)",
|
||||||
"affichage_court": "S5",
|
|
||||||
"affichage_long": "Semestre 5",
|
|
||||||
},
|
},
|
||||||
"S6": {
|
"S6": {
|
||||||
"aggregat": ["S6"],
|
"aggregat": ["S6"],
|
||||||
"ordre": 10,
|
"descr": "Semestre 6 (S6)",
|
||||||
"affichage_court": "S6",
|
|
||||||
"affichage_long": "Semestre 6",
|
|
||||||
},
|
},
|
||||||
"3A": {
|
"3A": {
|
||||||
"aggregat": ["S5", "S6"],
|
"aggregat": ["S5", "S6"],
|
||||||
"ordre": 11,
|
"descr": "3ème année (S5+S6)",
|
||||||
"affichage_court": "3A",
|
|
||||||
"affichage_long": "3ème année",
|
|
||||||
},
|
},
|
||||||
"5S": {
|
"5S": {
|
||||||
"aggregat": ["S1", "S2", "S3", "S4", "S5"],
|
"aggregat": ["S1", "S2", "S3", "S4", "S5"],
|
||||||
"ordre": 12,
|
"descr": "Moyenne du semestre 1 au semestre 5 (S1+S2+S3+S4+S5)",
|
||||||
"affichage_court": "S1+S2+S3+S4+S5",
|
|
||||||
"affichage_long": "BUT du semestre 1 au semestre 5",
|
|
||||||
},
|
},
|
||||||
"6S": {
|
"6S": {
|
||||||
"aggregat": ["S1", "S2", "S3", "S4", "S5", "S6"],
|
"aggregat": ["S1", "S2", "S3", "S4", "S5", "S6"],
|
||||||
"ordre": 13,
|
"descr": "Moyenne globale BUT (S1+S2+S3+S4+S5+S6)",
|
||||||
"affichage_court": "BUT",
|
|
||||||
"affichage_long": "BUT (tout semestre inclus)",
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
NBRE_SEMESTRES_DIPLOMANT = 6
|
NBRE_SEMESTRES_DIPLOMANT = 6
|
||||||
|
@ -46,6 +46,9 @@ import io
|
|||||||
import os
|
import os
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
from app.pe.pe_tabletags import TableTag
|
||||||
from app.scodoc.gen_tables import SeqGenTable
|
from app.scodoc.gen_tables import SeqGenTable
|
||||||
from app.pe.pe_etudiant import EtudiantsJuryPE
|
from app.pe.pe_etudiant import EtudiantsJuryPE
|
||||||
from app.pe.pe_trajectoire import TrajectoiresJuryPE, Trajectoire
|
from app.pe.pe_trajectoire import TrajectoiresJuryPE, Trajectoire
|
||||||
@ -332,13 +335,18 @@ class JuryPE(object):
|
|||||||
# La trajectoire de l'étudiant sur l'aggrégat
|
# La trajectoire de l'étudiant sur l'aggrégat
|
||||||
trajectoire = self.trajectoires.suivi[etudid][aggregat]
|
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
|
# Les moyennes par tag de cette trajectoire
|
||||||
donnees[etudid] |= {
|
donnees[etudid] |= {
|
||||||
(aggregat, "", "notes"): "-",
|
(descr, "", "note"): pe_affichage.SANS_NOTE,
|
||||||
(aggregat, "groupe", "class."): "-",
|
(descr, "statistique du groupe", "class."): pe_affichage.SANS_NOTE,
|
||||||
(aggregat, "groupe", "min"): "-",
|
(descr, "statistique du groupe", "min"): pe_affichage.SANS_NOTE,
|
||||||
(aggregat, "groupe", "moy"): "-",
|
(descr, "statistique du groupe", "moy"): pe_affichage.SANS_NOTE,
|
||||||
(aggregat, "groupe", "max"): "-",
|
(descr, "statistique du groupe", "max"): pe_affichage.SANS_NOTE,
|
||||||
}
|
}
|
||||||
if trajectoire:
|
if trajectoire:
|
||||||
trajectoire_tagguee = self.trajectoires_tagguees[
|
trajectoire_tagguee = self.trajectoires_tagguees[
|
||||||
@ -346,50 +354,34 @@ class JuryPE(object):
|
|||||||
]
|
]
|
||||||
if tag in trajectoire_tagguee.moyennes_tags:
|
if tag in trajectoire_tagguee.moyennes_tags:
|
||||||
bilan = trajectoire_tagguee.moyennes_tags[tag]
|
bilan = trajectoire_tagguee.moyennes_tags[tag]
|
||||||
|
note = TableTag.get_note_for_df(bilan, etudid)
|
||||||
donnees[etudid] |= {
|
if note != np.nan:
|
||||||
(aggregat, "", "notes"): round(
|
donnees[etudid] |= {
|
||||||
bilan["notes"].loc[etudid], 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),
|
||||||
aggregat,
|
(descr, "statistique du groupe", "moy"): TableTag.get_moy_for_df(bilan),
|
||||||
"groupe",
|
(descr, "statistique du groupe", "max"): TableTag.get_max_for_df(bilan)
|
||||||
"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
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
"""L'interclassement"""
|
"""L'interclassement"""
|
||||||
interclass = self.interclassements_taggues[aggregat]
|
interclass = self.interclassements_taggues[aggregat]
|
||||||
donnees[etudid] |= {
|
donnees[etudid] |= {
|
||||||
(aggregat, f"promotion {self.diplome}", "class."): "-",
|
(descr, f"statistique de la promotion {self.diplome}", "class."): pe_affichage.SANS_NOTE,
|
||||||
(aggregat, f"promotion {self.diplome}", "min"): "-",
|
(descr, f"statistique de la promotion {self.diplome}", "min"): pe_affichage.SANS_NOTE,
|
||||||
(aggregat, f"promotion {self.diplome}", "moy"): "-",
|
(descr, f"statistique de la promotion {self.diplome}", "moy"): pe_affichage.SANS_NOTE,
|
||||||
(aggregat, f"promotion {self.diplome}", "max"): "-",
|
(descr, f"statistique de la promotion {self.diplome}", "max"): pe_affichage.SANS_NOTE,
|
||||||
}
|
}
|
||||||
if tag in interclass.moyennes_tags:
|
if tag in interclass.moyennes_tags:
|
||||||
bilan = interclass.moyennes_tags[tag]
|
bilan = interclass.moyennes_tags[tag]
|
||||||
|
|
||||||
donnees[etudid] |= {
|
if note != np.nan:
|
||||||
(aggregat, f"promotion {self.diplome}", "class."): f"{bilan['classements'].loc[etudid]}/{bilan['nb_inscrits']}",
|
donnees[etudid] |= {
|
||||||
(aggregat, f"promotion {self.diplome}", "min"): round(
|
(descr, f"statistique de la promotion {self.diplome}", "class."): TableTag.get_class_for_df(bilan, etudid),
|
||||||
bilan["min"], 2
|
(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),
|
||||||
(aggregat, f"promotion {self.diplome}", "moy"): round(
|
(descr, f"statistique de la promotion {self.diplome}", "max"): TableTag.get_max_for_df(bilan)
|
||||||
bilan["moy"], 2
|
}
|
||||||
),
|
|
||||||
(aggregat, f"promotion {self.diplome}", "max"): round(
|
|
||||||
bilan["max"], 2
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Fin de l'aggrégat
|
# Fin de l'aggrégat
|
||||||
# Construction du dataFrame
|
# Construction du dataFrame
|
||||||
@ -492,3 +484,4 @@ def compute_interclassements(
|
|||||||
)
|
)
|
||||||
aggregats_interclasses_taggues[nom_aggregat] = interclass
|
aggregats_interclasses_taggues[nom_aggregat] = interclass
|
||||||
return aggregats_interclasses_taggues
|
return aggregats_interclasses_taggues
|
||||||
|
|
||||||
|
@ -48,8 +48,6 @@ TAGS_RESERVES = ["but"]
|
|||||||
|
|
||||||
|
|
||||||
class TableTag(object):
|
class TableTag(object):
|
||||||
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""Classe centralisant différentes méthodes communes aux
|
"""Classe centralisant différentes méthodes communes aux
|
||||||
SemestreTag, TrajectoireTag, AggregatInterclassTag
|
SemestreTag, TrajectoireTag, AggregatInterclassTag
|
||||||
@ -105,3 +103,36 @@ class TableTag(object):
|
|||||||
df = df.join(self.moyennes_tags[tag]["classements"].rename(f"class {tag}"))
|
df = df.join(self.moyennes_tags[tag]["classements"].rename(f"class {tag}"))
|
||||||
|
|
||||||
return df.to_csv(sep=";")
|
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