diff --git a/expenses_manager/expenses/templates/expenses/expense_form.html b/expenses_manager/expenses/templates/expenses/expense_form.html index 5828676..59d26c1 100644 --- a/expenses_manager/expenses/templates/expenses/expense_form.html +++ b/expenses_manager/expenses/templates/expenses/expense_form.html @@ -31,6 +31,6 @@ - Volver + Volver \ No newline at end of file diff --git a/expenses_manager/expenses/templates/expenses/home.html b/expenses_manager/expenses/templates/expenses/home.html new file mode 100644 index 0000000..fd2c857 --- /dev/null +++ b/expenses_manager/expenses/templates/expenses/home.html @@ -0,0 +1,54 @@ + + + + Home + + + + +

Resumen del mes

+ + +
+

Indicadores

+ + +
+ +
+ + +
+

Acciones

+ + +
+ + + \ No newline at end of file diff --git a/expenses_manager/expenses/urls.py b/expenses_manager/expenses/urls.py index 83c5986..97905a5 100644 --- a/expenses_manager/expenses/urls.py +++ b/expenses_manager/expenses/urls.py @@ -2,7 +2,8 @@ from . import views from django.urls import path urlpatterns = [ - path('', views.expense_list, name='expense_list'), + path('', views.home, name='home'), + # path('', views.expense_list, name='expense_list'), path('new/', views.expense_create, name='expense_create'), path('/edit/', views.expense_edit, name='expense_edit'), path('/delete/', views.expense_delete, name='expense_delete'), diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index 7732076..785d0ef 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -34,7 +34,65 @@ def _get_int(value): @login_required def home(request): - return render(request, 'expenses/home.html') + today = date.today() + year = today.year + month = today.month + + expenses = Expense.objects.filter( + owner=request.user, + date__year=year, + date__month=month, + ) + + # Current KPIs + total_amount = expenses.aggregate( + total=Sum('amount') + )['total'] or 0 + + expense_count = expenses.count() + + # ------------------ + # Previous period + # ------------------ + if month == 1: + prev_year = year - 1 + prev_month = 12 + else: + prev_year = year + prev_month = month - 1 + + previous_expenses = Expense.objects.filter( + owner=request.user, + date__year=prev_year, + date__month=prev_month, + ) + + previous_total = ( + previous_expenses.aggregate(total=Sum('amount'))['total'] or 0 + ) + + difference = total_amount - previous_total + + percentage = (difference / previous_total) * 100 if previous_total else None + + # ------------------ + # Top categories + # ------------------ + top_categories = ( + expenses + .values('category__name') + .annotate(total=Sum('amount')) + .order_by('-total')[:3] + ) + + return render(request, 'expenses/home.html', { + 'kpi_total': total_amount, + 'kpi_amount': expense_count, + 'kpi_difference': difference, + 'kpi_percentage': percentage, + 'kpi_previous_total': previous_total, + 'top_categories': top_categories, + }) @login_required def expense_list(request):