Ajout option pour désactiver l'édition de classeurs intermédiaires

This commit is contained in:
Cléo Baras 2024-03-13 11:49:50 +01:00
parent 5827a37a31
commit dbe7f5d482
2 changed files with 138 additions and 112 deletions

View File

@ -61,5 +61,10 @@ class ParametrageClasseurPE(FlaskForm):
# default=False, # default=False,
# render_kw={"checked": ""}, # render_kw={"checked": ""},
) )
classeurs_detailles = BooleanField(
"Générer des classeurs intermédiaires (pour debuggage)", default=False
)
submit = SubmitField("Générer les classeurs poursuites d'études") submit = SubmitField("Générer les classeurs poursuites d'études")
cancel = SubmitField("Annuler", render_kw={"formnovalidate": True}) cancel = SubmitField("Annuler", render_kw={"formnovalidate": True})

View File

@ -101,6 +101,7 @@ class JuryPE(object):
"moyennes_ues_rcues": True, "moyennes_ues_rcues": True,
"min_max_moy": False, "min_max_moy": False,
"publipostage": False, "publipostage": False,
"classeurs_detailles": False,
}, },
): ):
pe_affichage.pe_start_log() pe_affichage.pe_start_log()
@ -221,43 +222,43 @@ class JuryPE(object):
# Crée le semestre_tag et exécute les calculs de moyennes # Crée le semestre_tag et exécute les calculs de moyennes
ressembuttag = pe_ressemtag.ResSemBUTTag(formsemestre, options=self.options) ressembuttag = pe_ressemtag.ResSemBUTTag(formsemestre, options=self.options)
self.ressembuttags[frmsem_id] = ressembuttag self.ressembuttags[frmsem_id] = ressembuttag
# Ajoute les étudiants découverts dans les ressembuttags aux données des étudiants
# nbre_etudiants_ajoutes = self.etudiants.add_etudiants(
# ressembuttag.etudids_sorted
# )
# if nbre_etudiants_ajoutes:
# pe_affichage.pe_print(
# f"--> Ajout de {nbre_etudiants_ajoutes} étudiants aux données du jury"
# )
# Intègre le bilan des semestres taggués au zip final # Intègre le bilan des semestres taggués au zip final
pe_affichage.pe_print(f"2) Bilan", info=True) pe_affichage.pe_print(f"2) Bilan", info=True)
output = io.BytesIO() if (
with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated "classeurs_detailles" in self.options
output, engine="openpyxl" and self.options["classeurs_detailles"]
) as writer: ):
onglets = [] output = io.BytesIO()
for res_sem_tag in self.ressembuttags.values(): with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated
if res_sem_tag.is_significatif(): output, engine="openpyxl"
onglet = res_sem_tag.get_repr(verbose=True) ) as writer:
onglet = onglet.replace("Semestre ", "S") onglets = []
onglets += ["📊" + onglet] for res_sem_tag in self.ressembuttags.values():
df = res_sem_tag.to_df(options=self.options) if res_sem_tag.is_significatif():
# Conversion colonnes en multiindex onglet = res_sem_tag.get_repr(verbose=True)
df = convert_colonnes_to_multiindex(df) onglet = onglet.replace("Semestre ", "S")
# écriture dans l'onglet onglets += ["📊" + onglet]
df.to_excel(writer, onglet, index=True, header=True) df = res_sem_tag.to_df(options=self.options)
pe_affichage.pe_print( # Conversion colonnes en multiindex
f"--> Export excel de {', '.join(onglets)}", info=True df = convert_colonnes_to_multiindex(df)
) # écriture dans l'onglet
output.seek(0) df.to_excel(writer, onglet, index=True, header=True)
pe_affichage.pe_print(
f"--> Export excel de {', '.join(onglets)}", info=True
)
output.seek(0)
self.add_file_to_zip( self.add_file_to_zip(
zipfile, zipfile,
f"ResSemBUTTags_{self.diplome}.xlsx", f"ResSemBUTTags_{self.diplome}.xlsx",
output.read(), output.read(),
path="details", path="details",
) )
else:
pe_affichage.pe_print(
"--> Pas d'export excel (option non cochée)", info=True
)
def _gen_trajectoires(self): def _gen_trajectoires(self):
"""Génère l'ensemble des trajectoires (RCS), qui traduisent les différents """Génère l'ensemble des trajectoires (RCS), qui traduisent les différents
@ -324,33 +325,39 @@ class JuryPE(object):
# Intègre le bilan des semestres taggués au zip final # Intègre le bilan des semestres taggués au zip final
pe_affichage.pe_print("2) Bilan", info=True) pe_affichage.pe_print("2) Bilan", info=True)
output = io.BytesIO() if (
with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated "classeurs_detailles" in self.options
output, engine="openpyxl" and self.options["classeurs_detailles"]
) as writer: ):
onglets = [] output = io.BytesIO()
for sxtag in self.sxtags.values(): with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated
if sxtag.is_significatif(): output, engine="openpyxl"
onglet = sxtag.get_repr(verbose=False) ) as writer:
onglets += ["📊" + onglet] onglets = []
df = sxtag.to_df(options=self.options) for sxtag in self.sxtags.values():
# Conversion colonnes en multiindex if sxtag.is_significatif():
df = convert_colonnes_to_multiindex(df) onglet = sxtag.get_repr(verbose=False)
onglets += ["📊" + onglet]
df = sxtag.to_df(options=self.options)
# Conversion colonnes en multiindex
df = convert_colonnes_to_multiindex(df)
# écriture dans l'onglet # écriture dans l'onglet
df.to_excel(writer, onglet, index=True, header=True) df.to_excel(writer, onglet, index=True, header=True)
pe_affichage.pe_print( pe_affichage.pe_print(
f"--> Export excel de {', '.join(onglets)}", info=True f"--> Export excel de {', '.join(onglets)}", info=True
) )
output.seek(0) output.seek(0)
if onglets: if onglets:
self.add_file_to_zip( self.add_file_to_zip(
zipfile, zipfile,
f"semestres_taggues_{self.diplome}.xlsx", f"semestres_taggues_{self.diplome}.xlsx",
output.read(), output.read(),
path="details", path="details",
) )
else:
pe_affichage.pe_print("--> Pas d'export Excel (option non cochée)")
def _gen_rcsemxs(self): def _gen_rcsemxs(self):
"""Génère les regroupements cohérents de RCFs qu'ont suivi chaque étudiant""" """Génère les regroupements cohérents de RCFs qu'ont suivi chaque étudiant"""
@ -423,34 +430,40 @@ class JuryPE(object):
# Intègre le bilan des trajectoires tagguées au zip final # Intègre le bilan des trajectoires tagguées au zip final
pe_affichage.pe_print("2) Bilan", info=True) pe_affichage.pe_print("2) Bilan", info=True)
output = io.BytesIO() if (
with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated "classeurs_detailles" in self.options
output, engine="openpyxl" and self.options["classeurs_detailles"]
) as writer: ):
onglets = [] output = io.BytesIO()
for rcs_tag in self.rcsstags.values(): with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated
if rcs_tag.is_significatif(): output, engine="openpyxl"
onglet = rcs_tag.get_repr(verbose=False) ) as writer:
onglets += ["📊" + onglet] onglets = []
for rcs_tag in self.rcsstags.values():
if rcs_tag.is_significatif():
onglet = rcs_tag.get_repr(verbose=False)
onglets += ["📊" + onglet]
df = rcs_tag.to_df(options=self.options) df = rcs_tag.to_df(options=self.options)
# Conversion colonnes en multiindex # Conversion colonnes en multiindex
df = convert_colonnes_to_multiindex(df) df = convert_colonnes_to_multiindex(df)
onglets += ["📊" + onglet] onglets += ["📊" + onglet]
# écriture dans l'onglet # écriture dans l'onglet
df.to_excel(writer, onglet, index=True, header=True) df.to_excel(writer, onglet, index=True, header=True)
pe_affichage.pe_print( pe_affichage.pe_print(
f"--> Export excel de {', '.join(onglets)}", info=True f"--> Export excel de {', '.join(onglets)}", info=True
) )
output.seek(0) output.seek(0)
if onglets: if onglets:
self.add_file_to_zip( self.add_file_to_zip(
zipfile, zipfile,
f"RCRCFs_{self.diplome}.xlsx", f"RCRCFs_{self.diplome}.xlsx",
output.read(), output.read(),
path="details", path="details",
) )
else:
pe_affichage.pe_print("--> Pas d'export Excel (option non cochée)")
def _gen_xls_interclasstags(self, zipfile: ZipFile): def _gen_xls_interclasstags(self, zipfile: ZipFile):
"""Génère les interclassements sur la promo de diplômés """Génère les interclassements sur la promo de diplômés
@ -512,36 +525,44 @@ class JuryPE(object):
] = interclass ] = interclass
# Intègre le bilan des aggrégats (interclassé par promo) au zip final # Intègre le bilan des aggrégats (interclassé par promo) au zip final
output = io.BytesIO() if (
with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated "classeurs_detailles" in self.options
output, engine="openpyxl" and self.options["classeurs_detailles"]
) as writer: ):
onglets = [] output = io.BytesIO()
for ( with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated
type_interclass output, engine="openpyxl"
) in self.interclasstags: # Pour les types d'interclassements prévus ) as writer:
interclasstag = self.interclasstags[type_interclass] onglets = []
for nom_rcs, interclass in interclasstag.items(): for (
if interclass.is_significatif(): type_interclass
onglet = interclass.get_repr() ) in self.interclasstags: # Pour les types d'interclassements prévus
onglets += ["📊" + onglet] interclasstag = self.interclasstags[type_interclass]
df = interclass.to_df(cohorte="Promo", options=self.options) for nom_rcs, interclass in interclasstag.items():
# Conversion colonnes en multiindex if interclass.is_significatif():
df = convert_colonnes_to_multiindex(df) onglet = interclass.get_repr()
onglets += [onglet] onglets += ["📊" + onglet]
# écriture dans l'onglet df = interclass.to_df(cohorte="Promo", options=self.options)
df.to_excel(writer, onglet, index=True, header=True) # Conversion colonnes en multiindex
pe_affichage.pe_print(f"=> Export excel de {', '.join(onglets)}", info=True) df = convert_colonnes_to_multiindex(df)
onglets += [onglet]
# écriture dans l'onglet
df.to_excel(writer, onglet, index=True, header=True)
pe_affichage.pe_print(
f"=> Export excel de {', '.join(onglets)}", info=True
)
output.seek(0) output.seek(0)
if onglets: if onglets:
self.add_file_to_zip( self.add_file_to_zip(
zipfile, zipfile,
f"InterClassTags_{self.diplome}.xlsx", f"InterClassTags_{self.diplome}.xlsx",
output.read(), output.read(),
path="details", path="details",
) )
else:
pe_affichage.pe_print("--> Pas d'export Excel (option non cochée)")
def _gen_xls_synthese_jury_par_tag(self, zipfile: ZipFile): def _gen_xls_synthese_jury_par_tag(self, zipfile: ZipFile):
"""Synthèse des éléments du jury PE tag par tag""" """Synthèse des éléments du jury PE tag par tag"""