diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py index e7dfc7f..b92f9b6 100644 --- a/src/agenda_culturel/models.py +++ b/src/agenda_culturel/models.py @@ -26,6 +26,8 @@ from django.utils import timezone from location_field.models.plain import PlainLocationField from .calendar import CalendarList, CalendarDay +from icalendar import Calendar as icalCal +from icalendar import Event as icalEvent import logging @@ -1090,6 +1092,46 @@ class Event(models.Model): return (dtstart <= e_dtstart <= dtend) or (e_dtstart <= dtstart <= e_dtend) + def export_to_ics(events): + cal = icalCal() + # Some properties are required to be compliant + cal.add("prodid", "-//My calendar product//example.com//") + cal.add("version", "2.0") + + for event in events: + eventIcal = icalEvent() + # mapping + eventIcal.add( + "dtstart", + datetime( + event.start_day.year, + event.start_day.month, + event.start_day.day, + event.start_time.hour, + event.start_time.minute, + ), + ) + eventIcal.add( + "dtend", + datetime( + event.end_day.year, + event.end_day.month, + event.end_day.day, + event.end_time.hour, + event.end_time.minute, + ), + ) + eventIcal.add("summary", event.title) + eventIcal.add("name", event.title) + eventIcal.add( + "description", event.description + "\r" + event.reference_urls[0] + ) + eventIcal.add("location", event.exact_location or event.location) + + cal.add_component(eventIcal) + + return cal + class ContactMessage(models.Model): class Meta: 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 fe179b6..d29e73a 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 @@ -70,11 +70,12 @@ {% endif %}
- {% if perms.agenda_culturel.change_event and not noedit %} - {% endif %} diff --git a/src/agenda_culturel/urls.py b/src/agenda_culturel/urls.py index e526ff3..695051e 100644 --- a/src/agenda_culturel/urls.py +++ b/src/agenda_culturel/urls.py @@ -158,6 +158,10 @@ urlpatterns = [ UnknownPlaceAddView.as_view(), name="add_place_to_event", ), + path( + "event/