calcul des heures
This commit is contained in:
40
app/main.py
40
app/main.py
@ -18,10 +18,11 @@ from models import (
|
||||
toggle_conge, list_all_weeks,
|
||||
load_notif_config, save_notif_config, find_user_by_token, save_presence,
|
||||
load_auth, save_auth, find_user_by_reset_token,
|
||||
load_plages, save_plages,
|
||||
load_plages, save_plages, heures_jour_min,
|
||||
)
|
||||
from calcul import compute_week, minutes_to_hhmm, hhmm_to_minutes, heures_dues
|
||||
from stats import compute_all_stats
|
||||
from export import export_semaine_ods, export_annee_ods
|
||||
from notifications import reminder_loop
|
||||
|
||||
logging.basicConfig(
|
||||
@ -94,10 +95,6 @@ def week_dates(year: int, week: int) -> list[str]:
|
||||
return [(first + timedelta(days=i)).strftime("%Y-%m-%d") for i in range(5)]
|
||||
|
||||
|
||||
def heures_jour_min() -> int:
|
||||
return int(float(load_config().get("heures_jour", 7.8)) * 60)
|
||||
|
||||
|
||||
def _weeks_by_year(all_weeks: list) -> dict:
|
||||
result = {}
|
||||
for yr, wks in groupby(sorted(all_weeks, reverse=True), key=lambda x: x[0]):
|
||||
@ -518,6 +515,39 @@ def stats_page(request: Request):
|
||||
})
|
||||
|
||||
|
||||
ODS_MEDIA_TYPE = "application/vnd.oasis.opendocument.spreadsheet"
|
||||
|
||||
|
||||
@app.get("/export/semaine/{year}/{week}")
|
||||
def export_semaine(request: Request, year: int, week: int):
|
||||
user_id = _get_user(request)
|
||||
if not user_id:
|
||||
return RedirectResponse("/login", status_code=302)
|
||||
|
||||
content = export_semaine_ods(year, week, user_id)
|
||||
filename = f"pointages-{user_id}-{year}-S{week:02d}.ods"
|
||||
logger.info("export ODS semaine: user_id=%r year=%d week=%d", user_id, year, week)
|
||||
return Response(
|
||||
content=content, media_type=ODS_MEDIA_TYPE,
|
||||
headers={"Content-Disposition": f'attachment; filename="{filename}"'},
|
||||
)
|
||||
|
||||
|
||||
@app.get("/export/annee/{year}")
|
||||
def export_annee(request: Request, year: int):
|
||||
user_id = _get_user(request)
|
||||
if not user_id:
|
||||
return RedirectResponse("/login", status_code=302)
|
||||
|
||||
content = export_annee_ods(year, user_id)
|
||||
filename = f"pointages-{user_id}-{year}.ods"
|
||||
logger.info("export ODS année: user_id=%r year=%d", user_id, year)
|
||||
return Response(
|
||||
content=content, media_type=ODS_MEDIA_TYPE,
|
||||
headers={"Content-Disposition": f'attachment; filename="{filename}"'},
|
||||
)
|
||||
|
||||
|
||||
@app.get("/settings", response_class=HTMLResponse)
|
||||
def settings_page(request: Request):
|
||||
user_id = _get_user(request)
|
||||
|
||||
Reference in New Issue
Block a user