From 2e2338af631064a4abe552ae3d18f362b0511977 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 22 Mar 2022 19:18:25 +0100 Subject: [PATCH] Envoi bulletins PDF par mail. --- app/scodoc/sco_bulletins.py | 42 ++++++++-------------------- app/scodoc/sco_bulletins_standard.py | 8 ++---- app/views/notes.py | 25 +++++++++++------ 3 files changed, 31 insertions(+), 44 deletions(-) diff --git a/app/scodoc/sco_bulletins.py b/app/scodoc/sco_bulletins.py index 46101451eb..c4b10c0177 100644 --- a/app/scodoc/sco_bulletins.py +++ b/app/scodoc/sco_bulletins.py @@ -32,7 +32,7 @@ import email import time from flask import g, request -from flask import render_template, url_for +from flask import flash, render_template, url_for from flask_login import current_user from app import email @@ -817,7 +817,8 @@ def formsemestre_bulletinetud( if format not in {"html", "pdfmail"}: filename = scu.bul_filename(formsemestre, etud, format) return scu.send_file(bulletin, filename, mime=scu.get_mime_suffix(format)[0]) - + elif format == "pdfmail": + return "" H = [ _formsemestre_bulletinetud_header_html(etud, formsemestre, format, version), bulletin, @@ -851,7 +852,6 @@ def do_formsemestre_bulletinetud( etudid: int, version="long", # short, long, selectedevals format=None, - nohtml=False, xml_with_decisions=False, # force décisions dans XML force_publishing=False, # force publication meme si semestre non publié sur "portail" prefer_mail_perso=False, # mails envoyés sur adresse perso si non vide @@ -918,13 +918,6 @@ 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 !") - if nohtml: - htm = "" # speed up if html version not needed - else: - htm, _ = sco_bulletins_generator.make_formsemestre_bulletinetud( - I, version=version, format="html" - ) - pdfdata, filename = sco_bulletins_generator.make_formsemestre_bulletinetud( I, version=version, format="pdf" ) @@ -935,28 +928,15 @@ def do_formsemestre_bulletinetud( recipient_addr = etud.get("email", "") or etud.get("emailperso", "") if not recipient_addr: - if nohtml: - h = "" # permet de compter les non-envois - else: - h = ( - "
%s n'a pas d'adresse e-mail !
" - % etud["nomprenom"] - ) + htm - return h, I["filigranne"] - # - mail_bulletin(formsemestre.id, I, pdfdata, filename, recipient_addr) - emaillink = '%s' % ( - recipient_addr, - recipient_addr, - ) - return ( - ('
Message mail envoyé à %s
' % (emaillink)) - + htm, - I["filigranne"], - ) + flash(f"{etud['nomprenom']} n'a pas d'adresse e-mail !") + return False, I["filigranne"] + else: + mail_bulletin(formsemestre.id, I, pdfdata, filename, recipient_addr) + flash(f"mail envoyé à {recipient_addr}") - else: - raise ValueError("do_formsemestre_bulletinetud: invalid format (%s)" % format) + return True, I["filigranne"] + + raise ValueError("do_formsemestre_bulletinetud: invalid format (%s)" % format) def mail_bulletin(formsemestre_id, I, pdfdata, filename, recipient_addr): diff --git a/app/scodoc/sco_bulletins_standard.py b/app/scodoc/sco_bulletins_standard.py index e42a38847d..e7c92ad781 100644 --- a/app/scodoc/sco_bulletins_standard.py +++ b/app/scodoc/sco_bulletins_standard.py @@ -49,6 +49,7 @@ Balises img: actuellement interdites. from reportlab.platypus import KeepTogether, Paragraph, Spacer, Table from reportlab.lib.units import cm, mm from reportlab.lib.colors import Color, blue +from app.models import FormSemestre from app.scodoc.sco_exceptions import ScoBugCatcher import app.scodoc.sco_utils as scu @@ -271,7 +272,7 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator): ) def build_bulletin_table(self): - """Génère la table centrale du bulletin de notes + """Génère la table centrale du bulletin de notes classique (pas BUT) Renvoie: col_keys, P, pdf_style, col_widths - col_keys: nom des colonnes de la table (clés) - table: liste de dicts de chaines de caractères @@ -417,10 +418,7 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator): # Chaque UE: for ue in I["ues"]: ue_type = None - try: - coef_ue = ue["coef_ue_txt"] if prefs["bul_show_ue_coef"] else "" - except TypeError as exc: - raise ScoBugCatcher(f"ue={ue!r}") from exc + coef_ue = ue["coef_ue_txt"] if prefs["bul_show_ue_coef"] else "" ue_descr = ue["ue_descr_txt"] rowstyle = "" diff --git a/app/views/notes.py b/app/views/notes.py index 7a9e506730..fd39f271c7 100644 --- a/app/views/notes.py +++ b/app/views/notes.py @@ -36,7 +36,7 @@ import time from xml.etree import ElementTree import flask -from flask import abort, flash, jsonify, render_template, url_for +from flask import abort, flash, jsonify, redirect, render_template, url_for from flask import current_app, g, request from flask_login import current_user from werkzeug.utils import redirect @@ -359,7 +359,7 @@ def formsemestre_bulletinetud( ) if format == "oldjson": format = "json" - return sco_bulletins.formsemestre_bulletinetud( + r = sco_bulletins.formsemestre_bulletinetud( etud, formsemestre_id=formsemestre_id, format=format, @@ -368,6 +368,16 @@ def formsemestre_bulletinetud( force_publishing=force_publishing, prefer_mail_perso=prefer_mail_perso, ) + if format == "pdfmail": + return redirect( + url_for( + "notes.formsemestre_bulletinetud", + scodoc_dept=g.scodoc_dept, + etudid=etud.id, + formsemestre_id=formsemestre_id, + ) + ) + return r sco_publish( @@ -1955,23 +1965,22 @@ def formsemestre_bulletins_mailetuds( ) # Make each bulletin - nb_send = 0 + nb_sent = 0 for etudid in etudids: - h, _ = sco_bulletins.do_formsemestre_bulletinetud( + sent, _ = sco_bulletins.do_formsemestre_bulletinetud( formsemestre, etudid, version=version, prefer_mail_perso=prefer_mail_perso, format="pdfmail", - nohtml=True, ) - if h: - nb_send += 1 + if sent: + nb_sent += 1 # return ( html_sco_header.sco_header() + '

%d bulletins sur %d envoyés par mail !

continuer

' - % (nb_send, len(etudids), formsemestre_id) + % (nb_sent, len(etudids), formsemestre_id) + html_sco_header.sco_footer() )