+
+ {% if not request.is_ajax %}
+
{{ object.name }}
+
+ {% endif %}
+
+
- Name
- {{ object.name }}
@@ -32,4 +33,20 @@
-{% endblock %}
\ No newline at end of file
+{% endblock %}
+
+{% if request.is_ajax %}
+ {% block footer %}
+
+
+ Lasted edited at {{ object.last_edited_at|date:"SHORT_DATE_FORMAT" }} by {{ user }}
+
+
+
+ {% endblock %}
+{% endif %}
\ No newline at end of file
diff --git a/RIGS/templates/RIGS/person_list.html b/RIGS/templates/RIGS/person_list.html
index 46093097..c7da422f 100644
--- a/RIGS/templates/RIGS/person_list.html
+++ b/RIGS/templates/RIGS/person_list.html
@@ -1,19 +1,35 @@
{% 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 %}People list{% endblock %}
+{% block title %}People{% endblock %}
{% block content %}
-
People
-
New
-
{% include 'pagination.html' %}
+
+
{% paginator %}
|
- Name |
+ Name |
Email |
Phone |
Notes |
@@ -28,7 +44,12 @@
{{ person.email }} |
{{ person.phone }} |
{{ person.notes|yesno|capfirst }} |
- Add buttons |
+
+
+
+
+
+ |
{% empty %}
@@ -39,6 +60,6 @@
-
{% include 'pagination.html' %}
+
{% paginator %}
{% endblock %}
\ No newline at end of file
diff --git a/RIGS/templatetags/filters.py b/RIGS/templatetags/filters.py
index d692e41b..a6be41ae 100644
--- a/RIGS/templatetags/filters.py
+++ b/RIGS/templatetags/filters.py
@@ -2,7 +2,6 @@ from django import template
from django import forms
from django.forms.forms import NON_FIELD_ERRORS
from django.forms.util import ErrorDict
-from reversion.revisions import RevisionManager
register = template.Library()
@@ -22,9 +21,67 @@ def nice_errors(form, non_field_msg='General form errors'):
nice_errors[key] = errors
return nice_errors
-def lastedit(model):
- if RevisionManager.is_registered(model):
- versions = RevisionManager.get_for_object(model)
- return versions[0].createdAt
+def paginator(context, adjacent_pages=3):
+ """
+ To be used in conjunction with the object_list generic view.
+
+ Adds pagination context variables for use in displaying first, adjacent and
+ last page links in addition to those created by the object_list generic
+ view.
+
+ """
+ page = context['page_obj']
+ paginator = context['paginator']
+ startPage = max(page.number - adjacent_pages, 1)
+ if startPage <= 3: startPage = 1
+ endPage = page.number + adjacent_pages + 1
+ if endPage >= paginator.num_pages - 1: endPage = paginator.num_pages + 1
+ page_numbers = [n for n in range(startPage, endPage) \
+ if n > 0 and n <= paginator.num_pages]
+
+ dict = {
+ 'request': context['request'],
+ 'is_paginated': paginator.num_pages > 0,
+ 'page_obj': page,
+ 'paginator': paginator,
+ 'results': paginator.per_page,
+ 'page_numbers': page_numbers,
+ 'show_first': 1 not in page_numbers,
+ 'show_last': paginator.num_pages not in page_numbers,
+ 'first': 1,
+ 'last': paginator.num_pages,
+ 'has_next': page.has_next(),
+ 'has_previous': page.has_previous(),
+ }
+
+ if page.has_next():
+ dict['next'] = page.next_page_number()
+ if page.has_previous():
+ dict['previous'] = page.previous_page_number()
+
+ return dict
+register.inclusion_tag('pagination.html', takes_context=True)(paginator)
+
+@register.simple_tag
+def url_replace(request, field, value):
+
+ dict_ = request.GET.copy()
+
+ dict_[field] = value
+
+ return dict_.urlencode()
+
+@register.simple_tag
+def orderby(request, field, attr):
+
+ dict_ = request.GET.copy()
+
+ if dict_[field] == attr:
+ if not dict_[field].startswith("-"):
+ dict_[field] = "-" + attr
+ else:
+ dict_[field] = attr
else:
- return "No version model saved"
\ No newline at end of file
+ dict_[field] = attr
+
+ return dict_.urlencode()
\ No newline at end of file
diff --git a/RIGS/views.py b/RIGS/views.py
index a8a43daa..2cf03ef0 100644
--- a/RIGS/views.py
+++ b/RIGS/views.py
@@ -1,7 +1,9 @@
from django.http.response import HttpResponseRedirect
from django.core.urlresolvers import reverse_lazy
from django.views import generic
-import models
+from django.views.decorators.csrf import csrf_exempt
+from django.db.models import Q
+from RIGS import models
# Create your views here.
def login(request, **kwargs):
@@ -26,6 +28,18 @@ class CloseModal(generic.TemplateView):
class PersonIndex(generic.ListView):
model = models.Person
+ 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(email__icontains=q))
+ else:
+ object_list = self.model.objects.all()
+ orderBy = self.request.GET.get('orderBy', None)
+ if orderBy is not None:
+ object_list = object_list.order_by(orderBy)
+ return object_list
class PersonDetail(generic.DetailView):
model = models.Person
diff --git a/db.sqlite3 b/db.sqlite3
index 803adbdf..50c06965 100644
Binary files a/db.sqlite3 and b/db.sqlite3 differ
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 00000000..95f5a6b5
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,6 @@
+Django==1.7.1
+PyMySQL==0.6.2
+django-debug-toolbar==1.2.2
+django-registration-redux==1.1
+django-reversion==1.8.5
+sqlparse==0.1.13
\ No newline at end of file
diff --git a/templates/base.html b/templates/base.html
index 69688764..c394f59c 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -126,7 +126,6 @@
var dd = this.getDate().toString();
return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]); // padding
};
-
@@ -136,6 +135,16 @@
+
{% block js %}
{% endblock %}