From a086103343ac1e403c66d760c234b623063834c2 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 20 Aug 2026 21:24:37 +0000 Subject: [PATCH] =?UTF-8?q?G=C3=A9rer=20manuellement=20les=20p=C3=A9riodes?= =?UTF-8?q?=20de=20vacances?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/planning/time_tracking.html | 2 + app_new/planning/time_tracking.py | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/app_new/planning/templates/planning/time_tracking.html b/app_new/planning/templates/planning/time_tracking.html index 162454b..07a7fdc 100644 --- a/app_new/planning/templates/planning/time_tracking.html +++ b/app_new/planning/templates/planning/time_tracking.html @@ -38,6 +38,8 @@
Importer les calendriers
Changer de zone remplace les périodes scolaires importées pour l’autre zone.
+
Vacances personnaliséesAjoutez une période manuelle ou supprimez une période existante. Les jours fériés sont gérés séparément.
{% for closure in closures if closure.closure_type in ('vacances', 'vacances_scolaires') %}{% else %}{% endfor %}
PériodeDatesOrigine
{{ closure.name }}{{ closure.start_date.strftime('%d/%m/%Y') }} → {{ closure.end_date.strftime('%d/%m/%Y') }}{% if closure.closure_type == 'vacances_scolaires' %}Importée{% else %}Manuelle{% endif %}
Aucune période de vacances enregistrée.
+
Permanences dans les vacancesSélectionnez plusieurs dates puis l’horaire type à appliquer.
{% for group in permanence_groups %}
{{ group.closure.name }} ({{ group.closure.start_date.strftime('%d/%m/%Y') }} au {{ group.closure.end_date.strftime('%d/%m/%Y') }})
{% for option in group.options %}
{% endfor %}
{% else %}
Aucune période de vacances importée pour cette période. Importez d’abord le calendrier scolaire.
{% endfor %}
{% set selected_permanences = permanence_options|selectattr('entry')|list %}
Récapitulatif des permanences
diff --git a/app_new/planning/time_tracking.py b/app_new/planning/time_tracking.py index 0612313..ce9e3cd 100644 --- a/app_new/planning/time_tracking.py +++ b/app_new/planning/time_tracking.py @@ -320,6 +320,43 @@ def import_public_holidays(): return _redirect(year) +@planning_bp.route("/time/vacation", methods=["POST"]) +@login_required +def add_manual_vacation(): + """Ajoute une période de vacances personnalisée.""" + try: + start_date = datetime.strptime(request.form["start_date"], "%Y-%m-%d").date() + end_date = datetime.strptime(request.form["end_date"], "%Y-%m-%d").date() + except (KeyError, ValueError): + flash("Dates de vacances invalides.", "danger") + return _redirect(request.form.get("year", type=int)) + if end_date < start_date: + flash("La date de fin doit être postérieure ou égale à la date de début.", "danger") + return _redirect(start_date.year) + db.session.add(CollegeClosure( + name=(request.form.get("name") or "Vacances personnalisées").strip(), + start_date=start_date, end_date=end_date, + closure_type="vacances", work_hours_type="none", + notes="Période ajoutée manuellement", + )) + db.session.commit() + flash("Période de vacances ajoutée.", "success") + return _redirect(start_date.year) + + +@planning_bp.route("/time/vacation//delete", methods=["POST"]) +@login_required +def delete_vacation(id): + vacation = CollegeClosure.query.filter( + CollegeClosure.id == id, + CollegeClosure.closure_type.in_(["vacances", "vacances_scolaires"]), + ).first_or_404() + db.session.delete(vacation) + db.session.commit() + flash("Période de vacances supprimée.", "success") + return _redirect() + + @planning_bp.route("/time/permanences", methods=["POST"]) @login_required def save_permanences():