Created base for 'home'
This commit is contained in:
parent
9a8cfd48e3
commit
cf3869c370
@ -31,6 +31,6 @@
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<a href="{% url 'expense_list' %}">Volver</a>
|
||||
<a href="{% url 'home' %}">Volver</a>
|
||||
</body>
|
||||
</html>
|
||||
54
expenses_manager/expenses/templates/expenses/home.html
Normal file
54
expenses_manager/expenses/templates/expenses/home.html
Normal 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>
|
||||
@ -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'),
|
||||
|
||||
@ -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):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user