1
0
forked from ScoDoc/ScoDoc

Métrique assiduité sur bulletins pdf

This commit is contained in:
Emmanuel Viennet 2023-12-12 15:32:47 +01:00
parent 0a38ed22e6
commit b9c1eccc98
5 changed files with 25 additions and 14 deletions

View File

@ -77,7 +77,9 @@ class ScoDocConfigurationForm(FlaskForm):
Attention: si ce champ peut aussi être défini dans chaque département.""", Attention: si ce champ peut aussi être défini dans chaque département.""",
validators=[Optional(), Email()], 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") submit_scodoc = SubmitField("Valider")
cancel_scodoc = SubmitField("Annuler", render_kw={"formnovalidate": True}) cancel_scodoc = SubmitField("Annuler", render_kw={"formnovalidate": True})

View File

@ -262,15 +262,16 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator):
# ----- ABSENCES # ----- ABSENCES
if self.preferences["bul_show_abs"]: if self.preferences["bul_show_abs"]:
nbabs = self.infos["nbabs"]
nbabsjust = self.infos["nbabsjust"]
objects.append(Spacer(1, 2 * mm)) 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( objects.append(
Paragraph( Paragraph(
SU( SU(
"%d absences (1/2 journées), dont %d justifiées." f"""{self.infos['nbabs']:g} {metrique} d'absences, dont {
% (nbabs, nbabsjust) self.infos['nbabsjust']:g} justifiées."""
), ),
self.CellStyle, self.CellStyle,
) )

View File

@ -143,11 +143,14 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator):
</a></p> </a></p>
""" """
) )
metrique = scu.AssiduitesMetrics.short_to_str(
self.preferences["assi_metrique"], lower_plural=True
)
story.append( story.append(
Paragraph( Paragraph(
SU( SU(
"%(nbabs)s absences (1/2 journées), dont %(nbabsjust)s justifiées." f"""{self.infos['nbabs']:g} {metrique} d'absences, dont {
% self.infos self.infos['nbabsjust']:g} justifiées."""
), ),
self.CellStyle, self.CellStyle,
) )

View File

@ -615,7 +615,7 @@ class BasePreferences:
"assi_limit_annee", "assi_limit_annee",
{ {
"initvalue": 1, "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", "explanation": "Limite l'affichage des listes d'assiduité et de justificatifs à l'année en cours",
"input_type": "boolcheckbox", "input_type": "boolcheckbox",
"labels": ["non", "oui"], "labels": ["non", "oui"],
@ -679,6 +679,7 @@ class BasePreferences:
}, },
), ),
( (
# La valeur stockée est scu.AssiduitesMetrics.SHORT: "1/2 J.", "J.", "H."
"assi_metrique", "assi_metrique",
{ {
"initvalue": "1/2 J.", "initvalue": "1/2 J.",

View File

@ -288,24 +288,28 @@ def is_period_overlapping(
class AssiduitesMetrics: 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"] LONG: list[str] = ["Demi-journée", "Journée", "Heure"]
TAG: list[str] = ["demi", "journee", "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: def translate_assiduites_metric(metric, inverse=True, short=True) -> str:
""" """
translate_assiduites_metric
SHORT[true] : "J." "H." "N." "1/2 J." SHORT[true] : "J." "H." "N." "1/2 J."
SHORT[false] : "Journée" "Heure" "Nombre" "Demi-Journée" SHORT[false] : "Journée" "Heure" "Nombre" "Demi-Journée"
inverse[false] : "demi" -> "1/2 J." inverse[false] : "demi" -> "1/2 J."
inverse[true] : "1/2 J." -> "demi" inverse[true] : "1/2 J." -> "demi"
Args: Args:
metric (str): la métrique à traduire metric (str): la métrique à traduire
inverse (bool, optional). Defaults to True. inverse (bool, optional). Defaults to True.