diff --git a/RIGS/models.py b/RIGS/models.py index 5124a4a0..523452e0 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -63,7 +63,7 @@ class Person(models.Model, RevisionMixin): @property def latest_events(self): - return self.event_set.order_by('-start_date') + return self.event_set.order_by('-start_date').select_related('person','organisation','venue','mic') class Meta: permissions = ( @@ -98,7 +98,7 @@ class Organisation(models.Model, RevisionMixin): @property def latest_events(self): - return self.event_set.order_by('-start_date') + return self.event_set.order_by('-start_date').select_related('person','organisation','venue','mic') class Meta: permissions = ( @@ -158,7 +158,7 @@ class Venue(models.Model, RevisionMixin): @property def latest_events(self): - return self.event_set.order_by('-start_date') + return self.event_set.order_by('-start_date').select_related('person','organisation','venue','mic') class Meta: permissions = ( @@ -181,11 +181,11 @@ class EventManager(models.Manager): models.Q(dry_hire=True, checked_in_by__isnull=False, status__gt=Event.CANCELLED) | # Active dry hire GT models.Q(dry_hire=True, status=Event.CANCELLED, start_date__gte=datetime.date.today()) # Canceled but not started - ).order_by('meet_at', 'start_date') + ).order_by('meet_at', 'start_date').select_related('person','organisation','venue','mic') return events def rig_count(self): - events = self.filter( + event_count = self.filter( models.Q(start_date__gte=datetime.date.today(), end_date__isnull=True, is_rig=True) | # Starts after with no end models.Q(end_date__gte=datetime.date.today(), is_rig=True) | # Ends after @@ -193,8 +193,8 @@ class EventManager(models.Manager): is_rig=True) | # Active dry hire LT models.Q(dry_hire=True, checked_in_by__isnull=False, status__gt=Event.CANCELLED, is_rig=True) # Active dry hire GT - ).order_by('meet_at', 'start_date') - return len(events) + ).order_by('meet_at', 'start_date').count() + return event_count @reversion.register(follow=['items']) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 8b4ca10f..2b8de1a0 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -10,10 +10,12 @@ from django.template import Context, RequestContext from django.template.loader import get_template from django.conf import settings from django.http import HttpResponse +from django.db.models import Q from z3c.rml import rml2pdf from PyPDF2 import PdfFileMerger, PdfFileReader from RIGS import models, forms +import datetime __author__ = 'ghost' @@ -101,7 +103,6 @@ class EventPrint(generic.View): class EventDuplicate(generic.RedirectView): - def get_redirect_url(self, *args, **kwargs): new = get_object_or_404(models.Event, pk=kwargs['pk']) new.pk = None @@ -113,4 +114,29 @@ class EventDuplicate(generic.RedirectView): item.event = new item.save() - return reverse_lazy('event_update', kwargs={'pk': new.pk}) \ No newline at end of file + return reverse_lazy('event_update', kwargs={'pk': new.pk}) + + +class EventArchive(generic.ArchiveIndexView): + model = models.Event + date_field = "start_date" + paginate_by = 25 + + def get_queryset(self): + start = self.request.GET.get('start', None) + end = self.request.GET.get('end', datetime.date.today()) + filter = False + if end != "": + filter = Q(start_date__lte=end) + if start: + if filter: + filter = filter & Q(start_date__gte=start) + else: + filter = Q(start_date__gte=start) + + if filter: + qs = self.model.objects.filter(filter) + else: + qs = self.model.objects.all() + + return qs.select_related('person', 'organisation', 'venue', 'mic') \ No newline at end of file diff --git a/RIGS/templates/RIGS/event_archive.html b/RIGS/templates/RIGS/event_archive.html new file mode 100644 index 00000000..00baaad6 --- /dev/null +++ b/RIGS/templates/RIGS/event_archive.html @@ -0,0 +1,45 @@ +{% extends 'base.html' %} +{% load paginator from filters %} + +{% block title %}Event Archive{% endblock %} + +{% block content %} +
+

Event Archive

+ + + + {% if is_paginated %} +
+ {% paginator %} +
+ {% endif %} +
+
+ {% with latest as events %} + {% include 'RIGS/event_table.html' %} + {% endwith %} +
+ + {% if is_paginated %} +
+
+ {% paginator %} +
+
+ {% endif %} +{% endblock %} \ No newline at end of file diff --git a/RIGS/urls.py b/RIGS/urls.py index 7d03ec1b..2987c2de 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -1,6 +1,7 @@ from django.conf.urls import patterns, include, url from django.contrib.auth.decorators import login_required from RIGS import views, rigboard +from django.views.generic import RedirectView from PyRIGS.decorators import permission_required_with_403 @@ -56,6 +57,8 @@ urlpatterns = patterns('', # Rigboard url(r'^rigboard/$', rigboard.RigboardIndex.as_view(), name='rigboard'), + url(r'^rigboard/archive/$', RedirectView.as_view(pattern_name='event_archive')), + url(r'^event/(?P\d+)/$', permission_required_with_403('RIGS.view_event')(rigboard.EventDetail.as_view()), name='event_detail'), @@ -69,11 +72,19 @@ urlpatterns = patterns('', permission_required_with_403('RIGS.change_event')(rigboard.EventUpdate.as_view()), name='event_update'), url(r'^event/(?P\d+)/duplicate/$', - permission_required_with_403('RIGS.change_event')(rigboard.EventDuplicate.as_view()), + permission_required_with_403('RIGS.add_event')(rigboard.EventDuplicate.as_view()), name='event_duplicate'), + url(r'^event/archive/$', login_required()(rigboard.EventArchive.as_view()), name='event_archive'), # 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"), + + # Legacy URL's + url(r'^rig/show/(?P\d+)/$', RedirectView.as_view(pattern_name='event_detail')), + url(r'^bookings/$', RedirectView.as_view(pattern_name='rigboard')), + url(r'^bookings/past/$', RedirectView.as_view(pattern_name='event_archive')), + # Calendar may have gone away, redirect to the archive for now + url(r'^rigboard/calendar/$', RedirectView.as_view(pattern_name='event_archive', permanent=False)), ) diff --git a/templates/base.html b/templates/base.html index ddc0d5ca..e96375bd 100644 --- a/templates/base.html +++ b/templates/base.html @@ -40,7 +40,7 @@ Rigboard {% if perms.RIGS.view_invoice %}