From 689b8610bfc5c5addf40417c48b3ecfc6dc3effa Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Wed, 6 Dec 2023 20:40:55 +0100 Subject: [PATCH] Envoi par mail des bulletins PDF courts --- app/but/bulletin_but.py | 4 ++-- app/but/bulletin_but_court.py | 8 +++++-- app/scodoc/sco_archives.py | 6 +++-- app/scodoc/sco_bulletins.py | 24 ++++++++++++++----- app/scodoc/sco_bulletins_pdf.py | 4 +++- app/views/notes.py | 41 ++++++++++++++++++++------------- 6 files changed, 58 insertions(+), 29 deletions(-) diff --git a/app/but/bulletin_but.py b/app/but/bulletin_but.py index 8bdab7b48f..e25074ad1d 100644 --- a/app/but/bulletin_but.py +++ b/app/but/bulletin_but.py @@ -345,8 +345,8 @@ class BulletinBUT: - Si force_publishing, rempli le bulletin même si bul_hide_xml est vrai (bulletins non publiés). """ - if version not in scu.BULLETINS_VERSIONS: - raise ScoValueError("version de bulletin demandée invalide") + if version not in scu.BULLETINS_VERSIONS_BUT: + raise ScoValueError("bulletin_etud: version de bulletin demandée invalide") res = self.res formsemestre = res.formsemestre etat_inscription = etud.inscription_etat(formsemestre.id) diff --git a/app/but/bulletin_but_court.py b/app/but/bulletin_but_court.py index 59f77b20bd..9010ae350f 100644 --- a/app/but/bulletin_but_court.py +++ b/app/but/bulletin_but_court.py @@ -83,12 +83,16 @@ def bulletin_but(formsemestre_id: int, etudid: int = None, fmt="html"): ) -def bulletin_but_court_pdf_frag(etud: Identite, formsemestre: FormSemestre) -> bytes: +def bulletin_but_court_pdf_frag( + etud: Identite, formsemestre: FormSemestre, stand_alone=False +) -> bytes: """Le code PDF d'un bulletin BUT court, à intégrer dans un document (pour les classeurs de tous les bulletins) """ args = _build_bulletin_but_infos(etud, formsemestre) - return bulletin_but_court_pdf.make_bulletin_but_court_pdf(args, stand_alone=False) + return bulletin_but_court_pdf.make_bulletin_but_court_pdf( + args, stand_alone=stand_alone + ) def _build_bulletin_but_infos( diff --git a/app/scodoc/sco_archives.py b/app/scodoc/sco_archives.py index 05e75f1f1c..8d91bbcf1c 100644 --- a/app/scodoc/sco_archives.py +++ b/app/scodoc/sco_archives.py @@ -346,7 +346,9 @@ def do_formsemestre_archive( ) if bul_version not in scu.BULLETINS_VERSIONS: - raise ScoValueError("version de bulletin demandée invalide") + raise ScoValueError( + "do_formsemestre_archive: version de bulletin demandée invalide" + ) formsemestre = FormSemestre.get_formsemestre(formsemestre_id) res: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre) sem_archive_id = formsemestre_id @@ -505,7 +507,7 @@ enregistrés et non modifiables, on peut les retrouver ultérieurement. """, ] F = [ - f"""

Note: les documents sont aussi affectés par les réglages sur la page + f"""

Note: les documents sont aussi affectés par les réglages sur la page "Paramétrage" diff --git a/app/scodoc/sco_bulletins.py b/app/scodoc/sco_bulletins.py index e0b64eb5c0..82d8da5aa6 100644 --- a/app/scodoc/sco_bulletins.py +++ b/app/scodoc/sco_bulletins.py @@ -513,8 +513,8 @@ def _ue_mod_bulletin( sco_users.user_info(modimpl["responsable_id"])["nomcomplet"], ) link_mod = f"""""" @@ -576,7 +576,7 @@ def _ue_mod_bulletin( "name" ] = f"""{e.description or ""} { e.descr_date() - if e.date_debut and not is_complete + if e.date_debut and not is_complete else ""}""" e_dict["target_html"] = url_for( "notes.evaluation_listenotes", @@ -985,6 +985,8 @@ def do_formsemestre_bulletinetud( où bul est str ou bytes au format demandé (html, pdf, pdfmail, pdfpart, xml, json) et filigranne est un message à placer en "filigranne" (eg "Provisoire"). """ + from app.but import bulletin_but_court + fmt = fmt or "html" if fmt == "xml": bul = sco_bulletins_xml.make_xml_formsemestre_bulletinetud( @@ -1045,9 +1047,19 @@ def do_formsemestre_bulletinetud( if not can_send_bulletin_by_mail(formsemestre.id): raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !") - pdfdata, filename = sco_bulletins_generator.make_formsemestre_bulletin_etud( - bul_dict, etud=etud, formsemestre=formsemestre, version=version, fmt="pdf" - ) + if version == "butcourt": + pdfdata = bulletin_but_court.bulletin_but_court_pdf_frag( + etud, formsemestre, stand_alone=True + ) + filename = scu.bul_filename(formsemestre, etud, prefix="bul-court") + else: + pdfdata, filename = sco_bulletins_generator.make_formsemestre_bulletin_etud( + bul_dict, + etud=etud, + formsemestre=formsemestre, + version=version, + fmt="pdf", + ) if prefer_mail_perso: recipient_addr = ( diff --git a/app/scodoc/sco_bulletins_pdf.py b/app/scodoc/sco_bulletins_pdf.py index 658bcf50f7..cf0d1348cb 100644 --- a/app/scodoc/sco_bulletins_pdf.py +++ b/app/scodoc/sco_bulletins_pdf.py @@ -222,7 +222,9 @@ def get_formsemestre_bulletins_pdf(formsemestre_id, version="selectedevals"): else scu.BULLETINS_VERSIONS ) if version not in versions: - raise ScoValueError("version de bulletin demandée invalide !") + raise ScoValueError( + "get_formsemestre_bulletins_pdf: version de bulletin demandée invalide !" + ) cached = sco_cache.SemBulletinsPDFCache.get(str(formsemestre_id) + "_" + version) if cached: return cached[1], cached[0] diff --git a/app/views/notes.py b/app/views/notes.py index c6f8f5482a..b7fbbd9156 100644 --- a/app/views/notes.py +++ b/app/views/notes.py @@ -288,7 +288,9 @@ def formsemestre_bulletinetud( ): fmt = fmt or "html" if version not in scu.BULLETINS_VERSIONS_BUT: - raise ScoValueError("version de bulletin demandée invalide") + raise ScoValueError( + "formsemestre_bulletinetud: version de bulletin demandée invalide" + ) if not isinstance(etudid, int): raise ScoInvalidIdType("formsemestre_bulletinetud: etudid must be an integer !") if formsemestre_id is not None and not isinstance(formsemestre_id, int): @@ -1881,13 +1883,14 @@ _EXPL_BULL = """Versions des bulletins: @scodoc7func def formsemestre_bulletins_pdf_choice(formsemestre_id, version=None): """Choix version puis envoi classeur bulletins pdf""" + formsemestre = FormSemestre.get_formsemestre(formsemestre_id) if version: pdfdoc, filename = sco_bulletins_pdf.get_formsemestre_bulletins_pdf( formsemestre_id, version=version ) return scu.sendPDFFile(pdfdoc, filename) - return formsemestre_bulletins_choice( - formsemestre_id, + return _formsemestre_bulletins_choice( + formsemestre, title="Choisir la version des bulletins à générer", explanation=_EXPL_BULL, ) @@ -1900,7 +1903,7 @@ def formsemestre_bulletins_pdf_choice(formsemestre_id, version=None): def etud_bulletins_pdf(etudid, version="selectedevals"): "Publie tous les bulletins d'un etudiants dans un classeur PDF" if version not in scu.BULLETINS_VERSIONS: - raise ScoValueError("version de bulletin demandée invalide") + raise ScoValueError("etud_bulletins_pdf: version de bulletin demandée invalide") pdfdoc, filename = sco_bulletins_pdf.get_etud_bulletins_pdf(etudid, version=version) return scu.sendPDFFile(pdfdoc, filename) @@ -1927,15 +1930,20 @@ def formsemestre_bulletins_mailetuds_choice( prefer_mail_perso=prefer_mail_perso, ) ) - + formsemestre = FormSemestre.get_formsemestre(formsemestre_id) expl_bull = """Versions des bulletins: