1
0
forked from ScoDoc/ScoDoc

API: bulletins PDF sans signatures

This commit is contained in:
Emmanuel Viennet 2023-02-15 16:15:53 +01:00
parent 88b06f11d0
commit abcb3d0fd2
4 changed files with 32 additions and 8 deletions

View File

@ -219,6 +219,10 @@ def etudiant_formsemestres(etudid: int = None, nip: int = None, ine: int = None)
"/etudiant/<string:code_type>/<string:code>/formsemestre/<int:formsemestre_id>/bulletin/<string:version>/pdf",
defaults={"pdf": True},
)
@bp.route(
"/etudiant/<string:code_type>/<string:code>/formsemestre/<int:formsemestre_id>/bulletin/<string:version>/pdf/nosig",
defaults={"pdf": True, "with_img_signatures_pdf": False},
)
@api_web_bp.route(
"/etudiant/<string:code_type>/<string:code>/formsemestre/<int:formsemestre_id>/bulletin",
)
@ -229,6 +233,10 @@ def etudiant_formsemestres(etudid: int = None, nip: int = None, ine: int = None)
"/etudiant/<string:code_type>/<string:code>/formsemestre/<int:formsemestre_id>/bulletin/<string:version>/pdf",
defaults={"pdf": True},
)
@api_web_bp.route(
"/etudiant/<string:code_type>/<string:code>/formsemestre/<int:formsemestre_id>/bulletin/<string:version>/pdf/nosig",
defaults={"pdf": True, "with_img_signatures_pdf": False},
)
@scodoc
@permission_required(Permission.ScoView)
def bulletin(
@ -237,6 +245,7 @@ def bulletin(
formsemestre_id: int = None,
version: str = "long",
pdf: bool = False,
with_img_signatures_pdf: bool = True,
):
"""
Retourne le bulletin d'un étudiant en fonction de son id et d'un semestre donné
@ -276,7 +285,11 @@ def bulletin(
return json_error(404, message="etudiant inexistant")
if pdf:
pdf_response, _ = do_formsemestre_bulletinetud(
formsemestre, etud.id, version=version, format="pdf"
formsemestre,
etud.id,
version=version,
format="pdf",
with_img_signatures_pdf=with_img_signatures_pdf,
)
return pdf_response
return sco_bulletins.get_formsemestre_bulletin_etud_json(

View File

@ -951,9 +951,10 @@ def do_formsemestre_bulletinetud(
etudid: int,
version="long", # short, long, selectedevals
format=None,
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
xml_with_decisions: bool = False,
force_publishing: bool = False,
prefer_mail_perso: bool = False,
with_img_signatures_pdf: bool = True,
):
"""Génère le bulletin au format demandé.
Utilisé pour:
@ -961,6 +962,12 @@ def do_formsemestre_bulletinetud(
- 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)
Options:
- xml_with_decisions: force décisions dans XML
- force_publishing: force publication meme si semestre non publié sur "portail"
- prefer_mail_perso: mails envoyés sur adresse perso si non vide
- with_img_signatures_pdf: si faux, ne met pas les signatures dans le footer PDF.
Résultat: (bul, filigranne)
bul est str ou bytes au format demandé (html, pdf, pdfmail, pdfpart, xml, json)
et filigranne est un message à placer en "filigranne" (eg "Provisoire").
@ -1009,6 +1016,7 @@ def do_formsemestre_bulletinetud(
version=version,
format="pdf",
stand_alone=(format != "pdfpart"),
with_img_signatures_pdf=with_img_signatures_pdf,
)
if format == "pdf":
return (

View File

@ -88,6 +88,7 @@ class BulletinGenerator:
version="long",
filigranne=None,
server_name=None,
with_img_signatures_pdf: bool = True,
):
from app.scodoc import sco_preferences
@ -98,6 +99,7 @@ class BulletinGenerator:
self.version = version
self.filigranne = filigranne
self.server_name = server_name
self.with_img_signatures_pdf = with_img_signatures_pdf
# Store preferences for convenience:
formsemestre_id = self.infos["formsemestre_id"]
self.preferences = sco_preferences.SemPreferences(formsemestre_id)
@ -249,6 +251,7 @@ def make_formsemestre_bulletinetud(
version=None, # short, long, selectedevals
format="pdf", # html, pdf
stand_alone=True,
with_img_signatures_pdf: bool = True,
):
"""Bulletin de notes
@ -277,9 +280,7 @@ def make_formsemestre_bulletinetud(
gen_class = bulletin_get_class(bul_class_name)
if gen_class is None:
raise ValueError(
"Type de bulletin PDF invalide (paramètre: %s)" % bul_class_name
)
raise ValueError(f"Type de bulletin PDF invalide (paramètre: {bul_class_name})")
try:
PDFLOCK.acquire()
@ -289,6 +290,7 @@ def make_formsemestre_bulletinetud(
version=version,
filigranne=infos["filigranne"],
server_name=request.url_root,
with_img_signatures_pdf=with_img_signatures_pdf,
)
if format not in bul_generator.supported_formats:
# use standard generator
@ -304,6 +306,7 @@ def make_formsemestre_bulletinetud(
version=version,
filigranne=infos["filigranne"],
server_name=request.url_root,
with_img_signatures_pdf=with_img_signatures_pdf,
)
data = bul_generator.generate(format=format, stand_alone=stand_alone)

View File

@ -213,7 +213,7 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator):
"""
show_left = self.preferences["bul_show_sig_left"]
show_right = self.preferences["bul_show_sig_right"]
if show_left or show_right:
if self.with_img_signatures_pdf and (show_left or show_right):
if show_left:
L = [
[