From 5c14ac1f580193ac8f4e9c0e06809cc7a991c2af Mon Sep 17 00:00:00 2001
From: chirac <chirac@arachne>
Date: Wed, 27 Jul 2016 03:36:28 +0200
Subject: [PATCH] PAginateurs sur l'historique

---
 cotisations/views.py                 | 10 ++++++++++
 machines/views.py                    | 14 ++++++++++++--
 re2o/settings.py                     |  4 +++-
 re2o/templates/re2o/aff_history.html | 15 +++++++++++++++
 topologie/views.py                   | 13 +++++++++++++
 users/views.py                       | 10 ++++++++++
 6 files changed, 63 insertions(+), 3 deletions(-)

diff --git a/cotisations/views.py b/cotisations/views.py
index 29162353..5debb53f 100644
--- a/cotisations/views.py
+++ b/cotisations/views.py
@@ -387,4 +387,14 @@ def history(request, object, id):
         messages.error(request, "Objet  inconnu")
         return redirect("/cotisations/")
     reversions = reversion.get_for_object(object_instance)
+    paginator = Paginator(reversions, PAGINATION_NUMBER)
+    page = request.GET.get('page')
+    try:
+        reversions = paginator.page(page)
+    except PageNotAnInteger:
+        # If page is not an integer, deliver first page.
+        reversions = paginator.page(1)
+    except EmptyPage:
+        # If page is out of range (e.g. 9999), deliver last page of results.
+        reversions = paginator.page(paginator.num_pages)
     return render(request, 're2o/history.html', {'reversions': reversions, 'object': object_instance})
diff --git a/machines/views.py b/machines/views.py
index b77250b1..5843a88f 100644
--- a/machines/views.py
+++ b/machines/views.py
@@ -22,7 +22,7 @@ import re
 from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm, BaseEditInterfaceForm, BaseEditMachineForm
 from .models import Machine, Interface, IpList, MachineType, Extension
 from users.models import User
-from re2o.settings import PAGINATION_NUMBER
+from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER
 
 def full_domain_validator(request, interface):
     """ Validation du nom de domaine, extensions dans type de machine, prefixe pas plus long que 63 caractères """
@@ -315,7 +315,7 @@ def del_extension(request):
 @permission_required('cableur')
 def index(request):
     machines_list = Machine.objects.order_by('pk')
-    paginator = Paginator(machines_list, PAGINATION_NUMBER)
+    paginator = Paginator(machines_list, PAGINATION_LARGE_NUMBER)
     page = request.GET.get('page')
     try:
         machines_list = paginator.page(page)
@@ -375,6 +375,16 @@ def history(request, object, id):
         messages.error(request, "Objet  inconnu")
         return redirect("/machines/")
     reversions = reversion.get_for_object(object_instance)
+    paginator = Paginator(reversions, PAGINATION_NUMBER)
+    page = request.GET.get('page')
+    try:
+        reversions = paginator.page(page)
+    except PageNotAnInteger:
+        # If page is not an integer, deliver first page.
+        reversions = paginator.page(1)
+    except EmptyPage:
+        # If page is out of range (e.g. 9999), deliver last page of results.
+        reversions = paginator.page(paginator.num_pages)
     return render(request, 're2o/history.html', {'reversions': reversions, 'object': object_instance})
 
 
diff --git a/re2o/settings.py b/re2o/settings.py
index 2d2d29bf..de49c713 100644
--- a/re2o/settings.py
+++ b/re2o/settings.py
@@ -133,4 +133,6 @@ RIGHTS_LINK = {
     'bofh' : ['bureau','trésorier'],
     }
 
-PAGINATION_NUMBER = 5
+PAGINATION_NUMBER = 25
+
+PAGINATION_LARGE_NUMBER = 8
diff --git a/re2o/templates/re2o/aff_history.html b/re2o/templates/re2o/aff_history.html
index d2019c67..10287f0d 100644
--- a/re2o/templates/re2o/aff_history.html
+++ b/re2o/templates/re2o/aff_history.html
@@ -1,3 +1,18 @@
+ {% if reversions.paginator %}
+ <ul class="pagination nav navbar-nav">
+    {% if reversions.has_previous %}
+            <li><a href="?page={{ reversions.previous_page_number }}">Suivants</a></li>
+    {% endif %}
+    {% for page in reversions.paginator.page_range %}
+        <li class="{% if reversions.number == page  %}active{% endif %}"><a href="?page={{page }}">{{ page }}</a></li>
+    {% endfor %}
+
+    {% if reversions.has_next %}
+        <li> <a href="?page={{ reversions.next_page_number }}">Précédents</a></li>
+    {% endif %}
+ </ul>
+ {% endif %}
+
 <table class="table table-striped">
     <thead>
         <tr>
diff --git a/topologie/views.py b/topologie/views.py
index 127add5f..cd1eca54 100644
--- a/topologie/views.py
+++ b/topologie/views.py
@@ -3,12 +3,15 @@ from django.contrib import messages
 from django.contrib.auth.decorators import login_required, permission_required
 from django.db import IntegrityError
 from django.db import transaction
+from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
 from reversion import revisions as reversion
 
 from topologie.models import Switch, Port, Room
 from topologie.forms import EditPortForm, EditSwitchForm, AddPortForm, EditRoomForm
 from users.views import form
 
+from re2o.settings import PAGINATION_NUMBER
+
 @login_required
 @permission_required('cableur')
 def index(request):
@@ -40,6 +43,16 @@ def history(request, object, id):
         messages.error(request, "Objet  inconnu")
         return redirect("/topologie/")
     reversions = reversion.get_for_object(object_instance)
+    paginator = Paginator(reversions, PAGINATION_NUMBER)
+    page = request.GET.get('page')
+    try:
+        reversions = paginator.page(page)
+    except PageNotAnInteger:
+        # If page is not an integer, deliver first page.
+        reversions = paginator.page(1)
+    except EmptyPage:
+        # If page is out of range (e.g. 9999), deliver last page of results.
+        reversions = paginator.page(paginator.num_pages)
     return render(request, 're2o/history.html', {'reversions': reversions, 'object': object_instance})
 
 @login_required
diff --git a/users/views.py b/users/views.py
index 979f983f..145d18f2 100644
--- a/users/views.py
+++ b/users/views.py
@@ -467,6 +467,16 @@ def history(request, object, id):
         messages.error(request, "Objet  inconnu")
         return redirect("/users/")
     reversions = reversion.get_for_object(object_instance)
+    paginator = Paginator(reversions, PAGINATION_NUMBER)
+    page = request.GET.get('page')
+    try:
+        reversions = paginator.page(page)
+    except PageNotAnInteger:
+        # If page is not an integer, deliver first page.
+        reversions = paginator.page(1)
+    except EmptyPage:
+        # If page is out of range (e.g. 9999), deliver last page of results.
+        reversions = paginator.page(paginator.num_pages)
     return render(request, 're2o/history.html', {'reversions': reversions, 'object': object_instance})