diff --git a/app/apps/transactions/urls.py b/app/apps/transactions/urls.py index 545e664..d483711 100644 --- a/app/apps/transactions/urls.py +++ b/app/apps/transactions/urls.py @@ -2,6 +2,10 @@ from django.urls import path import apps.transactions.views as views urlpatterns = [ + path("transactions/", views.transaction_all_index, name="transactions_all_index"), + path( + "transactions/list/", views.transaction_all_list, name="transactions_all_list" + ), path( "transactions/actions/pay", views.bulk_pay_transactions, diff --git a/app/apps/transactions/views/transactions.py b/app/apps/transactions/views/transactions.py index 4532384..00015db 100644 --- a/app/apps/transactions/views/transactions.py +++ b/app/apps/transactions/views/transactions.py @@ -2,17 +2,18 @@ import datetime from django.contrib import messages from django.contrib.auth.decorators import login_required +from django.core.paginator import Paginator from django.http import HttpResponse from django.shortcuts import render, get_object_or_404 from django.utils import timezone from django.utils.translation import gettext_lazy as _ -from django.views import View from django.views.decorators.csrf import csrf_exempt from django.views.decorators.http import require_http_methods from apps.common.decorators.htmx import only_htmx -from apps.transactions.forms import TransactionForm, TransferForm, InstallmentPlanForm +from apps.transactions.forms import TransactionForm, TransferForm from apps.transactions.models import Transaction +from apps.transactions.filters import TransactionsFilter @only_htmx @@ -150,3 +151,48 @@ def transaction_pay(request, transaction_id): f'{"paid" if new_is_paid else "unpaid"}, monthly_summary_update' ) return response + + +@login_required +@require_http_methods(["GET"]) +def transaction_all_index(request): + f = TransactionsFilter(request.GET) + return render(request, "transactions/pages/transactions.html", {"filter": f}) + + +@only_htmx +@login_required +@require_http_methods(["GET"]) +def transaction_all_list(request): + transactions = ( + Transaction.objects.prefetch_related( + "account", + "account__group", + "category", + "tags", + "account__exchange_currency", + "account__currency", + "installment_plan", + ) + .all() + .order_by("date") + ) + + f = TransactionsFilter(request.GET, queryset=transactions) + + page_number = request.GET.get("page", 1) + paginator = Paginator(f.qs, 100) + page_obj = paginator.get_page(page_number) + + return render( + request, + "transactions/fragments/list_all.html", + { + "page_obj": page_obj, + "paginator": paginator, + }, + ) + + # response.headers["HX-Push-Url"] = ( + # f"{reverse('transactions_all_index')}?{request.GET.urlencode()}" + # ) diff --git a/app/templates/includes/navbar.html b/app/templates/includes/navbar.html index 80f5973..aa56c06 100644 --- a/app/templates/includes/navbar.html +++ b/app/templates/includes/navbar.html @@ -34,13 +34,15 @@