Rend les plages horaires configurables par utilisateur plutôt que globalement
Chaque compte a désormais son propre data/users/<user>/plages.json, réglable depuis une nouvelle carte "Plages horaires" sur /settings (avec validation HH:MM et ordre matin < aprem). Le calcul, les stats de conformité et les avertissements de saisie lisent la config de l'utilisateur courant au lieu du plages global. La valeur globale de data/config.json reste lue comme valeur de repli tant qu'un utilisateur n'a rien personnalisé.
This commit is contained in:
@ -7,6 +7,40 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="settings-card">
|
||||
<span class="hist-label">Plages horaires</span>
|
||||
<p class="settings-p">
|
||||
Bornes de présence obligatoire matin/après-midi et heure de reprise par défaut de
|
||||
l'après-midi, utilisées pour les avertissements de saisie et les préconisations de
|
||||
fin de demi-journée. Propres à ton compte — ne change rien pour les autres.
|
||||
</p>
|
||||
|
||||
{% if plages_saved %}
|
||||
<div class="settings-saved">Enregistré.</div>
|
||||
{% endif %}
|
||||
{% if plages_error %}
|
||||
<div class="settings-error">Horaires invalides (format HH:MM, matin_debut < matin_fin < aprem_debut < aprem_fin).</div>
|
||||
{% endif %}
|
||||
|
||||
<form method="post" action="/settings/plages" class="settings-form">
|
||||
<label class="login-label" for="matin_debut">Présence matin</label>
|
||||
<div class="settings-range">
|
||||
<input id="matin_debut" class="login-input settings-range-input" type="time" name="matin_debut" value="{{ plages.matin_debut }}">
|
||||
<span class="settings-range-sep">→</span>
|
||||
<input id="matin_fin" class="login-input settings-range-input" type="time" name="matin_fin" value="{{ plages.matin_fin }}">
|
||||
</div>
|
||||
<label class="login-label" for="aprem_debut">Présence après-midi</label>
|
||||
<div class="settings-range">
|
||||
<input id="aprem_debut" class="login-input settings-range-input" type="time" name="aprem_debut" value="{{ plages.aprem_debut }}">
|
||||
<span class="settings-range-sep">→</span>
|
||||
<input id="aprem_fin" class="login-input settings-range-input" type="time" name="aprem_fin" value="{{ plages.aprem_fin }}">
|
||||
</div>
|
||||
<label class="login-label" for="pause_dejeuner_fin">Reprise par défaut de l'après-midi</label>
|
||||
<input id="pause_dejeuner_fin" class="login-input settings-range-input" type="time" name="pause_dejeuner_fin" value="{{ plages.pause_dejeuner_fin }}">
|
||||
<button class="login-btn" type="submit">Enregistrer</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="settings-card">
|
||||
<span class="hist-label">Notifications (ntfy)</span>
|
||||
<p class="settings-p">
|
||||
@ -102,6 +136,14 @@
|
||||
padding: .5rem .8rem;
|
||||
font-family: var(--mono);
|
||||
}
|
||||
.settings-error {
|
||||
background: var(--neg-bg);
|
||||
border-left: 3px solid var(--neg);
|
||||
color: var(--neg);
|
||||
font-size: 12px;
|
||||
padding: .5rem .8rem;
|
||||
font-family: var(--mono);
|
||||
}
|
||||
.settings-urlrow { display: flex; align-items: center; gap: .75rem; flex-wrap: wrap; }
|
||||
.settings-urllabel {
|
||||
font-family: var(--mono);
|
||||
|
||||
Reference in New Issue
Block a user