diff --git a/app/scodoc/sco_bulletins.py b/app/scodoc/sco_bulletins.py index 5279ab98b7f8194b020f2c05b184248c5cb19412..73de955675a2d78ca62fb3ed1da659c75b7c1907 100644 --- a/app/scodoc/sco_bulletins.py +++ b/app/scodoc/sco_bulletins.py @@ -682,6 +682,38 @@ def get_etud_rangs_groups( return rang_gr, ninscrits_gr, gr_name +def dict_infos_parcours_etud(etudid: int, formsemestre: FormSemestre) -> dict: + """Retourne un dictionnaire avec les informations sur le parcours de l'étudiant: + parcours_titre, parcours_code, refcomp_specialite, refcomp_specialite_long + Si non BUT, tous les champs sont vides. + """ + infos = { + "parcours_titre": "", + "parcours_code": "", + "refcomp_specialite": "", + "refcomp_specialite_long": "", + } + # Parcours BUT + if formsemestre.formation.is_apc(): + res: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre) + try: + parcour_id = res.etuds_parcour_id[etudid] + except KeyError as exc: + log("sco_bulletins: ScoTemporaryError 240222") + raise ScoTemporaryError() from exc + parcour: ApcParcours = ( + db.session.get(ApcParcours, parcour_id) if parcour_id is not None else None + ) + if parcour: + infos["parcours_titre"] = parcour.libelle or "" + infos["parcours_code"] = parcour.code or "" + refcomp = parcour.referentiel + if refcomp: + infos["refcomp_specialite"] = refcomp.specialite + infos["refcomp_specialite_long"] = refcomp.specialite_long + return infos + + def etud_descr_situation_semestre( etudid, formsemestre: FormSemestre, @@ -734,28 +766,7 @@ def etud_descr_situation_semestre( infos["descr_defaillance"] = "" - # Parcours BUT - infos["parcours_titre"] = "" - infos["parcours_code"] = "" - infos["refcomp_specialite"] = "" - infos["refcomp_specialite_long"] = "" - if formsemestre.formation.is_apc(): - res: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre) - try: - parcour_id = res.etuds_parcour_id[etudid] - except KeyError as exc: - log("sco_bulletins: ScoTemporaryError 240222") - raise ScoTemporaryError() from exc - parcour: ApcParcours = ( - db.session.get(ApcParcours, parcour_id) if parcour_id is not None else None - ) - if parcour: - infos["parcours_titre"] = parcour.libelle or "" - infos["parcours_code"] = parcour.code or "" - refcomp = parcour.referentiel - if refcomp: - infos["refcomp_specialite"] = refcomp.specialite - infos["refcomp_specialite_long"] = refcomp.specialite_long + infos.update(dict_infos_parcours_etud(etudid, formsemestre)) # Décision: valeurs par defaut vides: infos["decision_jury"] = infos["descr_decision_jury"] = "" diff --git a/app/scodoc/sco_pv_lettres_inviduelles.py b/app/scodoc/sco_pv_lettres_inviduelles.py index 053eed1bfdcb98ec0ee6f317d0dd7d98a181c98c..888b90459370e83cde95629416e56f3381713ffb 100644 --- a/app/scodoc/sco_pv_lettres_inviduelles.py +++ b/app/scodoc/sco_pv_lettres_inviduelles.py @@ -46,6 +46,7 @@ from app import db from app.models import FormSemestre, Identite, ValidationDUT120 import app.scodoc.sco_utils as scu +from app.scodoc import sco_bulletins from app.scodoc import sco_bulletins_pdf from app.scodoc import sco_pv_dict from app.scodoc import sco_pdf @@ -96,6 +97,8 @@ def pdf_lettres_individuelles( ): # decision prise etud = Identite.get_etud(decision["identite"]["etudid"]) params["nomEtud"] = etud.nomprenom # backward compat + params.update(sco_bulletins.dict_infos_parcours_etud(etud.id, formsemestre)) + bookmarks[npages + 1] = scu.suppress_accents(etud.nomprenom) try: objects += pdf_lettre_individuelle(