Corrections diverses du code bulletins

This commit is contained in:
Emmanuel Viennet 2022-07-11 18:33:48 +02:00
parent 45d3106272
commit b34484784a

View File

@ -347,23 +347,23 @@ def formsemestre_bulletinetud_dict(formsemestre_id, etudid, version="long"):
u[ u[
"modules_capitalized" "modules_capitalized"
] = [] # modules de l'UE capitalisée (liste vide si pas capitalisée) ] = [] # modules de l'UE capitalisée (liste vide si pas capitalisée)
if ue_status["is_capitalized"]: if ue_status["is_capitalized"] and ue_status["formsemestre_id"] is not None:
sem_origin = sco_formsemestre.get_formsemestre(ue_status["formsemestre_id"]) sem_origin = FormSemestre.query.get(ue_status["formsemestre_id"])
u["ue_descr_txt"] = "capitalisée le %s" % ndb.DateISOtoDMY(
ue_status["event_date"]
)
u[ u[
"ue_descr_html" "ue_descr_txt"
] = f"""<a href="{ url_for( 'notes.formsemestre_bulletinetud', ] = f'capitalisée le {ndb.DateISOtoDMY(ue_status["event_date"])}'
scodoc_dept=g.scodoc_dept, formsemestre_id=sem_origin['formsemestre_id'], etudid=etudid)}" u["ue_descr_html"] = (
title="{sem_origin['titreannee']}" class="bull_link" f"""<a href="{ url_for( 'notes.formsemestre_bulletinetud',
>{u["ue_descr_txt"]} pouet</a> scodoc_dept=g.scodoc_dept, formsemestre_id=sem_origin.id, etudid=etudid)}"
title="{sem_origin.titre_annee()}" class="bull_link"
>{u["ue_descr_txt"]}</a>
""" """
if ue_status["moy"] != "NA" and ue_status["formsemestre_id"]: if sem_origin
else ""
)
if ue_status["moy"] != "NA":
# détail des modules de l'UE capitalisée # détail des modules de l'UE capitalisée
formsemestre_cap = FormSemestre.query.get_or_404( formsemestre_cap = FormSemestre.query.get(ue_status["formsemestre_id"])
ue_status["formsemestre_id"]
)
nt_cap: NotesTableCompat = res_sem.load_formsemestre_results( nt_cap: NotesTableCompat = res_sem.load_formsemestre_results(
formsemestre_cap formsemestre_cap
) )
@ -712,7 +712,6 @@ def etud_descr_situation_semestre(
infos = scu.DictDefault(defaultvalue="") infos = scu.DictDefault(defaultvalue="")
# --- Situation et décisions jury # --- Situation et décisions jury
# démission/inscription ? # démission/inscription ?
events = sco_etud.scolar_events_list( events = sco_etud.scolar_events_list(
cnx, args={"etudid": etudid, "formsemestre_id": formsemestre_id} cnx, args={"etudid": etudid, "formsemestre_id": formsemestre_id}
@ -763,11 +762,17 @@ def etud_descr_situation_semestre(
infos["descr_inscription"] = "" infos["descr_inscription"] = ""
infos["situation"] = infos["descr_inscription"] infos["situation"] = infos["descr_inscription"]
# Décision: valeurs par defaut vides:
infos["decision_jury"] = infos["descr_decision_jury"] = ""
infos["decision_sem"] = ""
infos["decisions_ue"] = infos["descr_decisions_ue"] = ""
infos["descr_decisions_niveaux"] = infos["descr_decisions_rcue"] = ""
infos["descr_decision_annee"] = ""
if date_dem: if date_dem:
infos["descr_demission"] = f"Démission le {date_dem}." infos["descr_demission"] = f"Démission le {date_dem}."
infos["date_demission"] = date_dem infos["date_demission"] = date_dem
infos["descr_decision_jury"] = "Démission" infos["decision_jury"] = infos["descr_decision_jury"] = "Démission"
infos["situation"] += " " + infos["descr_demission"] infos["situation"] += " " + infos["descr_demission"]
return infos, None # ne donne pas les dec. de jury pour les demissionnaires return infos, None # ne donne pas les dec. de jury pour les demissionnaires
if date_def: if date_def:
@ -779,8 +784,6 @@ def etud_descr_situation_semestre(
dpv = sco_pvjury.dict_pvjury(formsemestre_id, etudids=[etudid]) dpv = sco_pvjury.dict_pvjury(formsemestre_id, etudids=[etudid])
if dpv: if dpv:
infos["decision_sem"] = dpv["decisions"][0]["decision_sem"] infos["decision_sem"] = dpv["decisions"][0]["decision_sem"]
else:
infos["decision_sem"] = ""
if not show_decisions: if not show_decisions:
return infos, dpv return infos, dpv
@ -803,7 +806,7 @@ def etud_descr_situation_semestre(
infos["descr_decisions_ue"] = " UE acquises: " + pv["decisions_ue_descr"] + ". " infos["descr_decisions_ue"] = " UE acquises: " + pv["decisions_ue_descr"] + ". "
dec += infos["descr_decisions_ue"] dec += infos["descr_decisions_ue"]
else: else:
# infos['decisions_ue'] = None infos["decisions_ue"] = ""
infos["descr_decisions_ue"] = "" infos["descr_decisions_ue"] = ""
infos["mention"] = pv["mention"] infos["mention"] = pv["mention"]
@ -842,9 +845,20 @@ def formsemestre_bulletinetud(
force_publishing=False, # force publication meme si semestre non publie sur "portail" force_publishing=False, # force publication meme si semestre non publie sur "portail"
prefer_mail_perso=False, prefer_mail_perso=False,
): ):
"""Page bulletin de notes """Page bulletin de notes pour
pour les formations classiques hors BUT (page HTML) - HTML des formations classiques (non BUT)
ou le format "oldjson". - le format "oldjson" (les "json" sont générés à part, voir get_formsemestre_bulletin_etud_json)
- les formats PDF, XML et mail pdf (toutes formations)
Note: le format XML n'est plus maintenu et pour les BUT ne contient pas
toutes les informations. Privilégier le format JSON.
Paramètres:
- version: pour les formations classqiues, versions short/selectedevals/long
- xml_with_decisions: inclue ou non les
- force_publishing: renvoie le bulletin même si semestre non publie sur "portail"
- prefer_mail_perso: pour pdfmail, utilise adresse mail perso en priorité.
""" """
format = format or "html" format = format or "html"
formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id) formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id)
@ -903,7 +917,12 @@ def do_formsemestre_bulletinetud(
prefer_mail_perso=False, # mails envoyés sur adresse perso si non vide prefer_mail_perso=False, # mails envoyés sur adresse perso si non vide
): ):
"""Génère le bulletin au format demandé. """Génère le bulletin au format demandé.
Retourne: (bul, filigranne) Utilisé pour:
- HTML des formations classiques (non BUT)
- le format "oldjson" (les json sont générés à part, voir get_formsemestre_bulletin_etud_json)
- les formats PDF, XML et mail pdf (toutes formations)
Résultat: (bul, filigranne)
bul est str ou bytes au format demandé (html, pdf, pdfmail, pdfpart, xml, json) bul est str ou bytes au format demandé (html, pdf, pdfmail, pdfpart, xml, json)
et filigranne est un message à placer en "filigranne" (eg "Provisoire"). et filigranne est un message à placer en "filigranne" (eg "Provisoire").
""" """
@ -919,7 +938,7 @@ def do_formsemestre_bulletinetud(
return bul, "" return bul, ""
elif format == "json": elif format == "json": # utilisé pour classic et "oldjson"
bul = sco_bulletins_json.make_json_formsemestre_bulletinetud( bul = sco_bulletins_json.make_json_formsemestre_bulletinetud(
formsemestre.id, formsemestre.id,
etudid, etudid,
@ -932,20 +951,20 @@ def do_formsemestre_bulletinetud(
if formsemestre.formation.is_apc(): if formsemestre.formation.is_apc():
etudiant = Identite.query.get(etudid) etudiant = Identite.query.get(etudid)
r = bulletin_but.BulletinBUT(formsemestre) r = bulletin_but.BulletinBUT(formsemestre)
I = r.bulletin_etud_complet(etudiant, version=version) infos = r.bulletin_etud_complet(etudiant, version=version)
else: else:
I = formsemestre_bulletinetud_dict(formsemestre.id, etudid) infos = formsemestre_bulletinetud_dict(formsemestre.id, etudid)
etud = I["etud"] etud = infos["etud"]
if format == "html": if format == "html":
htm, _ = sco_bulletins_generator.make_formsemestre_bulletinetud( htm, _ = sco_bulletins_generator.make_formsemestre_bulletinetud(
I, version=version, format="html" infos, version=version, format="html"
) )
return htm, I["filigranne"] return htm, infos["filigranne"]
elif format == "pdf" or format == "pdfpart": elif format == "pdf" or format == "pdfpart":
bul, filename = sco_bulletins_generator.make_formsemestre_bulletinetud( bul, filename = sco_bulletins_generator.make_formsemestre_bulletinetud(
I, infos,
version=version, version=version,
format="pdf", format="pdf",
stand_alone=(format != "pdfpart"), stand_alone=(format != "pdfpart"),
@ -953,10 +972,10 @@ def do_formsemestre_bulletinetud(
if format == "pdf": if format == "pdf":
return ( return (
scu.sendPDFFile(bul, filename), scu.sendPDFFile(bul, filename),
I["filigranne"], infos["filigranne"],
) # unused ret. value ) # unused ret. value
else: else:
return bul, I["filigranne"] return bul, infos["filigranne"]
elif format == "pdfmail": elif format == "pdfmail":
# format pdfmail: envoie le pdf par mail a l'etud, et affiche le html # format pdfmail: envoie le pdf par mail a l'etud, et affiche le html
@ -965,7 +984,7 @@ def do_formsemestre_bulletinetud(
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !") raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
pdfdata, filename = sco_bulletins_generator.make_formsemestre_bulletinetud( pdfdata, filename = sco_bulletins_generator.make_formsemestre_bulletinetud(
I, version=version, format="pdf" infos, version=version, format="pdf"
) )
if prefer_mail_perso: if prefer_mail_perso:
@ -975,21 +994,21 @@ def do_formsemestre_bulletinetud(
if not recipient_addr: if not recipient_addr:
flash(f"{etud['nomprenom']} n'a pas d'adresse e-mail !") flash(f"{etud['nomprenom']} n'a pas d'adresse e-mail !")
return False, I["filigranne"] return False, infos["filigranne"]
else: else:
mail_bulletin(formsemestre.id, I, pdfdata, filename, recipient_addr) mail_bulletin(formsemestre.id, infos, pdfdata, filename, recipient_addr)
flash(f"mail envoyé à {recipient_addr}") flash(f"mail envoyé à {recipient_addr}")
return True, I["filigranne"] return True, infos["filigranne"]
raise ValueError("do_formsemestre_bulletinetud: invalid format (%s)" % format) raise ValueError("do_formsemestre_bulletinetud: invalid format (%s)" % format)
def mail_bulletin(formsemestre_id, I, pdfdata, filename, recipient_addr): def mail_bulletin(formsemestre_id, infos, pdfdata, filename, recipient_addr):
"""Send bulletin by email to etud """Send bulletin by email to etud
If bul_mail_list_abs pref is true, put list of absences in mail body (text). If bul_mail_list_abs pref is true, put list of absences in mail body (text).
""" """
etud = I["etud"] etud = infos["etud"]
webmaster = sco_preferences.get_preference("bul_mail_contact_addr", formsemestre_id) webmaster = sco_preferences.get_preference("bul_mail_contact_addr", formsemestre_id)
dept = scu.unescape_html( dept = scu.unescape_html(
sco_preferences.get_preference("DeptName", formsemestre_id) sco_preferences.get_preference("DeptName", formsemestre_id)
@ -1016,7 +1035,7 @@ def mail_bulletin(formsemestre_id, I, pdfdata, filename, recipient_addr):
etud["etudid"], with_evals=False, format="text" etud["etudid"], with_evals=False, format="text"
) )
subject = "Relevé de notes de %s" % etud["nomprenom"] subject = f"""Relevé de notes de {etud["nomprenom"]}"""
recipients = [recipient_addr] recipients = [recipient_addr]
sender = sco_preferences.get_preference("email_from_addr", formsemestre_id) sender = sco_preferences.get_preference("email_from_addr", formsemestre_id)
if copy_addr: if copy_addr:
@ -1025,7 +1044,7 @@ def mail_bulletin(formsemestre_id, I, pdfdata, filename, recipient_addr):
bcc = "" bcc = ""
# Attach pdf # Attach pdf
log("mail bulletin a %s" % recipient_addr) log(f"""mail bulletin a {recipient_addr}""")
email.send_email( email.send_email(
subject, subject,
sender, sender,