Astreintes : interventions dans un menu dépliant fermé, cadre élargi
Les heures d'intervention (début, fin, description) passent en trois
colonnes alignées, cachées par défaut derrière un bouton « N
interventions » ; l'heure de retour et le total restent visibles.
L'état déplié survit aux rafraîchissements HTMX. Le conteneur passe
de 1100 à 1400 px pour que les lignes ne dépassent plus du cadre.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
This commit is contained in:
31
app/main.py
31
app/main.py
@ -452,22 +452,23 @@ def _btns_html(date, jour):
|
||||
|
||||
|
||||
def _as_event_html(date, ev):
|
||||
"""Une ligne d'intervention d'astreinte : début → fin, description, suppression."""
|
||||
"""Une ligne d'intervention d'astreinte : début, fin, description (3 colonnes
|
||||
de la grille), suppression."""
|
||||
return (
|
||||
f'<div class="as-event">'
|
||||
f'<input class="time-input" type="time" name="astreinte_debut" data-date="{_e(date)}" value="{_e(ev.get("debut") or "")}">'
|
||||
f'<span class="time-sep">→</span>'
|
||||
f'<input class="time-input" type="time" name="astreinte_fin" data-date="{_e(date)}" value="{_e(ev.get("fin") or "")}">'
|
||||
f'<div class="as-desc-cell">'
|
||||
f'<input type="text" class="as-desc" name="astreinte_desc" data-date="{_e(date)}" maxlength="200" placeholder="description" value="{_e(ev.get("desc") or "")}">'
|
||||
f'<button type="button" class="as-del" title="Supprimer" onclick="this.closest(\'.as-event\').remove()">×</button>'
|
||||
f'</div>'
|
||||
f'</div></div>'
|
||||
)
|
||||
|
||||
|
||||
def _as_block_html(date, jour):
|
||||
"""Bloc astreinte d'une ligne : événements d'intervention (début/fin, nombre
|
||||
libre, description), qui déclenchent les 11h de repos et décalent l'heure de
|
||||
retour, plus le décompte du jour (compteur séparé, hors heures de semaine).
|
||||
"""Bloc astreinte d'une ligne : les heures d'intervention (début, fin,
|
||||
description) sont regroupées dans un menu dépliant fermé par défaut ; seuls
|
||||
le bouton, l'heure de retour (11h de repos) et le décompte restent visibles.
|
||||
Rendu sur les jours qualifiés (astreinte ou lendemain) ; div vide ailleurs."""
|
||||
if not jour.get("astreinte_qualifiee"):
|
||||
return f'<div id="as-block-{_e(date)}" hx-swap-oob="true"></div>'
|
||||
@ -481,12 +482,22 @@ def _as_block_html(date, jour):
|
||||
if jour.get("astreinte_min"):
|
||||
total = (f'<span class="as-total" title="Compteur séparé, hors heures de semaine">'
|
||||
f'astreinte : {_e(jour["astreinte_h"])}</span>')
|
||||
nb = len(events)
|
||||
label = f'{nb} intervention' + ('s' if nb != 1 else '')
|
||||
return (
|
||||
f'<div id="as-block-{_e(date)}" class="as-block" data-label="Astreinte" hx-swap-oob="true">'
|
||||
f'<div class="as-events" id="as-events-{_e(date)}">{rows}</div>'
|
||||
f'<div id="as-block-{_e(date)}" class="as-block" data-date="{_e(date)}" data-label="Astreinte" hx-swap-oob="true">'
|
||||
f'<div class="as-head">'
|
||||
f'<button type="button" class="as-toggle" data-date="{_e(date)}" aria-expanded="false" onclick="asToggle(this)">'
|
||||
f'<span class="as-caret">▸</span> {label}</button>'
|
||||
f'{hint}{total}'
|
||||
f'</div>'
|
||||
f'<div class="as-body">'
|
||||
f'<div class="as-grid" id="as-events-{_e(date)}">'
|
||||
f'<span class="as-th">Début</span><span class="as-th">Fin</span><span class="as-th">Description</span>'
|
||||
f'{rows}'
|
||||
f'</div>'
|
||||
f'<button type="button" class="as-add" onclick="asAddEvent(\'{_e(date)}\')">+ intervention</button>'
|
||||
f'{hint}'
|
||||
f'{total}'
|
||||
f'</div>'
|
||||
f'</div>'
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user