forked from ScoDoc/ScoDoc
Bul. BUT PDF: affichage UE bonus avec détails
This commit is contained in:
parent
9b08357893
commit
2770db1bee
@ -11,6 +11,7 @@ from reportlab.platypus import Paragraph, Spacer
|
|||||||
from app.scodoc.sco_pdf import blue, cm, mm
|
from app.scodoc.sco_pdf import blue, cm, mm
|
||||||
|
|
||||||
from app.scodoc import gen_tables
|
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_utils import fmt_note
|
||||||
|
|
||||||
from app.scodoc.sco_bulletins_standard import BulletinGeneratorStandard
|
from app.scodoc.sco_bulletins_standard import BulletinGeneratorStandard
|
||||||
@ -116,86 +117,7 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
|
|||||||
]
|
]
|
||||||
col_keys = ["titre", "coef", "moyenne"] # noms des colonnes à afficher
|
col_keys = ["titre", "coef", "moyenne"] # noms des colonnes à afficher
|
||||||
for ue_acronym, ue in self.infos["ues"].items():
|
for ue_acronym, ue in self.infos["ues"].items():
|
||||||
# 1er ligne titre UE
|
self.ue_rows(rows, ue_acronym, ue, title_bg)
|
||||||
moy_ue = ue.get("moyenne")
|
|
||||||
t = {
|
|
||||||
"titre": f"{ue_acronym} - {ue['titre']}",
|
|
||||||
"moyenne": Paragraph(
|
|
||||||
f"""<para align=right><b>{moy_ue.get("value", "-") if moy_ue is not None else "-"}</b></para>"""
|
|
||||||
),
|
|
||||||
"_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"""<para align=left>{ects_txt}</para>"""),
|
|
||||||
"_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'<para align=right>{mod["moyenne"]}</para>'
|
|
||||||
),
|
|
||||||
"coef": mod["coef"],
|
|
||||||
"_coef_pdf": Paragraph(
|
|
||||||
f"<para align=right><i>{mod['coef']}</i></para>"
|
|
||||||
),
|
|
||||||
"_pdf_style": [
|
|
||||||
(
|
|
||||||
"LINEBELOW",
|
|
||||||
(0, 0),
|
|
||||||
(-1, 0),
|
|
||||||
self.PDF_LINEWIDTH,
|
|
||||||
(0.7, 0.7, 0.7), # gris clair
|
|
||||||
)
|
|
||||||
],
|
|
||||||
}
|
|
||||||
rows.append(t)
|
|
||||||
# Global pdf style commands:
|
# Global pdf style commands:
|
||||||
pdf_style = [
|
pdf_style = [
|
||||||
("VALIGN", (0, 0), (-1, -1), "TOP"),
|
("VALIGN", (0, 0), (-1, -1), "TOP"),
|
||||||
@ -203,6 +125,90 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
|
|||||||
]
|
]
|
||||||
return col_keys, rows, pdf_style, col_widths
|
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"""<para align=right><b>{moy_ue.get("value", "-") if moy_ue is not None else "-"}</b></para>"""
|
||||||
|
),
|
||||||
|
"_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"""<para align=left>{ects_txt}</para>"""),
|
||||||
|
"_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'<para align=right>{mod["moyenne"]}</para>'),
|
||||||
|
"coef": mod["coef"],
|
||||||
|
"_coef_pdf": Paragraph(
|
||||||
|
f"<para align=right><i>{mod['coef']}</i></para>"
|
||||||
|
),
|
||||||
|
"_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):
|
def but_table_ressources(self):
|
||||||
"""La table de synthèse; pour chaque ressources, note et liste d'évaluations
|
"""La table de synthèse; pour chaque ressources, note et liste d'évaluations
|
||||||
Renvoie: colkeys, P, pdf_style, colWidths
|
Renvoie: colkeys, P, pdf_style, colWidths
|
||||||
@ -227,7 +233,10 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
|
|||||||
- largeurs de colonnes pour PDF
|
- largeurs de colonnes pour PDF
|
||||||
"""
|
"""
|
||||||
# UE à utiliser pour les poids (# colonne/UE)
|
# 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:
|
# Colonnes à afficher:
|
||||||
col_keys = ["titre"] + ue_acros + ["coef", "moyenne"]
|
col_keys = ["titre"] + ue_acros + ["coef", "moyenne"]
|
||||||
# Largeurs des colonnes:
|
# Largeurs des colonnes:
|
||||||
@ -289,43 +298,48 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
|
|||||||
}
|
}
|
||||||
rows.append(t)
|
rows.append(t)
|
||||||
# Evaluations:
|
# Evaluations:
|
||||||
for e in mod["evaluations"]:
|
self.evaluations_rows(rows, mod["evaluations"], ue_acros)
|
||||||
t = {
|
|
||||||
"titre": f"{e['description']}",
|
|
||||||
"moyenne": e["note"]["value"],
|
|
||||||
"coef": e["coef"],
|
|
||||||
"_coef_pdf": Paragraph(
|
|
||||||
f"<para align=right fontSize={self.small_fontsize}><i>{e['coef']}</i></para>"
|
|
||||||
),
|
|
||||||
"_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"""<para align=right fontSize={self.small_fontsize}><i>{e["poids"].get(ue_acro, "") or ""}</i></para>"""
|
|
||||||
)
|
|
||||||
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)
|
|
||||||
# Global pdf style commands:
|
# Global pdf style commands:
|
||||||
pdf_style = [
|
pdf_style = [
|
||||||
("VALIGN", (0, 0), (-1, -1), "TOP"),
|
("VALIGN", (0, 0), (-1, -1), "TOP"),
|
||||||
("BOX", (0, 0), (-1, -1), 0.4, blue), # ajoute cadre extérieur bleu:
|
("BOX", (0, 0), (-1, -1), 0.4, blue), # ajoute cadre extérieur bleu:
|
||||||
]
|
]
|
||||||
return col_keys, rows, pdf_style, col_widths
|
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"<para align=right fontSize={self.small_fontsize}><i>{e['coef']}</i></para>"
|
||||||
|
),
|
||||||
|
"_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"""<para align=right fontSize={self.small_fontsize}><i>{e["poids"].get(ue_acro, "") or ""}</i></para>"""
|
||||||
|
)
|
||||||
|
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)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# -*- mode: python -*-
|
# -*- mode: python -*-
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
SCOVERSION = "9.1.80"
|
SCOVERSION = "9.1.81"
|
||||||
|
|
||||||
SCONAME = "ScoDoc"
|
SCONAME = "ScoDoc"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user