From c180e3c623cf7b732e4a738077967d8d8a6b9274 Mon Sep 17 00:00:00 2001
From: Jean-Marie Favreau
Date: Fri, 11 Apr 2025 22:17:08 +0200
Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20la=20gestion=20des=20r?=
=?UTF-8?q?=C3=A9currences?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fix #65
Fix #224
See #304
---
src/agenda_culturel/models.py | 10 +++--
.../single-event/event-elegant-inc.html | 24 +++++++---
.../single-event/event-in-flat-list-inc.html | 44 ++++++++++++-------
.../event-in-unknown-place-list-inc.html | 32 +++++++++-----
.../single-event/event-single-inc.html | 44 ++++++++++++-------
5 files changed, 103 insertions(+), 51 deletions(-)
diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py
index 44abc0d..430756e 100644
--- a/src/agenda_culturel/models.py
+++ b/src/agenda_culturel/models.py
@@ -1656,10 +1656,12 @@ class Event(models.Model):
return result
def has_recurrences(self):
- # TODO: see https://forge.chapril.org/jmtrivial/agenda_culturel/issues/65
- return self.recurrences is not None and len(self.recurrences.rrules) != 0
+ return self.recurrences is not None and (
+ len(self.recurrences.rrules) != 0 or len(self.recurrences.rdates) != 0
+ )
def update_recurrence_dtstartend(self):
+ # get start and end date and time
sday = (
date.fromisoformat(self.start_day)
if isinstance(self.start_day, str)
@@ -1681,6 +1683,7 @@ class Event(models.Model):
else time() if self.end_time is None else self.end_time
)
+ # updating start and end date for database efficiency
self.recurrence_dtstart = datetime.combine(sday, stime)
if not self.has_recurrences():
if self.end_day is None:
@@ -1689,7 +1692,8 @@ class Event(models.Model):
self.recurrence_dtend = datetime.combine(eday, etime)
else:
if (
- self.recurrences.rrules[0].until is None
+ len(self.recurrences.rrules) > 0
+ and self.recurrences.rrules[0].until is None
and self.recurrences.rrules[0].count is None
):
self.recurrence_dtend = None
diff --git a/src/agenda_culturel/templates/agenda_culturel/single-event/event-elegant-inc.html b/src/agenda_culturel/templates/agenda_culturel/single-event/event-elegant-inc.html
index e610997..ec50fb0 100644
--- a/src/agenda_culturel/templates/agenda_culturel/single-event/event-elegant-inc.html
+++ b/src/agenda_culturel/templates/agenda_culturel/single-event/event-elegant-inc.html
@@ -96,12 +96,24 @@
{% if event.has_recurrences %}
{% endif %}
diff --git a/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html b/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html
index 58562bf..558ce28 100644
--- a/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html
+++ b/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html
@@ -63,23 +63,35 @@
Événement de portée locale
{% endif %}
+ {% if event.has_recurrences %}
+
+ {% picto_from_name "repeat" %}
+ {% if event.recurrences.rrules %}
+ {% for r in event.recurrences.rrules %}
+ {{ r.to_text }}
+ {% if not forloop.first %},{% endif %}
+ {% endfor %}
+ depuis le
+ {% if event.recurrences.dtstart.date %}
+ {{ event.recurrences.dtstart.date }}
+ {% else %}
+ {{ event.start_day }}
+ {% endif %}
+ {% endif %}
+ {% if event.recurrences.rdates %}
+ les {{ event.recurrences.dtstart.date }}
+ {% for d in event.recurrences.rdates %}
+ {% if forloop.last %}
+ et
+ {% else %}
+ ,
+ {% endif %}
+ {{ d.date }}
+ {% endfor %}
+ {% endif %}
+
+ {% endif %}
-{% if event.has_recurrences %}
-
- {% picto_from_name "repeat" %}
-
- {% for r in event.recurrences.rrules %}
- {{ r.to_text }}
- {% if not forloop.first %},{% endif %}
- {% endfor %}
- , depuis le
- {% if event.recurrences.dtstart.date %}
- {{ event.recurrences.dtstart.date }}
- {% else %}
- {{ event.start_day }}
- {% endif %}
-
-{% endif %}
{% if event.tags %}
{% picto_from_name "tag" %}
diff --git a/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-unknown-place-list-inc.html b/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-unknown-place-list-inc.html
index 9d854d4..40bdbf1 100644
--- a/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-unknown-place-list-inc.html
+++ b/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-unknown-place-list-inc.html
@@ -56,16 +56,28 @@
{% if event.has_recurrences %}
{% picto_from_name "repeat" %}
-
- {% for r in event.recurrences.rrules %}
- {{ r.to_text }}
- {% if not forloop.first %},{% endif %}
- {% endfor %}
- , depuis le
- {% if event.recurrences.dtstart.date %}
- {{ event.recurrences.dtstart.date }}
- {% else %}
- {{ event.start_day }}
+ {% if event.recurrences.rrules %}
+ {% for r in event.recurrences.rrules %}
+ {{ r.to_text }}
+ {% if not forloop.first %},{% endif %}
+ {% endfor %}
+ depuis le
+ {% if event.recurrences.dtstart.date %}
+ {{ event.recurrences.dtstart.date }}
+ {% else %}
+ {{ event.start_day }}
+ {% endif %}
+ {% endif %}
+ {% if event.recurrences.rdates %}
+ les {{ event.recurrences.dtstart.date }}
+ {% for d in event.recurrences.rdates %}
+ {% if forloop.last %}
+ et
+ {% else %}
+ ,
+ {% endif %}
+ {{ d.date }}
+ {% endfor %}
{% endif %}
{% endif %}
diff --git a/src/agenda_culturel/templates/agenda_culturel/single-event/event-single-inc.html b/src/agenda_culturel/templates/agenda_culturel/single-event/event-single-inc.html
index 46fec4b..9b0d4ac 100644
--- a/src/agenda_culturel/templates/agenda_culturel/single-event/event-single-inc.html
+++ b/src/agenda_culturel/templates/agenda_culturel/single-event/event-single-inc.html
@@ -179,24 +179,36 @@
{% if event.has_recurrences %}