From e14469963645e72c9b4ad3a54f6ea4a84b984a6a Mon Sep 17 00:00:00 2001 From: Scott <461566709@qq.com> Date: Mon, 7 Apr 2025 11:00:29 +0930 Subject: [PATCH 1/2] Fix the invoices refresh button function --- assets/scripts/tableify.js | 26 +++++++++++++++++ backend/finance/api/invoices/fetch.py | 28 +++++++++++++++++-- .../invoices/single/dashboard/dashboard.html | 3 +- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/assets/scripts/tableify.js b/assets/scripts/tableify.js index 559988b32..37d72f536 100644 --- a/assets/scripts/tableify.js +++ b/assets/scripts/tableify.js @@ -34,6 +34,11 @@ window.Tableify = class Tableify { this.handleSortButtonClick(colName); }); }); + + // Handle the refresh button click event + document.getElementById('refresh_btn').addEventListener('click', () => { + this.refreshData(); + }); } handleSortButtonClick(colName, parentId) { @@ -55,6 +60,27 @@ window.Tableify = class Tableify { this.redraw(); // Redraw the table with updated sorting } + getFilterParams() { + let params = {}; + + // Add filters to params from the filters object + for (const [colName, filterValues] of Object.entries(this.filters)) { + params[colName] = filterValues.join(','); + } + + return params; + } + + // Refresh data by triggering a GET request with the current filters + refreshData() { + const params = this.getFilterParams(); + const url = "/api/invoices/single/fetch"; + const queryString = new URLSearchParams(params).toString(); + const fullUrl = `${url}?${queryString}` ; + + htmx.ajax('GET', fullUrl, { target: '#table_body', swap: 'outerHTML' }); + } + redraw() { const rows = this.table.find("tbody tr"); rows.show(); // Show all rows initially diff --git a/backend/finance/api/invoices/fetch.py b/backend/finance/api/invoices/fetch.py index 2a945a0e4..a85637f73 100644 --- a/backend/finance/api/invoices/fetch.py +++ b/backend/finance/api/invoices/fetch.py @@ -1,5 +1,7 @@ from django.shortcuts import render, redirect from django.views.decorators.http import require_http_methods +from datetime import datetime +from django.db.models import Q from backend.decorators import web_require_scopes from backend.finance.models import Invoice @@ -14,10 +16,32 @@ def fetch_all_invoices(request: HtmxHttpRequest): if not request.htmx: return redirect("finance:invoices:single:dashboard") + due_date = request.GET.get("due_date") + invoice_id = request.GET.get("invoice-id") + client_name = request.GET.get("client_name") + amount = request.GET.get("amount") + status = request.GET.get("status") + + query = Q() + if invoice_id: + query &= Q(id=invoice_id) + if client_name: + query &= Q(client_name__icontains=client_name) + if amount: + query &= Q(discount_amount__icontains=amount) + if status: + query &= Q(status=status) + # If the time range filtering function is enabled, use this function to perform a time range search + # if due_date: + # date_range = due_date.split(',') + # date_start = datetime.strptime(date_range[0], "%d/%m/%Y") + # date_end = datetime.strptime(date_range[1], "%d/%m/%Y") + # query &= Q(date_due__range=[date_start, date_end]) + if request.user.logged_in_as_team: - invoices = Invoice.objects.filter(organization=request.user.logged_in_as_team) + invoices = Invoice.objects.filter(organization=request.user.logged_in_as_team).filter(query) else: - invoices = Invoice.objects.filter(user=request.user) + invoices = Invoice.objects.filter(user=request.user).filter(query) # Get filter and sort parameters from the request # sort_by = request.GET.get("sort") diff --git a/frontend/templates/pages/invoices/single/dashboard/dashboard.html b/frontend/templates/pages/invoices/single/dashboard/dashboard.html index ed6a8bff7..7436778c4 100644 --- a/frontend/templates/pages/invoices/single/dashboard/dashboard.html +++ b/frontend/templates/pages/invoices/single/dashboard/dashboard.html @@ -44,8 +44,7 @@ hx-swap="outerHTML" hx-trigger="click" hx-indicator="#refresh_btn" - hx-target="#table_body" - hx-get="{% url 'api:finance:invoices:single:fetch' %}"> + hx-target="#table_body"> From 6b3126eaf66479913259dd206a3a653747ab88d4 Mon Sep 17 00:00:00 2001 From: Scott <461566709@qq.com> Date: Tue, 8 Apr 2025 13:10:16 +0930 Subject: [PATCH 2/2] Fix the front code requests url redirection --- assets/scripts/tableify.js | 2 +- backend/finance/api/invoices/fetch.py | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/assets/scripts/tableify.js b/assets/scripts/tableify.js index 37d72f536..b47738c5e 100644 --- a/assets/scripts/tableify.js +++ b/assets/scripts/tableify.js @@ -74,7 +74,7 @@ window.Tableify = class Tableify { // Refresh data by triggering a GET request with the current filters refreshData() { const params = this.getFilterParams(); - const url = "/api/invoices/single/fetch"; + const url = "/api/invoices/single/fetch/"; const queryString = new URLSearchParams(params).toString(); const fullUrl = `${url}?${queryString}` ; diff --git a/backend/finance/api/invoices/fetch.py b/backend/finance/api/invoices/fetch.py index a85637f73..ff636b5f1 100644 --- a/backend/finance/api/invoices/fetch.py +++ b/backend/finance/api/invoices/fetch.py @@ -31,12 +31,11 @@ def fetch_all_invoices(request: HtmxHttpRequest): query &= Q(discount_amount__icontains=amount) if status: query &= Q(status=status) - # If the time range filtering function is enabled, use this function to perform a time range search - # if due_date: - # date_range = due_date.split(',') - # date_start = datetime.strptime(date_range[0], "%d/%m/%Y") - # date_end = datetime.strptime(date_range[1], "%d/%m/%Y") - # query &= Q(date_due__range=[date_start, date_end]) + if due_date: + date_range = due_date.split(',') + date_start = datetime.strptime(date_range[0], "%d/%m/%Y") + date_end = datetime.strptime(date_range[1], "%d/%m/%Y") + query &= Q(date_due__range=[date_start, date_end]) if request.user.logged_in_as_team: invoices = Invoice.objects.filter(organization=request.user.logged_in_as_team).filter(query)