From 583b2514afb02fae5fc8c215c6dcce59308f9db1 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Fri, 3 Apr 2015 20:45:58 +0100 Subject: [PATCH] Attempt using ical extension - not working --- RIGS/urls.py | 3 ++ RIGS/views.py | 86 ++++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 3 files changed, 90 insertions(+) diff --git a/RIGS/urls.py b/RIGS/urls.py index 27c932f9..22f0ac4e 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -114,6 +114,9 @@ urlpatterns = patterns('', url(r'^user/edit/$', login_required(views.ProfileUpdateSelf.as_view()), name='profile_update_self'), + # ICS Calendar + url(r'^ics/$', (views.CalendarICS()), name="ics_calendar"), + # API url(r'^api/(?P\w+)/$', (views.SecureAPIRequest.as_view()), name="api_secure"), url(r'^api/(?P\w+)/(?P\d+)/$', (views.SecureAPIRequest.as_view()), name="api_secure"), diff --git a/RIGS/views.py b/RIGS/views.py index 57feffaa..56a302c2 100644 --- a/RIGS/views.py +++ b/RIGS/views.py @@ -8,6 +8,7 @@ from django.shortcuts import get_object_or_404 from django.core import serializers import simplejson from django.contrib import messages +from django_ical.views import ICalFeed from RIGS import models, forms @@ -263,6 +264,91 @@ class SecureAPIRequest(generic.View): return HttpResponse(model) +class CalendarICS(ICalFeed): + """ + A simple event calender + """ + product_id = '-//example.com//Example//EN' + timezone = 'UTC' + file_name = "event.ics" + + def items(self): + return models.Event.objects.all().order_by('-start_date') + + def item_title(self, item): + title = '' + if item.cancelled: + title += 'CANCELLED: ' + + if not item.is_rig: + title += 'NON-RIG: ' + + if item.dry_hire: + title += 'DRY HIRE: ' + + title += item.name + + title += ' ('+str(item.status)+')' + + return title + + def item_start_datetime(self, item): + startDateTime = item.start_date#.strftime("%Y%M%d") + + #if item.start_time: + # startDateTime += 'T'+item.start_time.strftime("%H%i") + + return startDateTime + + def item_end_datetime(self, item): + endDateTime = item.start_date.strftime("%Y%M%d") + + #if item.end_date: + # endDateTime = item.end_date.strftime("%Y%M%d") + # + #if item.start_time and item.end_time: # don't allow an event with specific end but no specific start + # endDateTime += 'T'+item.end_time.strftime("%H%i") + #elif item.start_time: # if there's a start time specified then an end time should also be specified + # endDateTime += 'T2359' + #elif item.end_time: # end time but no start time - this is weird - don't think ICS will like it so ignoring + # endDateTime += '' # do nothing + + return endDateTime + + def item_location(self,item): + return item.venue + + def item_description(self, item): + desc = 'Rig ID = '+str(item.pk)+'\n' + desc += 'MIC = ' + (item.mic.name if item.mic else '---') + '\n' + desc += 'Status = ' + str(item.status) + '\n' + desc += 'Event = ' + item.name + '\n' + desc += 'Venue = ' + (item.venue.name if item.venue else '---') + '\n' + if item.is_rig and item.person: + desc += 'Client = ' + item.person.name + ( ('for'+item.organisation.name) if item.organisation else '') + '\n' + desc += '\n\n' + if item.description: + desc += 'Event Description:\n'+item.description + if item.notes: + desc += 'Notes:\n'+item.notes + + + + + return item.description + + def item_link(self, item): + return '' + + # def item_created(self, item): #TODO - Implement created date-time (using django-reversion?) + # return '' + + def item_updated(self, item): + return item.last_edited_at + + def item_guid(self, item): + return item.pk + class ProfileDetail(generic.DetailView): model = models.Profile diff --git a/requirements.txt b/requirements.txt index a8c14984..2afebf22 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,3 +10,4 @@ pillow==2.7.0 reportlab==2.7 z3c.rml==2.7.2 pyPDF2==1.23 +django-ical==1.3 \ No newline at end of file