Files
pointeuse-optimisator/app/templates/_soldes.html
Jacquin Antoine 6bd0e91f27 Aère le récapitulatif d'astreinte : un bloc par jour lisible
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
2026-09-08 23:40:03 +02:00

85 lines
5.1 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div id="soldes-section" hx-swap-oob="true">
<div class="soldes">
<div class="solde-item">
<div class="solde-eyebrow">Travaillé</div>
<div class="solde-num neutral">{{ result.total_travaille }}</div>
</div>
<div class="solde-item">
<div class="solde-eyebrow">Dû par jour</div>
<div class="solde-num neutral">{{ result.heures_jour }}</div>
</div>
<div class="solde-item">
<div class="solde-eyebrow">Dû cette semaine</div>
<div class="solde-num neutral">{{ result.total_du }}</div>
</div>
<div class="solde-item {% if result.solde_min > 0 %}item-pos{% elif result.solde_min < 0 %}item-neg{% endif %}">
<div class="solde-eyebrow">Solde semaine</div>
<div class="solde-num {% if result.solde_min > 0 %}pos{% elif result.solde_min < 0 %}neg{% endif %}">
{% if result.solde_min > 0 %}+{% endif %}{{ result.solde }}
</div>
</div>
</div>
{% if result.slots_restants > 0 %}
<div class="reste-info">
{% if result.extra_min > 0 %}
Reste à faire : <strong>{{ result.reste }}</strong>
sur {{ result.slots_restants }} demi-journée{{ 's' if result.slots_restants > 1 else '' }} restante{{ 's' if result.slots_restants > 1 else '' }}
— à rattraper : <strong class="reste-extra">+{{ result.extra }}</strong> (~+{{ result.moyenne_extra }} chacune)
{% elif result.avance_min > 0 %}
Reste à faire : <strong>{{ result.reste }}</strong>
sur {{ result.slots_restants }} demi-journée{{ 's' if result.slots_restants > 1 else '' }} restante{{ 's' if result.slots_restants > 1 else '' }}
— avance à écouler : <strong>{{ result.avance }}</strong>, répartie sur les départs du soir pour finir la semaine à 0.
{% elif result.reste_min > 0 %}
Reste à faire : <strong>{{ result.reste }}</strong>
sur {{ result.slots_restants }} demi-journée{{ 's' if result.slots_restants > 1 else '' }} restante{{ 's' if result.slots_restants > 1 else '' }}
— le rythme habituel suffit, rien à rattraper.
{% else %}
Vous êtes à jour ou en avance — rien à rattraper cette semaine.
{% endif %}
</div>
{% elif result.solde_min < 0 %}
<div class="reste-info">
Semaine terminée avec <strong class="reste-extra">{{ result.solde }}</strong> de manque —
complétez ou corrigez les saisies, ou rattrapez sur une autre semaine.
</div>
{% endif %}
{% if result.astreinte and result.astreinte.actif %}
<div class="as-decompte">
<div class="as-decompte-title">Astreinte — compteur séparé, hors heures de semaine</div>
<div class="as-decompte-help">
Décompte par <b>quarts d'heure de l'horloge</b> (:00, :15, :30, :45) : tout quart
<b>entamé</b> compte 15 min entières, et un quart partagé par deux
interventions n'est compté qu'<b>une seule fois</b>. Ex. 22:39 → 23:49 =
1h10 réelles mais 6 quarts touchés (22:30 → 00:00) = 1h30.
</div>
{% for j in result.astreinte.jours %}
<div class="as-jour">
<div class="as-jour-head">
<span class="as-jour-date">{{ j.jour }} {{ j.date[8:] }}/{{ j.date[5:7] }}</span>
{% if j.forfait_min %}<span class="as-forfait" title="Forfait du jour AS déclaré (réglé dans Réglages) : ajouté au temps travaillé de la semaine, hors compteurs d'astreinte">forfait + {{ j.forfait_h }}</span>{% endif %}
{% if j.total_min %}<span class="as-jour-total">astreinte {{ j.total_h }} → {{ j.total_pondere_h }} pondérées</span>{% endif %}
</div>
{% for ev in j.events %}
<div class="as-ev">
<span class="as-ev-h">{{ ev.debut }} → {{ ev.fin }}</span>
{% if ev.desc %}<span class="as-ev-desc">{{ ev.desc }}</span>{% endif %}
{% if ev.tranches %}
<span class="as-ev-q" title="Quarts d'heure de l'horloge (:00, :15, :30, :45) touchés par l'intervention et pas déjà comptés, chacun compté 15 min entières">{{ ev.tranches }} quart{{ 's' if ev.tranches > 1 else '' }} ({{ ev.tranches_debut }} → {{ ev.tranches_fin }}) = {{ ev.min_h }}</span>
{% for d in ev.details %}<span class="as-ev-cat">{{ d.nom }} ×{{ d.facteur_txt }}</span>{% if not loop.last %} + {% endif %}{% endfor %}
<span class="as-ev-pond">pondéré → {{ ev.pondere_h }}</span>
{% else %}
<span class="as-ev-q" title="Tous les quarts touchés sont déjà comptés dans une intervention précédente (même quart d'heure)">0 quart — déjà compté</span>
{% endif %}
</div>
{% endfor %}
</div>
{% endfor %}
<div class="as-totaux">
{% for c in result.astreinte.categories %}<span class="as-cat">{{ c.nom }} : {{ c.min_h }} ×{{ c.facteur_txt }} = {{ c.pondere_h }}</span>{% endfor %}
{% if result.astreinte.total_forfait_min %}<span class="as-forfait" title="Forfaits des jours AS déclarés : ajoutés au temps travaillé, hors compteurs d'astreinte">forfaits + {{ result.astreinte.total_forfait_h }} <em>(dans le travaillé)</em></span>{% endif %}
<span class="as-grand">total {{ result.astreinte.total_h }} → {{ result.astreinte.total_pondere_h }} pondérées</span>
</div>
</div>
{% endif %}
</div>