diff --git a/expenses_manager/expenses/templates/expenses/dashboard.html b/expenses_manager/expenses/templates/expenses/dashboard.html index 32af6c0..a7a8277 100644 --- a/expenses_manager/expenses/templates/expenses/dashboard.html +++ b/expenses_manager/expenses/templates/expenses/dashboard.html @@ -95,7 +95,7 @@ Total anterior: {{ kpi_previous_total|floatformat:2 }}

{% endif %} - +

Diferencia: {% if kpi_difference > 0 %} @@ -144,6 +144,39 @@ + {% if compare_enabled %} +

Comparativa por categoría

+ + + + + + + + + + + + {% for row in category_comparison %} + + + + + + + {% endfor %} + +
CategoríaActualAnteriorDiferencia
{{ row.category }}{{ row.current }}{{ row.previous }} + {% if row.difference > 0 %} + ▲ {{ row.difference }} + {% elif row.difference < 0 %} + ▼ {{ row.difference }} + {% else %} + = + {% endif %} +
+ {% endif %} +
diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index 8b2ddb4..14f315d 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -207,6 +207,7 @@ def dashboard(request): previous_total = None difference = None percentage = None + category_comparison = None if compare_enabled: previous_expenses = Expense.objects.filter(owner=request.user) @@ -240,6 +241,41 @@ def dashboard(request): if previous_total: percentage = (difference / previous_total) * 100 + # ------------------ + # Previous expenses by category + # ------------------ + + previous_by_category = ( + previous_expenses + .values('category__name') + .annotate(total=Sum('amount')) + ) + + current_map = { + row['category__name']: row['total'] + for row in by_category + } + + previous_map = { + row['category__name']: row['total'] + for row in previous_by_category + } + + all_categories = set(current_map.keys()) | set(previous_map.keys()) + + category_comparison = [] + for category in all_categories: + current_total = current_map.get(category, 0) + previous_total_cat = previous_map.get(category, 0) + + difference = current_total - previous_total_cat + + category_comparison.append({ + 'category': category, + 'current': current_total, + 'previous': previous_total_cat, + 'difference': difference, + }) # Send the data to the dashboard return render(request, 'expenses/dashboard.html', { @@ -258,4 +294,5 @@ def dashboard(request): 'kpi_previous_total': previous_total, 'kpi_difference': difference, 'kpi_percentage': percentage, + 'category_comparison': category_comparison, }) \ No newline at end of file