summaryrefslogtreecommitdiff
path: root/postgresqleu
diff options
context:
space:
mode:
Diffstat (limited to 'postgresqleu')
-rw-r--r--postgresqleu/invoices/views.py25
-rw-r--r--postgresqleu/util/pagination.py27
2 files changed, 29 insertions, 23 deletions
diff --git a/postgresqleu/invoices/views.py b/postgresqleu/invoices/views.py
index 8389cfaf..200b409f 100644
--- a/postgresqleu/invoices/views.py
+++ b/postgresqleu/invoices/views.py
@@ -1,4 +1,3 @@
-from django.core.paginator import Paginator, EmptyPage, InvalidPage
from django.shortcuts import render, get_object_or_404
from django.forms.models import inlineformset_factory
from django.forms import ModelMultipleChoiceField
@@ -15,6 +14,7 @@ from datetime import datetime, timedelta
from decimal import Decimal
from postgresqleu.util.decorators import user_passes_test_or_error
+from postgresqleu.util.pagination import simple_pagination
from .models import Invoice, InvoiceRow, InvoiceHistory, InvoicePaymentMethod, VatRate
from .models import InvoiceRefund
from .forms import InvoiceForm, InvoiceRowForm, RefundForm
@@ -54,28 +54,7 @@ def _homeview(request, invoice_objects, unpaid=False, pending=False, deleted=Fal
})
# Render a list of all invoices
- paginator = Paginator(invoice_objects, 50)
-
- try:
- page = int(request.GET.get("page", "1"))
- except ValueError:
- page = 1
-
- try:
- invoices = paginator.page(page)
- except (EmptyPage, InvalidPage):
- invoices = paginator.page(paginator.num_pages)
-
- if paginator.num_pages > 15:
- if page < paginator.num_pages - 15:
- firstpage = max(1, page - 7)
- lastpage = firstpage + 15
- else:
- lastpage = min(paginator.num_pages + 1, page + 8)
- firstpage = lastpage - 15
- page_range = list(range(firstpage, lastpage))
- else:
- page_range = paginator.page_range
+ (invoices, paginator, page_range) = simple_pagination(request, invoice_objects, 50)
has_pending = Invoice.objects.filter(finalized=False).exists()
has_unpaid = Invoice.objects.filter(finalized=True, paidat__isnull=False).exists()
diff --git a/postgresqleu/util/pagination.py b/postgresqleu/util/pagination.py
new file mode 100644
index 00000000..47a5e3a6
--- /dev/null
+++ b/postgresqleu/util/pagination.py
@@ -0,0 +1,27 @@
+from django.core.paginator import Paginator, EmptyPage, InvalidPage
+
+
+def simple_pagination(request, objects, num_per_page):
+ paginator = Paginator(objects, num_per_page)
+ try:
+ page = int(request.GET.get('page', '1'))
+ except ValueError:
+ page = 1
+
+ try:
+ queryset = paginator.page(page)
+ except (EmptyPage, InvalidPage):
+ queryset = paginator.page(paginator.num_pages)
+
+ if paginator.num_pages > 15:
+ if page < paginator.num_pages - 13:
+ firstpage = max(1, page - 7)
+ lastpage = firstpage + 15
+ else:
+ lastpage = min(paginator.num_pages + 1, page + 8)
+ firstpage = lastpage - 15
+ page_range = list(range(firstpage, lastpage))
+ else:
+ page_range = paginator.page_range
+
+ return (queryset, paginator, page_range)