Created base for 'home'

This commit is contained in:
JKuijperM 2026-01-23 23:44:10 +01:00
parent 9a8cfd48e3
commit cf3869c370
4 changed files with 116 additions and 3 deletions

View File

@ -31,6 +31,6 @@
</button>
</form>
<a href="{% url 'expense_list' %}">Volver</a>
<a href="{% url 'home' %}">Volver</a>
</body>
</html>

View File

@ -0,0 +1,54 @@
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Resumen del mes</h1>
<!-- KPIs -->
<section>
<h2>Indicadores</h2>
<ul>
<li>
<strong>Total gastado:</strong>
{{ kpi_total }}
</li>
<li>
<strong>Nº de gastos:</strong>
{{ kpi_difference }}
</li>
<li>
<strong>Variación (%):</strong>
{% if kpi_percentage is not None %}
{{ kpi_percentage|floatformat:2 }} %
{% else %}
N/A
{% endif %}
</li>
</ul>
</section>
<hr>
<!-- Actions -->
<section>
<h2>Acciones</h2>
<ul>
<li>
<a href="{% url 'dashboard' %}">Ir al dashboard</a>
</li>
<li>
<a href="{% url 'expense_create' %}">Añadir gasto</a>
</li>
</ul>
</section>
</body>
</html>

View File

@ -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('<int:pk>/edit/', views.expense_edit, name='expense_edit'),
path('<int:pk>/delete/', views.expense_delete, name='expense_delete'),

View File

@ -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):