diff options
Diffstat (limited to 'postgresqleu')
-rw-r--r-- | postgresqleu/invoices/views.py | 25 | ||||
-rw-r--r-- | postgresqleu/util/pagination.py | 27 |
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) |