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.""",
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})

View File

@ -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,
)

View File

@ -143,11 +143,14 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator):
</a></p>
"""
)
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,
)

View File

@ -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.",

View File

@ -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.