Created base for 'home'
This commit is contained in:
parent
9a8cfd48e3
commit
cf3869c370
@ -31,6 +31,6 @@
|
|||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<a href="{% url 'expense_list' %}">Volver</a>
|
<a href="{% url 'home' %}">Volver</a>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</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
|
from django.urls import path
|
||||||
|
|
||||||
urlpatterns = [
|
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('new/', views.expense_create, name='expense_create'),
|
||||||
path('<int:pk>/edit/', views.expense_edit, name='expense_edit'),
|
path('<int:pk>/edit/', views.expense_edit, name='expense_edit'),
|
||||||
path('<int:pk>/delete/', views.expense_delete, name='expense_delete'),
|
path('<int:pk>/delete/', views.expense_delete, name='expense_delete'),
|
||||||
|
|||||||
@ -34,7 +34,65 @@ def _get_int(value):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def home(request):
|
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
|
@login_required
|
||||||
def expense_list(request):
|
def expense_list(request):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user