diff --git a/fet2020/rental/urls.py b/fet2020/rental/urls.py index 7703a591..fa946f29 100644 --- a/fet2020/rental/urls.py +++ b/fet2020/rental/urls.py @@ -1,11 +1,12 @@ from django.urls import path -from . import apps +from . import apps, views from .views import RentalCreateDoneView, RentalCreateView, RentalItemDetailView, RentalListView app_name = apps.RentalConfig.name urlpatterns = [ + path("rental_calendar.ics", views.rental_calendar, name="calendar"), path("rental/", RentalListView.as_view(), name="index"), path("request-rental/", RentalCreateView.as_view(), name="rental_create"), path( diff --git a/fet2020/rental/views.py b/fet2020/rental/views.py index 0262c9a0..f6116094 100644 --- a/fet2020/rental/views.py +++ b/fet2020/rental/views.py @@ -2,6 +2,7 @@ import calendar import datetime from django.db.models import Q +from django.shortcuts import render from django.urls import reverse from django.views.generic import ListView, TemplateView from django.views.generic.detail import DetailView @@ -170,3 +171,21 @@ class RentalCreateDoneView(TemplateView): class RentalItemDetailView(DetailView): model = RentalItem template_name = "rental/rentalitem_detail.html" + + +def rental_calendar(request): + """ + ICS-calendar for outlook, google calender, ... + """ + rentals = Rental.objects.all() + + context = { + "rentals": rentals, + } + + response = render(request, "rental/rental_calendar.ics", context, content_type="text/calendar") + + # End of line (EOL) must be CRLF, to be compliant with RFC5545. Django/Python set the EOL to LF. + response.content = response.content.replace(b"\n", b"\r\n") + + return response diff --git a/fet2020/templates/rental/calendar.html b/fet2020/templates/rental/calendar.html index fc419036..8cca61f5 100644 --- a/fet2020/templates/rental/calendar.html +++ b/fet2020/templates/rental/calendar.html @@ -13,6 +13,10 @@ Willkommen bei unserem Verleih!
+ {% if user.is_authenticated %} + Verleih-Kalender abonnieren + {% endif %} + Verleih anfragen diff --git a/fet2020/templates/rental/rental_calendar.ics b/fet2020/templates/rental/rental_calendar.ics new file mode 100644 index 00000000..6fadc290 --- /dev/null +++ b/fet2020/templates/rental/rental_calendar.ics @@ -0,0 +1,37 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//FET//Verleih Kalender//DE +METHOD:PUBLISH +X-WR-CALNAME:Verleih Kalender +X-WR-CALDESC:Übersicht aller Verleihtermine +X-WR-TIMEZONE:Europe/Vienna +BEGIN:VTIMEZONE +TZID:Europe/Vienna +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +TZNAME:MEZ +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +TZNAME:MESZ +END:DAYLIGHT +END:VTIMEZONE{% for rental in rentals %}{% for rentalitem in rental.rentalitems.all %} +BEGIN:VEVENT +UID:{% now 'Ymd' %}_{{ rental.id }}_{{ rentalitem.id }}@fet.at +ORGANIZER;CN="Fachschaft Elektrotechnik":MAILTO:verleih@fet.at +SUMMARY:#{{ rental.id }}: {{ rentalitem.name }} - {{ rental.get_status_display }} +DESCRIPTION:Anfrage bearbeiten: {{ request.scheme }}:// + {{ request.get_host }}{% url 'admin:rental_rental_change' rental.id %} +CLASS:PUBLIC +DTSTART;TZID=Europe/Vienna:{{ rental.date_start|date:'Ymd' }} +DTEND;TZID=Europe/Vienna:{{ rental.date_end|date:'Ymd' }} +DTSTAMP;TZID=Europe/Vienna:{% now 'Ymd' %}T{% now 'His' %} +TRANSP:TRANSPARENT +END:VEVENT{% endfor %}{% endfor %} +END:VCALENDAR \ No newline at end of file