diff --git a/RIGS/models.py b/RIGS/models.py
index 394c9d18..c082e9c0 100644
--- a/RIGS/models.py
+++ b/RIGS/models.py
@@ -86,6 +86,8 @@ class Venue(models.Model, RevisionMixin):
three_phase_available = models.BooleanField(default=False)
notes = models.TextField(blank=True, null=True)
+ address = models.TextField(blank=True, null=True)
+
def __str__(self):
string = self.name
if self.notes and len(self.notes) > 0:
diff --git a/RIGS/templates/RIGS/venue_detail.html b/RIGS/templates/RIGS/venue_detail.html
new file mode 100644
index 00000000..73511815
--- /dev/null
+++ b/RIGS/templates/RIGS/venue_detail.html
@@ -0,0 +1,52 @@
+{% extends request.is_ajax|yesno:"base_ajax.html,base.html" %}
+{% load widget_tweaks %}
+
+{% block title %}{{ object.name }}{% endblock %}
+
+{% block content %}
+
+ {% if not request.is_ajax %}
+
{{ object.name }}
+
+ {% endif %}
+
+
+
+ - Name
+ - {{ object.name }}
+
+ - Phone
+ - {{ object.phone }}
+
+ - Email
+ - {{ object.email }}
+
+ - Address
+ - {{ object.address|linebreaksbr }}
+
+ - Notes
+ - {{ object.notes|linebreaksbr }}
+
+
+
+
+{% endblock %}
+
+{% if request.is_ajax %}
+ {% block footer %}
+
+
+ Lasted edited at {{ object.last_edited_at|date:"SHORT_DATE_FORMAT" }} by {{ object.last_edited_by }}
+
+
+
+ {% endblock %}
+{% endif %}
\ No newline at end of file
diff --git a/RIGS/templates/RIGS/venue_form.html b/RIGS/templates/RIGS/venue_form.html
new file mode 100644
index 00000000..d24a0a22
--- /dev/null
+++ b/RIGS/templates/RIGS/venue_form.html
@@ -0,0 +1,68 @@
+{% extends request.is_ajax|yesno:'base_ajax.html,base.html' %}
+{% load widget_tweaks %}
+
+{% block title %}{{ object.pk|yesno:"Edit,Add" }} Venue{% endblock %}
+
+{% block content %}
+
+
{{ object.pk|yesno:"Edit,Add" }} Venue
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/RIGS/templates/RIGS/venue_list.html b/RIGS/templates/RIGS/venue_list.html
new file mode 100644
index 00000000..2d787a7a
--- /dev/null
+++ b/RIGS/templates/RIGS/venue_list.html
@@ -0,0 +1,68 @@
+{% extends request.is_ajax|yesno:"base_ajax.html,base.html" %}
+{% load widget_tweaks %}
+{% load paginator from filters %}
+{% load url_replace from filters %}
+{% load orderby from filters %}
+
+{% block title %}Venues{% endblock %}
+
+{% block content %}
+
+
+
{% paginator %}
+
+
+
+
+ |
+ Name |
+ Email |
+ Phone |
+ Notes |
+ |
+
+
+
+ {% for object in object_list %}
+
+ | {{ object.pk }} |
+ {{ object.name }} |
+ {{ object.email }} |
+ {{ object.phone }} |
+ {{ object.notes|yesno|capfirst }} |
+
+
+
+
+
+ |
+
+ {% empty %}
+
+ |
+ No venues found |
+
+ {% endfor %}
+
+
+
+
{% paginator %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/RIGS/urls.py b/RIGS/urls.py
index 65bd7bc7..eb7d1398 100644
--- a/RIGS/urls.py
+++ b/RIGS/urls.py
@@ -38,5 +38,19 @@ urlpatterns = patterns('',
url(r'^organisations/(?P\d+)/edit/$',
permission_required_with_403('RIGS.change_organisation')(views.OrganisationUpdate.as_view()),
name='organisation_update'),
+
+ # Venues
+ url(r'^venues/$',
+ permission_required_with_403('RIGS.view_venue')(views.VenueList.as_view()),
+ name='venue_list'),
+ url(r'^venues/add/$',
+ permission_required_with_403('RIGS.add_venue')(views.VenueCreate.as_view()),
+ name='venue_create'),
+ url(r'^venues/(?P\d+)/$',
+ permission_required_with_403('RIGS.view_venue')(views.VenueDetail.as_view()),
+ name='venue_detail'),
+ url(r'^venues/(?P\d+)/edit/$',
+ permission_required_with_403('RIGS.change_venue')(views.VenueUpdate.as_view()),
+ name='venue_update'),
)
diff --git a/RIGS/views.py b/RIGS/views.py
index 8484754f..60222db0 100644
--- a/RIGS/views.py
+++ b/RIGS/views.py
@@ -12,18 +12,23 @@ def login(request, **kwargs):
return HttpResponseRedirect(request.REQUEST.get('next', '/'))
else:
from django.contrib.auth.views import login
+
return login(request)
+
"""
Called from a modal window (e.g. when an item is submitted to an event/invoice).
May optionally also include some javascript in a success message to cause a load of
the new information onto the page.
"""
+
+
class CloseModal(generic.TemplateView):
template_name = 'closemodal.html'
def get_context_data(self, **kwargs):
from django.contrib import messages
+
return {'messages', messages.get_messages(self.request)}
@@ -42,9 +47,11 @@ class PersonList(generic.ListView):
object_list = object_list.order_by(orderBy)
return object_list
+
class PersonDetail(generic.DetailView):
model = models.Person
+
class PersonCreate(generic.CreateView):
model = models.Person
@@ -53,6 +60,7 @@ class PersonCreate(generic.CreateView):
'pk': self.object.pk,
})
+
class PersonUpdate(generic.UpdateView):
model = models.Person
@@ -77,9 +85,11 @@ class OrganisationList(generic.ListView):
object_list = object_list.order_by(orderBy)
return object_list
+
class OrganisationDetail(generic.DetailView):
model = models.Organisation
+
class OrganisationCreate(generic.CreateView):
model = models.Organisation
@@ -88,10 +98,49 @@ class OrganisationCreate(generic.CreateView):
'pk': self.object.pk,
})
+
class OrganisationUpdate(generic.UpdateView):
model = models.Organisation
def get_success_url(self):
return reverse_lazy('organisation_detail', kwargs={
'pk': self.object.pk,
+ })
+
+
+class VenueList(generic.ListView):
+ model = models.Venue
+ paginate_by = 20
+
+ def get_queryset(self):
+ q = self.request.GET.get('q', "")
+ if len(q) >= 3:
+ object_list = self.model.objects.filter(Q(name__icontains=q) | Q(address__icontains=q))
+ else:
+ object_list = self.model.objects.all()
+ orderBy = self.request.GET.get('orderBy', "")
+ if orderBy is not "":
+ object_list = object_list.order_by(orderBy)
+ return object_list
+
+
+class VenueDetail(generic.DetailView):
+ model = models.Venue
+
+
+class VenueCreate(generic.CreateView):
+ model = models.Venue
+
+ def get_success_url(self):
+ return reverse_lazy('venue_detail', kwargs={
+ 'pk': self.object.pk,
+ })
+
+
+class VenueUpdate(generic.UpdateView):
+ model = models.Venue
+
+ def get_success_url(self):
+ return reverse_lazy('venue_detail', kwargs={
+ 'pk': self.object.pk,
})
\ No newline at end of file
diff --git a/db.sqlite3 b/db.sqlite3
index c9bb615e..4845327b 100644
Binary files a/db.sqlite3 and b/db.sqlite3 differ