From a578e3d70c7f7a362c10943a70e1179b2ba52f7a Mon Sep 17 00:00:00 2001 From: Jean-Marie Favreau Date: Fri, 12 Jan 2024 14:57:26 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20d'un=20affichage=20des=20=C3=A9v=C3=A9n?= =?UTF-8?q?ements=20concurrents=20(en=20m=C3=AAme=20temps)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/agenda_culturel/models.py | 38 ++++++++++++++++++- .../contactmessage_create_form.html | 4 +- .../templates/agenda_culturel/page-day.html | 8 ++-- .../templates/agenda_culturel/page-event.html | 27 +++++++++++-- .../templates/agenda_culturel/side-nav.html | 12 +++--- src/agenda_culturel/views.py | 4 +- 6 files changed, 74 insertions(+), 19 deletions(-) diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py index f7eb095..4019e37 100644 --- a/src/agenda_culturel/models.py +++ b/src/agenda_culturel/models.py @@ -21,7 +21,7 @@ from datetime import time, timedelta, date from django.utils.timezone import datetime from django.utils import timezone -from .calendar import CalendarList +from .calendar import CalendarList, CalendarDay import logging logger = logging.getLogger(__name__) @@ -296,7 +296,6 @@ class Event(models.Model): if self.modified_date is None or not self.is_in_importation_process(): self.modified_date = now - def get_recurrence_at_date(self, year, month, day): dtstart = timezone.make_aware(datetime(year, month, day, 0, 0), timezone.get_default_timezone()) recurrences = self.get_recurrences_between(dtstart, dtstart) @@ -650,6 +649,41 @@ class Event(models.Model): return imported, nb_updated, nb_draft + def set_current_date(self, date): + self.current_date = date + + + def get_start_end_datetimes(self, day): + if self.start_day == day: + if self.start_time is None: + dtstart = datetime.combine(self.start_day, time().min) + else: + dtstart = datetime.combine(self.start_day, self.start_time) + else: + dtstart = datetime.combine(day, time().min) + + end_day = self.get_consolidated_end_day() + + if end_day == day: + if self.end_time is None: + dtend = datetime.combine(end_day, time().max) + else: + dtend = datetime.combine(end_day, self.end_time) + else: + dtend = datetime.combine(day, time().max) + + return dtstart, dtend + + def get_concurrent_events(self): + day = self.current_date if hasattr(self, "current_date") else self.start_day + day_events = CalendarDay(self.start_day).get_events() + return [e for e in day_events if e != self and self.is_concurrent_event(e, day) and e.status == Event.STATUS.PUBLISHED] + + def is_concurrent_event(self, e, day): + dtstart, dtend = self.get_start_end_datetimes(day) + e_dtstart, e_dtend = e.get_start_end_datetimes(day) + + return (dtstart <= e_dtstart <= dtend) or (e_dtstart <= dtstart <= e_dtend) diff --git a/src/agenda_culturel/templates/agenda_culturel/contactmessage_create_form.html b/src/agenda_culturel/templates/agenda_culturel/contactmessage_create_form.html index 8ac2692..92f224c 100644 --- a/src/agenda_culturel/templates/agenda_culturel/contactmessage_create_form.html +++ b/src/agenda_culturel/templates/agenda_culturel/contactmessage_create_form.html @@ -23,9 +23,9 @@
- +

Attention : n'utilisez pas le formulaire ci-dessous pour proposer un événement, il sera ignoré. Utilisez plutôt la page ajouter un événement.

- +
{% csrf_token %} {{ form.as_p }} diff --git a/src/agenda_culturel/templates/agenda_culturel/page-day.html b/src/agenda_culturel/templates/agenda_culturel/page-day.html index 2edefa0..f943254 100644 --- a/src/agenda_culturel/templates/agenda_culturel/page-day.html +++ b/src/agenda_culturel/templates/agenda_culturel/page-day.html @@ -68,7 +68,7 @@ diff --git a/src/agenda_culturel/templates/agenda_culturel/page-event.html b/src/agenda_culturel/templates/agenda_culturel/page-event.html index 0c3699b..46706cf 100644 --- a/src/agenda_culturel/templates/agenda_culturel/page-event.html +++ b/src/agenda_culturel/templates/agenda_culturel/page-event.html @@ -15,11 +15,30 @@
{% include "agenda_culturel/single-event/event-single-inc.html" with event=event filter=filter %}