mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-19 22:42:17 +00:00
Merge branch 'master' of https://bitbucket.org/nottinghamtec/pyrigs
Merge in requirements error fix
This commit is contained in:
@@ -63,7 +63,7 @@ class Person(models.Model, RevisionMixin):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def latest_events(self):
|
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:
|
class Meta:
|
||||||
permissions = (
|
permissions = (
|
||||||
@@ -98,7 +98,7 @@ class Organisation(models.Model, RevisionMixin):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def latest_events(self):
|
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:
|
class Meta:
|
||||||
permissions = (
|
permissions = (
|
||||||
@@ -158,7 +158,7 @@ class Venue(models.Model, RevisionMixin):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def latest_events(self):
|
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:
|
class Meta:
|
||||||
permissions = (
|
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, 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())
|
models.Q(dry_hire=True, status=Event.CANCELLED, start_date__gte=datetime.date.today())
|
||||||
# Canceled but not started
|
# Canceled but not started
|
||||||
).order_by('meet_at', 'start_date')
|
).order_by('meet_at', 'start_date').select_related('person','organisation','venue','mic')
|
||||||
return events
|
return events
|
||||||
|
|
||||||
def rig_count(self):
|
def rig_count(self):
|
||||||
events = self.filter(
|
event_count = self.filter(
|
||||||
models.Q(start_date__gte=datetime.date.today(), end_date__isnull=True,
|
models.Q(start_date__gte=datetime.date.today(), end_date__isnull=True,
|
||||||
is_rig=True) | # Starts after with no end
|
is_rig=True) | # Starts after with no end
|
||||||
models.Q(end_date__gte=datetime.date.today(), is_rig=True) | # Ends after
|
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
|
is_rig=True) | # Active dry hire LT
|
||||||
models.Q(dry_hire=True, checked_in_by__isnull=False, status__gt=Event.CANCELLED, is_rig=True)
|
models.Q(dry_hire=True, checked_in_by__isnull=False, status__gt=Event.CANCELLED, is_rig=True)
|
||||||
# Active dry hire GT
|
# Active dry hire GT
|
||||||
).order_by('meet_at', 'start_date')
|
).order_by('meet_at', 'start_date').count()
|
||||||
return len(events)
|
return event_count
|
||||||
|
|
||||||
|
|
||||||
@reversion.register(follow=['items'])
|
@reversion.register(follow=['items'])
|
||||||
|
|||||||
@@ -10,10 +10,12 @@ from django.template import Context, RequestContext
|
|||||||
from django.template.loader import get_template
|
from django.template.loader import get_template
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
from django.db.models import Q
|
||||||
from z3c.rml import rml2pdf
|
from z3c.rml import rml2pdf
|
||||||
from PyPDF2 import PdfFileMerger, PdfFileReader
|
from PyPDF2 import PdfFileMerger, PdfFileReader
|
||||||
|
|
||||||
from RIGS import models, forms
|
from RIGS import models, forms
|
||||||
|
import datetime
|
||||||
|
|
||||||
__author__ = 'ghost'
|
__author__ = 'ghost'
|
||||||
|
|
||||||
@@ -101,7 +103,6 @@ class EventPrint(generic.View):
|
|||||||
|
|
||||||
|
|
||||||
class EventDuplicate(generic.RedirectView):
|
class EventDuplicate(generic.RedirectView):
|
||||||
|
|
||||||
def get_redirect_url(self, *args, **kwargs):
|
def get_redirect_url(self, *args, **kwargs):
|
||||||
new = get_object_or_404(models.Event, pk=kwargs['pk'])
|
new = get_object_or_404(models.Event, pk=kwargs['pk'])
|
||||||
new.pk = None
|
new.pk = None
|
||||||
@@ -114,3 +115,28 @@ class EventDuplicate(generic.RedirectView):
|
|||||||
item.save()
|
item.save()
|
||||||
|
|
||||||
return reverse_lazy('event_update', kwargs={'pk': new.pk})
|
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')
|
||||||
45
RIGS/templates/RIGS/event_archive.html
Normal file
45
RIGS/templates/RIGS/event_archive.html
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% load paginator from filters %}
|
||||||
|
|
||||||
|
{% block title %}Event Archive{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<h2>Event Archive</h2>
|
||||||
|
|
||||||
|
<div class="col-sm-12 col-md-6 pagination">
|
||||||
|
<form class="form-inline">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="start">Start</label>
|
||||||
|
<input type="date" name="start" id="start" value="{{ request.GET.start }}" placeholder="Start" class="form-control" />
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="end">End</label>
|
||||||
|
<input type="date" name="end" id="end" value="{% if request.GET.end %}{{ request.GET.end }}{% else %}{% now "Y-m-d" %}{% endif %}" placeholder="End" class="form-control" />
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" class="btn btn-primary" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if is_paginated %}
|
||||||
|
<div class="col-md-6 text-right">
|
||||||
|
{% paginator %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
{% with latest as events %}
|
||||||
|
{% include 'RIGS/event_table.html' %}
|
||||||
|
{% endwith %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if is_paginated %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="text-right">
|
||||||
|
{% paginator %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
13
RIGS/urls.py
13
RIGS/urls.py
@@ -1,6 +1,7 @@
|
|||||||
from django.conf.urls import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from RIGS import views, rigboard
|
from RIGS import views, rigboard
|
||||||
|
from django.views.generic import RedirectView
|
||||||
|
|
||||||
from PyRIGS.decorators import permission_required_with_403
|
from PyRIGS.decorators import permission_required_with_403
|
||||||
|
|
||||||
@@ -56,6 +57,8 @@ urlpatterns = patterns('',
|
|||||||
|
|
||||||
# Rigboard
|
# Rigboard
|
||||||
url(r'^rigboard/$', rigboard.RigboardIndex.as_view(), name='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<pk>\d+)/$',
|
url(r'^event/(?P<pk>\d+)/$',
|
||||||
permission_required_with_403('RIGS.view_event')(rigboard.EventDetail.as_view()),
|
permission_required_with_403('RIGS.view_event')(rigboard.EventDetail.as_view()),
|
||||||
name='event_detail'),
|
name='event_detail'),
|
||||||
@@ -69,11 +72,19 @@ urlpatterns = patterns('',
|
|||||||
permission_required_with_403('RIGS.change_event')(rigboard.EventUpdate.as_view()),
|
permission_required_with_403('RIGS.change_event')(rigboard.EventUpdate.as_view()),
|
||||||
name='event_update'),
|
name='event_update'),
|
||||||
url(r'^event/(?P<pk>\d+)/duplicate/$',
|
url(r'^event/(?P<pk>\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'),
|
name='event_duplicate'),
|
||||||
|
url(r'^event/archive/$', login_required()(rigboard.EventArchive.as_view()), name='event_archive'),
|
||||||
|
|
||||||
# API
|
# API
|
||||||
url(r'^api/(?P<model>\w+)/$', (views.SecureAPIRequest.as_view()), name="api_secure"),
|
url(r'^api/(?P<model>\w+)/$', (views.SecureAPIRequest.as_view()), name="api_secure"),
|
||||||
url(r'^api/(?P<model>\w+)/(?P<pk>\d+)/$', (views.SecureAPIRequest.as_view()), name="api_secure"),
|
url(r'^api/(?P<model>\w+)/(?P<pk>\d+)/$', (views.SecureAPIRequest.as_view()), name="api_secure"),
|
||||||
|
|
||||||
|
# Legacy URL's
|
||||||
|
url(r'^rig/show/(?P<pk>\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)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Rigboard<b class="caret"></b></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Rigboard<b class="caret"></b></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="{% url 'rigboard' %}">Rigboard</a></li>
|
<li><a href="{% url 'rigboard' %}">Rigboard</a></li>
|
||||||
<li><a href="#">Calendar</a></li>
|
<li><a href="{% url 'event_archive' %}">Archive</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{% if perms.RIGS.view_invoice %}
|
{% if perms.RIGS.view_invoice %}
|
||||||
|
|||||||
Reference in New Issue
Block a user