From 30942148e2cc9e392938867244dfceeddb584f1e Mon Sep 17 00:00:00 2001
From: Hangzhi Yu <hangzhi@protonmail.com>
Date: Sun, 2 Feb 2025 19:42:51 +0100
Subject: [PATCH] Fix handling of all day events in backend and frontend

---
 aleksis/core/frontend/components/calendar/Calendar.vue | 5 ++++-
 aleksis/core/models.py                                 | 7 ++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/aleksis/core/frontend/components/calendar/Calendar.vue b/aleksis/core/frontend/components/calendar/Calendar.vue
index d8fcdfe39..511af38d5 100644
--- a/aleksis/core/frontend/components/calendar/Calendar.vue
+++ b/aleksis/core/frontend/components/calendar/Calendar.vue
@@ -217,7 +217,10 @@ export default {
         .flatMap((cf) =>
           cf.events.map((event) => {
             const start = this.$parseISODate(event.start);
-            const end = this.$parseISODate(event.end);
+            let end = this.$parseISODate(event.end);
+            if (event.allDay) {
+              end = end.minus({ days: 1 });
+            }
             return {
               ...event,
               category: cf.verboseName,
diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index a080955bf..fcf9384b2 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -1561,11 +1561,8 @@ class CalendarEvent(CalendarEventMixin, ExtensiblePolymorphicModel, RecurrenceMo
         """Return the end datetime of the calendar event."""
         if reference_object.datetime_end:
             return reference_object.datetime_end.astimezone(reference_object.timezone)
-        if reference_object.date_end == reference_object.date_start:
-            # Rule for all day events: If the event is only one day long,
-            # the end date has to be empty
-            return None
-        return reference_object.date_end
+        # RFC 5545 states that the end date is not inclusive
+        return reference_object.date_end + timedelta(days=1)
 
     @classmethod
     def value_rrule(
-- 
GitLab