From b9c1eccc984ea40b2d06bc94a17e4403b1489e85 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 12 Dec 2023 15:32:47 +0100 Subject: [PATCH] =?UTF-8?q?M=C3=A9trique=20assiduit=C3=A9=20sur=20bulletin?= =?UTF-8?q?s=20pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/forms/main/config_main.py | 4 +++- app/scodoc/sco_bulletins_legacy.py | 11 ++++++----- app/scodoc/sco_bulletins_standard.py | 7 +++++-- app/scodoc/sco_preferences.py | 3 ++- app/scodoc/sco_utils.py | 14 +++++++++----- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/forms/main/config_main.py b/app/forms/main/config_main.py index f8a427da6..df8ec7df6 100644 --- a/app/forms/main/config_main.py +++ b/app/forms/main/config_main.py @@ -77,7 +77,9 @@ class ScoDocConfigurationForm(FlaskForm): Attention: si ce champ peut aussi être défini dans chaque département.""", validators=[Optional(), Email()], ) - disable_bul_pdf = BooleanField("empêcher les exports des bulletins en PDF") + disable_bul_pdf = BooleanField( + "interdire les exports des bulletins en PDF (déconseillé)" + ) submit_scodoc = SubmitField("Valider") cancel_scodoc = SubmitField("Annuler", render_kw={"formnovalidate": True}) diff --git a/app/scodoc/sco_bulletins_legacy.py b/app/scodoc/sco_bulletins_legacy.py index d8229e3cd..14ffb6cd7 100644 --- a/app/scodoc/sco_bulletins_legacy.py +++ b/app/scodoc/sco_bulletins_legacy.py @@ -262,15 +262,16 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator): # ----- ABSENCES if self.preferences["bul_show_abs"]: - nbabs = self.infos["nbabs"] - nbabsjust = self.infos["nbabsjust"] objects.append(Spacer(1, 2 * mm)) - if nbabs: + if self.infos["nbabs"]: + metrique = scu.AssiduitesMetrics.short_to_str( + self.preferences["assi_metrique"], lower_plural=True + ) objects.append( Paragraph( SU( - "%d absences (1/2 journées), dont %d justifiées." - % (nbabs, nbabsjust) + f"""{self.infos['nbabs']:g} {metrique} d'absences, dont { + self.infos['nbabsjust']:g} justifiées.""" ), self.CellStyle, ) diff --git a/app/scodoc/sco_bulletins_standard.py b/app/scodoc/sco_bulletins_standard.py index 7f6da79d8..d249f7fe6 100644 --- a/app/scodoc/sco_bulletins_standard.py +++ b/app/scodoc/sco_bulletins_standard.py @@ -143,11 +143,14 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator):

""" ) + metrique = scu.AssiduitesMetrics.short_to_str( + self.preferences["assi_metrique"], lower_plural=True + ) story.append( Paragraph( SU( - "%(nbabs)s absences (1/2 journées), dont %(nbabsjust)s justifiées." - % self.infos + f"""{self.infos['nbabs']:g} {metrique} d'absences, dont { + self.infos['nbabsjust']:g} justifiées.""" ), self.CellStyle, ) diff --git a/app/scodoc/sco_preferences.py b/app/scodoc/sco_preferences.py index 557b73b0c..08ffa7007 100644 --- a/app/scodoc/sco_preferences.py +++ b/app/scodoc/sco_preferences.py @@ -615,7 +615,7 @@ class BasePreferences: "assi_limit_annee", { "initvalue": 1, - "title": "Ne lister que l'assiduités de l'année", + "title": "Ne lister que l'assiduité de l'année", "explanation": "Limite l'affichage des listes d'assiduité et de justificatifs à l'année en cours", "input_type": "boolcheckbox", "labels": ["non", "oui"], @@ -679,6 +679,7 @@ class BasePreferences: }, ), ( + # La valeur stockée est scu.AssiduitesMetrics.SHORT: "1/2 J.", "J.", "H." "assi_metrique", { "initvalue": "1/2 J.", diff --git a/app/scodoc/sco_utils.py b/app/scodoc/sco_utils.py index 61769d2e0..32550acc1 100644 --- a/app/scodoc/sco_utils.py +++ b/app/scodoc/sco_utils.py @@ -288,24 +288,28 @@ def is_period_overlapping( class AssiduitesMetrics: - """Labels associés au métrique de l'assiduité""" + """Labels associés à la métrique de l'assiduité""" - SHORT: list[str] = ["1/2 J.", "J.", "H."] + SHORT: list[str] = ["1/2 J.", "J.", "H."] # forme stockée en pref. LONG: list[str] = ["Demi-journée", "Journée", "Heure"] TAG: list[str] = ["demi", "journee", "heure"] + @classmethod + def short_to_str(cls, short_metric: str, lower_plural=False) -> str: + """La forme longue à afficher à partir du code short, stocké en préf. + Raise ValueError if invalid arg.""" + idx = cls.SHORT.index(short_metric) + return cls.LONG[idx].lower() + "s" if lower_plural else cls.LONG[idx].lower() + def translate_assiduites_metric(metric, inverse=True, short=True) -> str: """ - translate_assiduites_metric - SHORT[true] : "J." "H." "N." "1/2 J." SHORT[false] : "Journée" "Heure" "Nombre" "Demi-Journée" inverse[false] : "demi" -> "1/2 J." inverse[true] : "1/2 J." -> "demi" - Args: metric (str): la métrique à traduire inverse (bool, optional). Defaults to True.