forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user