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
+
+
+
+
+ | Categoría |
+ Actual |
+ Anterior |
+ Diferencia |
+
+
+
+ {% for row in category_comparison %}
+
+ | {{ row.category }} |
+ {{ row.current }} |
+ {{ row.previous }} |
+
+ {% if row.difference > 0 %}
+ ▲ {{ row.difference }}
+ {% elif row.difference < 0 %}
+ ▼ {{ row.difference }}
+ {% else %}
+ =
+ {% endif %}
+ |
+
+ {% endfor %}
+
+
+ {% 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