diff --git a/app/but/bulletin_but_pdf.py b/app/but/bulletin_but_pdf.py
index ea4610cb..3cdf6264 100644
--- a/app/but/bulletin_but_pdf.py
+++ b/app/but/bulletin_but_pdf.py
@@ -11,6 +11,7 @@ from reportlab.platypus import Paragraph, Spacer
from app.scodoc.sco_pdf import blue, cm, mm
from app.scodoc import gen_tables
+from app.scodoc.sco_codes_parcours import UE_SPORT
from app.scodoc.sco_utils import fmt_note
from app.scodoc.sco_bulletins_standard import BulletinGeneratorStandard
@@ -116,86 +117,7 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
]
col_keys = ["titre", "coef", "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": Paragraph(
- f"""{moy_ue.get("value", "-") if moy_ue is not None else "-"}"""
- ),
- "_css_row_class": "note_bold",
- "_pdf_row_markup": ["b"],
- "_pdf_style": [
- (
- "LINEABOVE",
- (0, 0),
- (-1, 0),
- self.PDF_LINEWIDTH,
- self.PDF_LINECOLOR,
- ),
- ("BACKGROUND", (0, 0), (-1, 0), title_bg),
- ("BOTTOMPADDING", (0, 0), (-1, 0), 7),
- ],
- }
- rows.append(t)
- # 2eme ligne titre UE (bonus/malus/ects)
- if "ECTS" in ue:
- ects_txt = (
- f'ECTS: {ue["ECTS"]["acquis"]:.3g} / {ue["ECTS"]["total"]:.3g}'
- )
- else:
- ects_txt = ""
- t = {
- "titre": f"""Bonus: {ue['bonus']} - Malus: {
- ue["malus"]}""",
- "coef": ects_txt,
- "_coef_pdf": Paragraph(f"""{ects_txt}"""),
- "_coef_colspan": 2,
- # "_css_row_class": "",
- # "_pdf_row_markup": [""],
- "_pdf_style": [
- ("BACKGROUND", (0, 0), (-1, 0), title_bg),
- (
- "LINEBELOW",
- (0, 0),
- (-1, 0),
- self.PDF_LINEWIDTH,
- self.PDF_LINECOLOR,
- ),
- # cadre autour du bonus/malus
- (
- "BOX",
- (0, 0),
- (0, 0),
- self.PDF_LINEWIDTH,
- (0.7, 0.7, 0.7), # gris clair
- ),
- ],
- }
- rows.append(t)
- # Liste chaque ressource puis SAE
- for mod_type in ("ressources", "saes"):
- for mod_code, mod in ue[mod_type].items():
- t = {
- "titre": f"{mod_code} {self.infos[mod_type][mod_code]['titre']}",
- "moyenne": Paragraph(
- f'{mod["moyenne"]}'
- ),
- "coef": mod["coef"],
- "_coef_pdf": Paragraph(
- f"{mod['coef']}"
- ),
- "_pdf_style": [
- (
- "LINEBELOW",
- (0, 0),
- (-1, 0),
- self.PDF_LINEWIDTH,
- (0.7, 0.7, 0.7), # gris clair
- )
- ],
- }
- rows.append(t)
+ self.ue_rows(rows, ue_acronym, ue, title_bg)
# Global pdf style commands:
pdf_style = [
("VALIGN", (0, 0), (-1, -1), "TOP"),
@@ -203,6 +125,90 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
]
return col_keys, rows, pdf_style, col_widths
+ def ue_rows(self, rows: list, ue_acronym: str, ue: dict, title_bg: tuple):
+ "Décrit une UE dans la table synthèse: titre, sous-titre et liste modules"
+ # 1er ligne titre UE
+ moy_ue = ue.get("moyenne")
+ t = {
+ "titre": f"{ue_acronym} - {ue['titre']}",
+ "moyenne": Paragraph(
+ f"""{moy_ue.get("value", "-") if moy_ue is not None else "-"}"""
+ ),
+ "_css_row_class": "note_bold",
+ "_pdf_row_markup": ["b"],
+ "_pdf_style": [
+ (
+ "LINEABOVE",
+ (0, 0),
+ (-1, 0),
+ self.PDF_LINEWIDTH,
+ self.PDF_LINECOLOR,
+ ),
+ ("BACKGROUND", (0, 0), (-1, 0), title_bg),
+ ("BOTTOMPADDING", (0, 0), (-1, 0), 7),
+ ],
+ }
+ rows.append(t)
+ if ue["type"] == UE_SPORT:
+ self.ue_sport_rows(rows, ue, title_bg)
+ else:
+ self.ue_std_rows(rows, ue, title_bg)
+
+ def ue_std_rows(self, rows: list, ue: dict, title_bg: tuple):
+ "Lignes décrivant une UE standard dans la table de synthèse"
+ # 2eme ligne titre UE (bonus/malus/ects)
+ if "ECTS" in ue:
+ ects_txt = f'ECTS: {ue["ECTS"]["acquis"]:.3g} / {ue["ECTS"]["total"]:.3g}'
+ else:
+ ects_txt = ""
+ t = {
+ "titre": f"""Bonus: {ue['bonus']} - Malus: {
+ ue["malus"]}""",
+ "coef": ects_txt,
+ "_coef_pdf": Paragraph(f"""{ects_txt}"""),
+ "_coef_colspan": 2,
+ "_pdf_style": [
+ ("BACKGROUND", (0, 0), (-1, 0), title_bg),
+ ("LINEBELOW", (0, 0), (-1, 0), self.PDF_LINEWIDTH, self.PDF_LINECOLOR),
+ # cadre autour du bonus/malus, gris clair
+ ("BOX", (0, 0), (0, 0), self.PDF_LINEWIDTH, (0.7, 0.7, 0.7)),
+ ],
+ }
+ rows.append(t)
+
+ # Liste chaque ressource puis chaque SAE
+ for mod_type in ("ressources", "saes"):
+ for mod_code, mod in ue[mod_type].items():
+ t = {
+ "titre": f"{mod_code} {self.infos[mod_type][mod_code]['titre']}",
+ "moyenne": Paragraph(f'{mod["moyenne"]}'),
+ "coef": mod["coef"],
+ "_coef_pdf": Paragraph(
+ f"{mod['coef']}"
+ ),
+ "_pdf_style": [
+ (
+ "LINEBELOW",
+ (0, 0),
+ (-1, 0),
+ self.PDF_LINEWIDTH,
+ (0.7, 0.7, 0.7), # gris clair
+ )
+ ],
+ }
+ rows.append(t)
+
+ def ue_sport_rows(self, rows: list, ue: dict, title_bg: tuple):
+ "Lignes décrivant l'UE bonus dans la table de synthèse"
+ # UE BONUS
+ for mod_code, mod in ue["modules"].items():
+ rows.append(
+ {
+ "titre": f"{mod_code} {mod['titre']}",
+ }
+ )
+ self.evaluations_rows(rows, mod["evaluations"])
+
def but_table_ressources(self):
"""La table de synthèse; pour chaque ressources, note et liste d'évaluations
Renvoie: colkeys, P, pdf_style, colWidths
@@ -227,7 +233,10 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
- largeurs de colonnes pour PDF
"""
# UE à utiliser pour les poids (# colonne/UE)
- ue_acros = list(self.infos["ues"].keys()) # ['RT1.1', 'RT2.1', 'RT3.1']
+ ue_infos = self.infos["ues"]
+ ue_acros = list(
+ [k for k in ue_infos if ue_infos[k]["type"] != UE_SPORT]
+ ) # ['RT1.1', 'RT2.1', 'RT3.1']
# Colonnes à afficher:
col_keys = ["titre"] + ue_acros + ["coef", "moyenne"]
# Largeurs des colonnes:
@@ -289,43 +298,48 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
}
rows.append(t)
# Evaluations:
- for e in mod["evaluations"]:
- t = {
- "titre": f"{e['description']}",
- "moyenne": e["note"]["value"],
- "coef": e["coef"],
- "_coef_pdf": Paragraph(
- f"{e['coef']}"
- ),
- "_pdf_style": [
- (
- "LINEBELOW",
- (0, 0),
- (-1, 0),
- self.PDF_LINEWIDTH,
- (0.7, 0.7, 0.7), # gris clair
- )
- ],
- }
- col_idx = 1 # 1ere col. poids
- for ue_acro in ue_acros:
- t[ue_acro] = Paragraph(
- f"""{e["poids"].get(ue_acro, "") or ""}"""
- )
- t["_pdf_style"].append(
- (
- "BOX",
- (col_idx, 0),
- (col_idx, 0),
- self.PDF_LINEWIDTH,
- (0.7, 0.7, 0.7), # gris clair
- ),
- )
- col_idx += 1
- rows.append(t)
+ self.evaluations_rows(rows, mod["evaluations"], ue_acros)
+
# 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, rows, pdf_style, col_widths
+
+ def evaluations_rows(self, rows, evaluations, ue_acros=()):
+ "lignes des évaluations"
+ for e in evaluations:
+ t = {
+ "titre": f"{e['description']}",
+ "moyenne": e["note"]["value"],
+ "coef": e["coef"],
+ "_coef_pdf": Paragraph(
+ f"{e['coef']}"
+ ),
+ "_pdf_style": [
+ (
+ "LINEBELOW",
+ (0, 0),
+ (-1, 0),
+ self.PDF_LINEWIDTH,
+ (0.7, 0.7, 0.7), # gris clair
+ )
+ ],
+ }
+ col_idx = 1 # 1ere col. poids
+ for ue_acro in ue_acros:
+ t[ue_acro] = Paragraph(
+ f"""{e["poids"].get(ue_acro, "") or ""}"""
+ )
+ t["_pdf_style"].append(
+ (
+ "BOX",
+ (col_idx, 0),
+ (col_idx, 0),
+ self.PDF_LINEWIDTH,
+ (0.7, 0.7, 0.7), # gris clair
+ ),
+ )
+ col_idx += 1
+ rows.append(t)
diff --git a/sco_version.py b/sco_version.py
index d586d608..e962db1f 100644
--- a/sco_version.py
+++ b/sco_version.py
@@ -1,7 +1,7 @@
# -*- mode: python -*-
# -*- coding: utf-8 -*-
-SCOVERSION = "9.1.80"
+SCOVERSION = "9.1.81"
SCONAME = "ScoDoc"