This commit is contained in:
Cléo Baras 2024-02-27 14:58:15 +01:00
parent 5ea79c03a3
commit 28b25ad681
5 changed files with 73 additions and 39 deletions

View File

@ -317,32 +317,39 @@ class InterClassTag(pe_tabletags.TableTag):
initialisation = False
df = pd.DataFrame()
# Pour chaque rcs (suivi) associe la liste des etudids l'ayant suivi
asso_rcs_etudids = {}
for etudid in etudids_sorted:
# Charge ses moyennes au RCSTag suivi
rcs = self.suivis[etudid] # Son Sx ou son RCSemX suivi
rcs = self.suivis[etudid]
if rcs:
rcstag = self.rcstags[rcs.rcs_id] # Son SxTag ou RCSTag
# Charge la moyenne
if tag in rcstag.moyennes_tags:
moytag: pd.DataFrame = rcstag.moyennes_tags[tag]
df_moytag = moytag.to_df(
pole,
aggregat=aggregat,
cohorte="Groupe",
if rcs.rcs_id not in asso_rcs_etudids:
asso_rcs_etudids[rcs.rcs_id] = []
asso_rcs_etudids[rcs.rcs_id].append(etudid)
for rcs_id, etudids in asso_rcs_etudids.items():
# Charge ses moyennes au RCSTag suivi
rcstag = self.rcstags[rcs_id] # Le SxTag ou RCSTag
# Charge la moyenne
if tag in rcstag.moyennes_tags:
moytag: pd.DataFrame = rcstag.moyennes_tags[tag]
df_moytag = moytag.to_df(
pole,
aggregat=aggregat,
cohorte="Groupe",
)
# Modif les colonnes au regard du 1er df_moytag significatif lu
if not initialisation:
df = pd.DataFrame(
np.nan, index=etudids_sorted, columns=df_moytag.columns
)
colonnes = list(df_moytag.columns)
for col in colonnes:
if col.endswith("rang"):
df[col] = df[col].astype(str)
initialisation = True
# Modif les colonnes au regard du 1er df_moytag significatif lu
if not initialisation:
df = pd.DataFrame(
np.nan, index=etudids_sorted, columns=df_moytag.columns
)
colonnes = list(df_moytag.columns)
for col in colonnes:
if col.endswith("rang"):
df[col] = df[col].astype(str)
initialisation = True
# Injecte les notes de l'étudiant
df.loc[etudid, :] = df_moytag.loc[etudid, :]
# Injecte les notes des étudiants
df.loc[etudids, :] = df_moytag.loc[etudids, :]
return df

View File

@ -124,7 +124,7 @@ class SxTag(pe_tabletags.TableTag):
self.tags_sorted = self.ressembuttag_final.tags_sorted
"""Tags (extraits du ReSemBUTTag final)"""
aff_tag = pe_affichage.repr_tags(self.tags_sorted)
pe_affichage.pe_print(f"--> Tags : {', '.join(aff_tag)}")
pe_affichage.pe_print(f"--> Tags : {aff_tag}")
# Les UE données par leur acronyme
self.acronymes_sorted = self.ressembuttag_final.acronymes_sorted

View File

@ -10,7 +10,7 @@ from flask import g
from app import log
from app.pe.rcss import pe_rcs
PE_DEBUG = True
PE_DEBUG = False
# On stocke les logs PE dans g.scodoc_pe_log

View File

@ -88,12 +88,17 @@ class JuryPE(object):
"Nom du zip où ranger les fichiers générés"
pe_affichage.pe_print(
f"Données de poursuite d'étude générées le {time.strftime('%d/%m/%Y à %H:%M')}\n"
f"Données de poursuite d'étude générées le {time.strftime('%d/%m/%Y à %H:%M')}\n",
info=True,
)
# Chargement des étudiants à prendre en compte dans le jury
pe_affichage.pe_print(
f"""***********************************************************\n"""
f"""*** Recherche des étudiants diplômés 🎓 en {self.diplome}\n"""
f"""***********************************************************"""
)
pe_affichage.pe_print(
f"""*** Recherche des étudiants diplômés 🎓 en {self.diplome}""", info=True
)
pe_affichage.pe_print(
f"""***********************************************************"""
)
@ -109,7 +114,7 @@ class JuryPE(object):
self.zipdata = io.BytesIO()
with ZipFile(self.zipdata, "w") as zipfile:
if not self.diplomes_ids:
pe_affichage.pe_print("*** Aucun étudiant diplômé")
pe_affichage.pe_print("*** Aucun étudiant diplômé", info=True)
else:
try:
self._gen_xls_diplomes(zipfile)
@ -157,14 +162,20 @@ class JuryPE(object):
def _gen_xls_ressembuttags(self, zipfile: ZipFile):
"""Calcule les moyennes par tag des résultats des Semestres BUT"""
pe_affichage.pe_print(
f"""*************************************************************************\n"""
f"""*** Génère les ResSemBUTTag (ResSemestreBUT taggués)\n"""
f"""*************************************************************************"""
)
pe_affichage.pe_print(
f"""*** Génère les ResSemBUTTag (ResSemestreBUT taggués)""", info=True
)
pe_affichage.pe_print(
f"""*************************************************************************"""
)
# Tous les formsestres des étudiants
formsemestres = get_formsemestres_etudiants(self.etudiants)
pe_affichage.pe_print(f"1) Génère les {len(formsemestres)} ResSemBUTTag")
pe_affichage.pe_print(
f"1) Génère les {len(formsemestres)} ResSemBUTTag", info=True
)
self.ressembuttags = {}
for frmsem_id, formsemestre in formsemestres.items():
@ -181,7 +192,7 @@ class JuryPE(object):
# )
# Intègre le bilan des semestres taggués au zip final
pe_affichage.pe_print(f"2) Bilan")
pe_affichage.pe_print(f"2) Bilan", info=True)
output = io.BytesIO()
with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated
output, engine="openpyxl"
@ -201,7 +212,9 @@ class JuryPE(object):
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)}")
pe_affichage.pe_print(
f"--> Export excel de {', '.join(onglets)}", info=True
)
output.seek(0)
self.add_file_to_zip(
@ -217,8 +230,13 @@ class JuryPE(object):
RCS (par ex: 'S2' ou '3S').
"""
pe_affichage.pe_print(
"***************************************************************************\n"
"*** Génère les trajectoires (≠tes combinaisons de semestres) des étudiants\n"
"***************************************************************************"
)
pe_affichage.pe_print(
"*** Génère les trajectoires (≠tes combinaisons de semestres) des étudiants",
info=True,
)
pe_affichage.pe_print(
"***************************************************************************"
)
@ -229,10 +247,19 @@ class JuryPE(object):
"""Génère les SemXs (trajectoires/combinaisons de semestre de même rang x)
qui traduisent les différents chemins des étudiants pour valider un semestre Sx.
"""
# Génère les regroupements de semestres de type Sx
pe_affichage.pe_print(
"*** Génère les SemXs (RCS de même Sx donnant lieu à validation du semestre)"
"***************************************************************************"
)
pe_affichage.pe_print(
"*** Génère les SemXs (RCS de même Sx donnant lieu à validation du semestre)",
info=True,
)
pe_affichage.pe_print(
"***************************************************************************"
)
# Génère les regroupements de semestres de type Sx
self.rcss_jury.cree_semxs()
pe_affichage.aff_semXs_suivis_par_etudiants(self.etudiants)

View File

@ -30,7 +30,7 @@
<p>
Cette fonction génère un ensemble de feuilles de calcul (xlsx)
permettant d'éditer des avis de poursuites d'études pour les étudiants
de BUT diplômés. Les calculs sous-jacents peuvent prendre un peu de temps (1 à 2 minutes).
de BUT diplômés. Les calculs sous-jacents peuvent prendre un peu de temps (1 à 3 minutes).
<br>
De nombreux aspects sont paramétrables:
<a href="https://scodoc.org/AvisPoursuiteEtudes"