From 28096cd4902194d87d1b5e6ef00d0432e1e8f64c Mon Sep 17 00:00:00 2001 From: Herculino Trotta Date: Sat, 30 Nov 2024 02:18:02 -0300 Subject: [PATCH] feat: paginate exchange rates --- app/apps/currencies/urls.py | 5 - app/apps/currencies/views/exchange_rates.py | 12 ++- .../exchange_rates/fragments/list.html | 3 +- .../exchange_rates/fragments/table.html | 95 +++++++++++++++++-- app/templates/exchange_rates/pages/index.html | 2 +- 5 files changed, 99 insertions(+), 18 deletions(-) diff --git a/app/apps/currencies/urls.py b/app/apps/currencies/urls.py index d93a4ef..f05d3fe 100644 --- a/app/apps/currencies/urls.py +++ b/app/apps/currencies/urls.py @@ -23,11 +23,6 @@ urlpatterns = [ views.exchange_rates_list_pair, name="exchange_rates_list_pair", ), - path( - "exchange-rates/pair//", - views.exchange_rates_list_pair, - name="exchange_rates_list_pair", - ), path("exchange-rates/add/", views.exchange_rate_add, name="exchange_rate_add"), path( "exchange-rates//edit/", diff --git a/app/apps/currencies/views/exchange_rates.py b/app/apps/currencies/views/exchange_rates.py index 624933f..7312672 100644 --- a/app/apps/currencies/views/exchange_rates.py +++ b/app/apps/currencies/views/exchange_rates.py @@ -1,5 +1,6 @@ from django.contrib import messages from django.contrib.auth.decorators import login_required +from django.core.paginator import Paginator from django.db.models import F, CharField, Value from django.db.models.functions import Concat from django.http import HttpResponse @@ -50,7 +51,10 @@ def exchange_rates_list(request): @only_htmx @login_required @require_http_methods(["GET"]) -def exchange_rates_list_pair(request, from_currency=None, to_currency=None): +def exchange_rates_list_pair(request): + from_currency = request.GET.get("from") + to_currency = request.GET.get("to") + if from_currency and to_currency: exchange_rates = ExchangeRate.objects.filter( from_currency__code=from_currency, to_currency__code=to_currency @@ -58,11 +62,17 @@ def exchange_rates_list_pair(request, from_currency=None, to_currency=None): else: exchange_rates = ExchangeRate.objects.all().order_by("-date") + page_number = request.GET.get("page", 1) + paginator = Paginator(exchange_rates, 100) + page_obj = paginator.get_page(page_number) + return render( request, "exchange_rates/fragments/table.html", { "exchange_rates": exchange_rates, + "paginator": paginator, + "page_obj": page_obj, "from_currency": from_currency, "to_currency": to_currency, }, diff --git a/app/templates/exchange_rates/fragments/list.html b/app/templates/exchange_rates/fragments/list.html index 41134c1..cb5cc28 100644 --- a/app/templates/exchange_rates/fragments/list.html +++ b/app/templates/exchange_rates/fragments/list.html @@ -27,7 +27,8 @@ {% for pair in pairings %} diff --git a/app/templates/exchange_rates/fragments/table.html b/app/templates/exchange_rates/fragments/table.html index a105bb9..0b4c007 100644 --- a/app/templates/exchange_rates/fragments/table.html +++ b/app/templates/exchange_rates/fragments/table.html @@ -1,11 +1,7 @@ {% load currency_display %} {% load i18n %} -{% if from_currency and to_currency %} -
-{% else %} -
-{% endif %} - {% if exchange_rates %} +
+ {% if page_obj %}
@@ -17,7 +13,7 @@ - {% for exchange_rate in exchange_rates %} + {% for exchange_rate in page_obj %} - - - + + + {% endfor %} @@ -54,4 +50,83 @@ {% else %} {% endif %} + + {% if page_obj.has_other_pages %} +
+ + + +
+ {% endif %} diff --git a/app/templates/exchange_rates/pages/index.html b/app/templates/exchange_rates/pages/index.html index 5527f7a..1afd684 100644 --- a/app/templates/exchange_rates/pages/index.html +++ b/app/templates/exchange_rates/pages/index.html @@ -4,5 +4,5 @@ {% block title %}{% translate 'Exchange Rates' %}{% endblock %} {% block content %} -
+
{% endblock %}
@@ -43,9 +39,9 @@ _="install prompt_swal">
{{ exchange_rate.date|date:"SHORT_DATETIME_FORMAT" }}{{ exchange_rate.from_currency.code }} x {{ exchange_rate.to_currency.code }}1 {{ exchange_rate.from_currency.code }} ≅ {% currency_display amount=exchange_rate.rate prefix=exchange_rate.to_currency.prefix suffix=exchange_rate.to_currency.suffix decimal_places=exchange_rate.to_currency.decimal_places%}{{ exchange_rate.date|date:"SHORT_DATETIME_FORMAT" }}{{ exchange_rate.from_currency.code }} x {{ exchange_rate.to_currency.code }}1 {{ exchange_rate.from_currency.code }} ≅ {% currency_display amount=exchange_rate.rate prefix=exchange_rate.to_currency.prefix suffix=exchange_rate.to_currency.suffix decimal_places=exchange_rate.to_currency.decimal_places%}