From 6bd0e91f271d63d1a34cf60e47faef0d214e320f Mon Sep 17 00:00:00 2001 From: Jacquin Antoine Date: Tue, 8 Sep 2026 23:40:03 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=A8re=20le=20r=C3=A9capitulatif=20d'astrein?= =?UTF-8?q?te=20:=20un=20bloc=20par=20jour=20lisible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chaque jour devient un bloc avec en-tête (jour abrégé, forfait, total du jour astreinte → pondéré) et interventions indentées dessous ; les jours forfait-seul tiennent sur une ligne au lieu d'un pseudo-événement. 💘 Generated with Crush Assisted-by: Crush:glm-5.2 --- app/calcul.py | 5 +++++ app/templates/_soldes.html | 9 ++++++--- app/templates/base.html | 16 ++++++++++++++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/app/calcul.py b/app/calcul.py index 3802ee2..ec8bff8 100644 --- a/app/calcul.py +++ b/app/calcul.py @@ -27,6 +27,7 @@ DEFAULT_FACTEURS_ASTREINTE = [ ] _EPOCH_DATE = date(2000, 1, 1) +JOURS_COURTS = ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"] def hhmm_to_minutes(val: str | None) -> int: @@ -495,7 +496,11 @@ def compute_week(pointages: list[dict], conges: list[dict], heures_jour_min: int if (dec and dec["total_min"] > 0) or forfait: as_jours.append({ "date": p["date"], + "jour": JOURS_COURTS[datetime.strptime(p["date"], "%Y-%m-%d").weekday()], "events": dec["events"] if dec else [], + "total_min": dec["total_min"] if dec else 0, + "total_h": dec["total_h"] if dec else "", + "total_pondere_h": dec["total_pondere_h"] if dec else "", "forfait_min": forfait, "forfait_h": minutes_to_hhmm(forfait) if forfait else "", }) diff --git a/app/templates/_soldes.html b/app/templates/_soldes.html index 596fa66..30221b0 100644 --- a/app/templates/_soldes.html +++ b/app/templates/_soldes.html @@ -54,7 +54,11 @@ {% for j in result.astreinte.jours %}
- {{ j.date[8:] }}/{{ j.date[5:7] }} +
+ {{ j.jour }} {{ j.date[8:] }}/{{ j.date[5:7] }} + {% if j.forfait_min %}forfait + {{ j.forfait_h }}{% endif %} + {% if j.total_min %}astreinte {{ j.total_h }} → {{ j.total_pondere_h }} pondérées{% endif %} +
{% for ev in j.events %}
{{ ev.debut }} → {{ ev.fin }} @@ -68,12 +72,11 @@ {% endif %}
{% endfor %} - {% if j.forfait_min %}
forfait + {{ j.forfait_h }}
{% endif %}
{% endfor %}
{% for c in result.astreinte.categories %}{{ c.nom }} : {{ c.min_h }} ×{{ c.facteur_txt }} = {{ c.pondere_h }}{% endfor %} - {% if result.astreinte.total_forfait_min %}forfaits + {{ result.astreinte.total_forfait_h }}{% endif %} + {% if result.astreinte.total_forfait_min %}forfaits + {{ result.astreinte.total_forfait_h }} (dans le travaillé){% endif %} total {{ result.astreinte.total_h }} → {{ result.astreinte.total_pondere_h }} pondérées
diff --git a/app/templates/base.html b/app/templates/base.html index 146051b..8290f06 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -580,7 +580,15 @@ margin: -.15rem 0 .45rem; } .as-decompte-help b { color: var(--text); font-weight: 500; } - .as-ev { display: flex; flex-wrap: wrap; gap: .45rem; align-items: baseline; padding: .12rem 0; } + .as-ev { + display: flex; + flex-wrap: wrap; + gap: .45rem; + align-items: baseline; + padding: .12rem 0 .12rem .6rem; + margin: .2rem 0 .2rem .25rem; + border-left: 2px solid var(--rule-l); + } .as-ev-h { font-family: var(--mono); } .as-ev-desc { color: var(--muted); font-style: italic; } .as-ev-q { @@ -592,7 +600,11 @@ .as-ev-cat, .as-cat { color: var(--accent); font-family: var(--mono); font-size: 11px; } .as-forfait { font-family: var(--mono); color: var(--muted); font-size: 11px; } .as-ev-pond { font-family: var(--mono); color: var(--accent-2); } - .as-jour-date { font-family: var(--mono); font-weight: 500; margin-right: .4rem; } + .as-jour { padding: .35rem 0; border-top: 1px dashed var(--rule-l); } + .as-jour:first-of-type { border-top: none; padding-top: .1rem; } + .as-jour-head { display: flex; flex-wrap: wrap; gap: .5rem; align-items: baseline; } + .as-jour-date { font-family: var(--mono); font-weight: 500; } + .as-jour-total { font-family: var(--mono); color: var(--muted); font-size: 11px; margin-left: auto; } .as-totaux { border-top: 1px dashed var(--rule); margin-top: .4rem;