Projette les cibles en temps réel et corrige le fuseau horaire
Calcule les heures travaillées et cibles d'entrée/sortie même quand une demi-journée est en cours (pas encore de pointage de sortie), au lieu d'attendre la fin de journée. Ajoute un endpoint /refresh pour rafraîchir l'affichage sans repointer. Désambiguïse les libellés de semaine sur plusieurs années et force TZ=Europe/Paris dans le conteneur. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
14
app/stats.py
14
app/stats.py
@ -5,6 +5,11 @@ from datetime import datetime, timedelta, date as _date
|
||||
from models import load_week_pointages, load_conges, list_all_weeks, load_config
|
||||
from calcul import hhmm_to_minutes, minutes_to_hhmm, heures_travaillees, heures_dues
|
||||
|
||||
MOIS_FR = [
|
||||
"janvier", "février", "mars", "avril", "mai", "juin",
|
||||
"juillet", "août", "septembre", "octobre", "novembre", "décembre",
|
||||
]
|
||||
|
||||
|
||||
def _week_dates(year: int, week: int) -> list[str]:
|
||||
first = datetime.strptime(f"{year}-W{week:02d}-1", "%G-W%V-%u").date()
|
||||
@ -134,13 +139,18 @@ def compute_all_stats(user_id: str = "") -> dict:
|
||||
|
||||
weekly_balances.append({
|
||||
"year": year, "week": week,
|
||||
"label": f"S{week:02d}",
|
||||
"date": dates[0],
|
||||
"delta_min": week_delta,
|
||||
"delta": minutes_to_hhmm(week_delta),
|
||||
"partial": week_has_incomplete,
|
||||
})
|
||||
|
||||
# Suffix the label with a 2-digit year when weeks span more than one year,
|
||||
# otherwise "S24" is ambiguous between e.g. 2024 and 2026.
|
||||
spans_multiple_years = len({b["year"] for b in weekly_balances}) > 1
|
||||
for b in weekly_balances:
|
||||
b["label"] = f"S{b['week']:02d}'{b['year'] % 100:02d}" if spans_multiple_years else f"S{b['week']:02d}"
|
||||
|
||||
time_stats = {}
|
||||
for slot, pairs in slot_pairs.items():
|
||||
if len(pairs) < 2:
|
||||
@ -182,7 +192,7 @@ def compute_all_stats(user_id: str = "") -> dict:
|
||||
"comp_globale": comp_globale,
|
||||
"comp_mois": comp_mois,
|
||||
"comp_sem_n1": comp_sem_n1,
|
||||
"mois_label": today.strftime("%B %Y"),
|
||||
"mois_label": f"{MOIS_FR[today.month - 1].capitalize()} {today.year}",
|
||||
"prev_week_label": f"S{prev_iso.week:02d} / {prev_iso.year}",
|
||||
"today": today.strftime("%Y-%m-%d"),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user