diff --git a/RIGS/ical.py b/RIGS/ical.py index 120e47d4..8ae94342 100644 --- a/RIGS/ical.py +++ b/RIGS/ical.py @@ -17,15 +17,58 @@ class CalendarICS(ICalFeed): timezone = settings.TIME_ZONE file_name = "rigs.ics" - def get(self, *args, **kwargs): - timezone.activate(timezone.UTC) - return super(CalendarICS, self).get(*args, **kwargs) + # Cancelled = 'cancelled' = False + # Dry Hire = 'dry-hire' = True + # Non Rig = 'non-rig' = True + # Rig = 'rig' = True + # Provisional = 'provisional' = True + # Confirmed/Booked = 'confirmed' = True + def get_object(self, request, *args, **kwargs): + params = {} - def items(self): + params['dry-hire'] = request.GET.get('dry-hire','true') == 'true' + params['non-rig'] = request.GET.get('non-rig','true') == 'true' + params['rig'] = request.GET.get('rig','true') == 'true' + + params['cancelled'] = request.GET.get('cancelled','false') == 'true' + params['provisional'] = request.GET.get('provisional','true') == 'true' + params['confirmed'] = request.GET.get('confirmed','true') == 'true' + + return params + + def description(self,params): + desc = "Calendar generated by RIGS system. This includes event types: " + ('Rig, ' if params['rig'] else '') + ('Non-rig, ' if params['non-rig'] else '') + ('Dry Hire ' if params['dry-hire'] else '') + '\n' + desc = desc + "Includes events with status: " + ('Cancelled, ' if params['cancelled'] else '') + ('Provisional, ' if params['provisional'] else '') + ('Confirmed/Booked, ' if params['confirmed'] else '') + + return desc + + def items(self, params): #include events from up to 1 year ago start = datetime.datetime.now() - datetime.timedelta(days=365) - filter = Q(start_date__gte=start) & ~Q(status=models.Event.CANCELLED) + filter = Q(start_date__gte=start) + + typeFilters = Q(pk=None) #Need something that is false for every entry + + if params['dry-hire']: + typeFilters = typeFilters | Q(dry_hire=True, is_rig=True) + + if params['non-rig']: + typeFilters = typeFilters | Q(is_rig=False) + + if params['rig']: + typeFilters = typeFilters | Q(is_rig=True, dry_hire=False) + + statusFilters = Q(pk=None) #Need something that is false for every entry + + if params['cancelled']: + statusFilters = statusFilters | Q(status=models.Event.CANCELLED) + if params['provisional']: + statusFilters = statusFilters | Q(status=models.Event.PROVISIONAL) + if params['confirmed']: + statusFilters = statusFilters | Q(status=models.Event.CONFIRMED) | Q(status=models.Event.BOOKED) + + filter = filter & typeFilters & statusFilters return models.Event.objects.filter(filter).order_by('-start_date').select_related('person', 'organisation', 'venue', 'mic') diff --git a/RIGS/templates/RIGS/profile_detail.html b/RIGS/templates/RIGS/profile_detail.html index 33437ea4..c8c661c4 100644 --- a/RIGS/templates/RIGS/profile_detail.html +++ b/RIGS/templates/RIGS/profile_detail.html @@ -2,6 +2,29 @@ {% block title %}RIGS Profile {{object.pk}}{% endblock %} +{% block js %} + + +{% endblock %} + {% block content %}
@@ -68,16 +91,42 @@ {% endif %} +
Calendar Options
+
+
+
+
+ + + + + + +
+
+
+
Calendar URL
{% if user.api_key %} -
http{{ request.is_secure|yesno:"s,"}}://{{ request.get_host }}{% url 'ics_calendar' api_pk=user.pk api_key=user.api_key %}
- Click here to add to google calendar.
+

+						Click here to add to google calendar.
To sync from google calendar to mobile device, visit this page on your device and tick "RIGS Calendar".
{% else %}
No API Key Generated
{% endif %} -
{% endif %}