forked from ScoDoc/ScoDoc
WIP: Bulletins BUT courts pdf
This commit is contained in:
parent
2227c85250
commit
01bf344270
@ -4,11 +4,9 @@
|
||||
# See LICENSE
|
||||
##############################################################################
|
||||
|
||||
"""Génération bulletin BUT synthétique en une page
|
||||
"""Génération bulletin BUT HTML synthétique en une page
|
||||
|
||||
On génère du HTML. Il sera si possible traduit en PDF par weasyprint.
|
||||
|
||||
Le HTML est lui même généré à partir d'un template Jinja.
|
||||
On génère du HTML à partir d'un template Jinja.
|
||||
|
||||
## Données
|
||||
|
||||
|
@ -213,7 +213,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
|
||||
self.ue_std_rows(rows, ue, title_bg)
|
||||
|
||||
@staticmethod
|
||||
def affichage_bonus_malus(ue: dict) -> list:
|
||||
def affichage_bonus_malus(ue: dict) -> list[str]:
|
||||
"liste de chaînes affichant les bonus et malus"
|
||||
fields_bmr = []
|
||||
# lecture des bonus sport culture et malus (ou bonus autre) (0 si valeur non numérique)
|
||||
try:
|
||||
|
@ -31,15 +31,15 @@
|
||||
Tout accès à ReportLab doit donc être précédé d'un PDFLOCK.acquire()
|
||||
et terminé par un PDFLOCK.release()
|
||||
|
||||
En ScoDoc 9, ce n'est pas nécessaire car on est multiptocessus / monothread.
|
||||
En ScoDoc 9, ce n'est pas nécessaire car on est multiprocessus / monothread.
|
||||
"""
|
||||
import datetime
|
||||
import html
|
||||
import io
|
||||
import os
|
||||
import queue
|
||||
import re
|
||||
import threading
|
||||
import time
|
||||
import traceback
|
||||
import unicodedata
|
||||
|
||||
@ -345,7 +345,7 @@ class ScoDocPageTemplate(PageTemplate):
|
||||
|
||||
def footer_string(self) -> str:
|
||||
"""String contenu du pied de page"""
|
||||
d = _makeTimeDict()
|
||||
d = _make_datetime_dict()
|
||||
d["scodoc_name"] = sco_version.SCONAME
|
||||
d["server_url"] = self.server_name
|
||||
return SU(self.footer_template % d)
|
||||
@ -410,15 +410,16 @@ class BulletinDocTemplate(BaseDocTemplate):
|
||||
self.filigranne = flowable.filigranne
|
||||
|
||||
|
||||
def _makeTimeDict():
|
||||
# ... suboptimal but we don't care
|
||||
def _make_datetime_dict() -> dict:
|
||||
"a dict with date elements for templates"
|
||||
now = datetime.datetime.now()
|
||||
return {
|
||||
"day": time.strftime("%d"),
|
||||
"month": time.strftime("%m"),
|
||||
"year": time.strftime("%y"),
|
||||
"Year": time.strftime("%Y"),
|
||||
"hour": time.strftime("%H"),
|
||||
"minute": time.strftime("%M"),
|
||||
"day": now.day,
|
||||
"month": now.month,
|
||||
"year": now.year,
|
||||
"Year": now.year,
|
||||
"hour": now.hour,
|
||||
"minute": now.minute,
|
||||
}
|
||||
|
||||
|
||||
|
@ -1347,40 +1347,40 @@ def confirm_dialog(
|
||||
def objects_renumber(db, obj_list) -> None:
|
||||
"""fixe les numeros des objets d'une liste de modèles
|
||||
pour ne pas changer son ordre"""
|
||||
log(f"objects_renumber")
|
||||
log("objects_renumber")
|
||||
for i, obj in enumerate(obj_list):
|
||||
obj.numero = i
|
||||
db.session.add(obj)
|
||||
db.session.commit()
|
||||
|
||||
|
||||
def comp_ranks(T: list[tuple]) -> dict[int, str]:
|
||||
def comp_ranks(tab: list[tuple]) -> dict[int, str]:
|
||||
"""Calcul rangs à partir d'une liste ordonnée de tuples [ (valeur, ..., etudid) ]
|
||||
(valeur est une note numérique), en tenant compte des ex-aequos
|
||||
Le resultat est: { etudid : rang } où rang est une chaine decrivant le rang
|
||||
"""
|
||||
rangs = {} # { etudid : rang } (rang est une chaine)
|
||||
nb_ex = 0 # nb d'ex-aequo consécutifs en cours
|
||||
for i in range(len(T)):
|
||||
for i, row in enumerate(tab):
|
||||
# test ex-aequo
|
||||
if i < len(T) - 1:
|
||||
next = T[i + 1][0]
|
||||
if i < len(tab) - 1:
|
||||
next_val = tab[i + 1][0]
|
||||
else:
|
||||
next = None
|
||||
moy = T[i][0]
|
||||
next_val = None
|
||||
moy = row[0]
|
||||
if nb_ex:
|
||||
srang = "%d ex" % (i + 1 - nb_ex)
|
||||
if moy == next:
|
||||
if moy == next_val:
|
||||
nb_ex += 1
|
||||
else:
|
||||
nb_ex = 0
|
||||
else:
|
||||
if moy == next:
|
||||
if moy == next_val:
|
||||
srang = "%d ex" % (i + 1 - nb_ex)
|
||||
nb_ex = 1
|
||||
else:
|
||||
srang = "%d" % (i + 1)
|
||||
rangs[T[i][-1]] = srang # str(i+1)
|
||||
rangs[row[-1]] = srang
|
||||
return rangs
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user