############################################################################## # ScoDoc # Copyright (c) 1999 - 2022 Emmanuel Viennet. All rights reserved. # See LICENSE ############################################################################## """Génération bulletin BUT au format PDF standard """ import datetime from app.scodoc.sco_pdf import blue, cm, mm from flask import url_for, g from app.models.formsemestre import FormSemestre from app.scodoc import gen_tables from app.scodoc import sco_utils as scu from app.scodoc import sco_bulletins_json from app.scodoc import sco_preferences from app.scodoc.sco_codes_parcours import UE_SPORT from app.scodoc.sco_utils import fmt_note from app.comp.res_but import ResultatsSemestreBUT from app.scodoc.sco_bulletins_standard import BulletinGeneratorStandard class BulletinGeneratorStandardBUT(BulletinGeneratorStandard): """Génération du bulletin de BUT au format PDF. self.infos est le dict issu de BulletinBUT.bulletin_etud_complet() """ list_in_menu = False # spécialisation du BulletinGeneratorStandard, ne pas présenter à l'utilisateur def bul_table(self, format="html"): """Génère la table centrale du bulletin de notes Renvoie: - en HTML: une chaine - en PDF: une liste d'objets PLATYPUS (eg instance de Table). """ formsemestre_id = self.infos["formsemestre_id"] ( synth_col_keys, synth_P, synth_pdf_style, synth_col_widths, ) = self.but_table_synthese() # table_synthese = gen_tables.GenTable( rows=synth_P, columns_ids=synth_col_keys, pdf_table_style=synth_pdf_style, pdf_col_widths=[synth_col_widths[k] for k in synth_col_keys], preferences=self.preferences, html_class="notes_bulletin", html_class_ignore_default=True, html_with_td_classes=True, ) # Ici on ajoutera table des ressources, tables des UE # TODO # XXX à modifier pour générer plusieurs tables: return table_synthese.gen(format=format) def but_table_synthese(self): """La table de synthèse; pour chaque UE, liste des ressources et SAÉs avec leurs notes et leurs coefs. Renvoie: colkeys, P, pdf_style, colWidths - colkeys: nom des colonnes de la table (clés) - P : table (liste de dicts de chaines de caracteres) - pdf_style : commandes table Platypus - largeurs de colonnes pour PDF """ col_widths = { "titre": None, "moyenne": 2 * cm, "coef": 2 * cm, } P = [] # elems pour générer table avec gen_table (liste de dicts) col_keys = ["titre", "moyenne"] # noms des colonnes à afficher for ue_acronym, ue in self.infos["ues"].items(): # 1er ligne titre UE moy_ue = ue.get("moyenne") t = { "titre": f"{ue_acronym} - {ue['titre']}", "moyenne": moy_ue.get("value", "-") if moy_ue is not None else "-", "_css_row_class": "note_bold", "_pdf_row_markup": ["b"], "_pdf_style": [], } P.append(t) # 2eme ligne titre UE (bonus/malus/ects) t = { "titre": "", "moyenne": f"""Bonus: {ue['bonus']} - Malus: { ue["malus"]} - ECTS: {ue["ECTS"]["acquis"]} / {ue["ECTS"]["total"]}""", "_css_row_class": "note_bold", "_pdf_row_markup": ["b"], "_pdf_style": [ ( "LINEBELOW", (0, 0), (-1, 0), self.PDF_LINEWIDTH, self.PDF_LINECOLOR, ) ], } P.append(t) # Global pdf style commands: pdf_style = [ ("VALIGN", (0, 0), (-1, -1), "TOP"), ("BOX", (0, 0), (-1, -1), 0.4, blue), # ajoute cadre extérieur bleu: ] return col_keys, P, pdf_style, col_widths