From fb6e0f379e65aad58a301129cba0034cba80c40f Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Wed, 21 Jan 2026 20:14:29 +0100 Subject: [PATCH] Prepared view to calculate the previous data --- .../templates/expenses/dashboard.html | 11 +++- expenses_manager/expenses/views.py | 59 ++++++++++++++++++- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/expenses_manager/expenses/templates/expenses/dashboard.html b/expenses_manager/expenses/templates/expenses/dashboard.html index 1f6e38e..d8ef8ee 100644 --- a/expenses_manager/expenses/templates/expenses/dashboard.html +++ b/expenses_manager/expenses/templates/expenses/dashboard.html @@ -81,6 +81,12 @@ + + + + +
+ \ No newline at end of file diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index dea71fa..59b3994 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -1,7 +1,7 @@ from datetime import date -from re import M from .models import Expense from .forms import ExpenseForm +# from dateutli.relativedelta import relativedelta from django.db.models import Sum from django.contrib.auth import login @@ -115,7 +115,9 @@ def dashboard(request): current_year = date.today().year selected_year = year or current_year - selected_month = month + selected_month = month + + compare = request.GET.get("compare") == "1" # ------------------ # Queryset base @@ -188,10 +190,61 @@ def dashboard(request): .order_by('year') ) - # Prepare data fot ploting in chart + # ------------------ + # Chart + # ----------------- chart_labels = months chart_totals = [row['total'] for row in by_month] + # ------------------ + # Compare period + # ----------------- + + previous_expenses = expenses + + if month and year: + if month == 1: + prev_year = year - 1 + prev_month = 12 + else: + prev_year = year + prev_month = month - 1 + previous_expenses = previous_expenses.filter( + date__year=prev_year, + date__month=prev_month + ) + elif year and month is None: + prev_year = year - 1 + previous_expenses = previous_expenses.filter( + date__year=prev_year + ) + else: + today = date.today() + year = today.year + month = today.month + + if month == 1: + prev_year = year - 1 + prev_month = 12 + else: + prev_year = year + prev_month = month - 1 + + previous_expenses = previous_expenses.filter( + date__year=prev_year, + date__month=prev_month + ) + + previous_total = ( + previous_expenses.aggregate(total=Sum('amount'))['total'] or 0 + ) + + difference = total_amount - previous_total + precentage = ( + (difference / previous_total) * 100 if previous_total else None + ) + + # Send the data to the dashboard return render(request, 'expenses/dashboard.html', { 'by_category': by_category,