Some improvements to the visual part of the dashboard

This commit is contained in:
JKuijperM 2026-01-23 22:38:08 +01:00
parent 2a692534d0
commit ff87956fd5
2 changed files with 70 additions and 32 deletions

View File

@ -15,6 +15,12 @@
<!-- Filters --> <!-- Filters -->
<!-- ========================= --> <!-- ========================= -->
<div>
<a href="{% url 'dashboard' %}?period=this_month">Este mes</a> |
<a href="{% url 'dashboard' %}?period=last_month">Mes anterior</a> |
<a href="{% url 'dashboard' %}?period=this_year">Este año</a>
</div>
<form method="get" class="filters"> <form method="get" class="filters">
<label> <label>
Año: Año:
@ -70,7 +76,7 @@
<div class="kpi"> <div class="kpi">
<h3>Total</h3> <h3>Total</h3>
<p>{{ kpi_total }}</p> <p>{{ kpi_total }}</p>
</div> </div>
<div class="kpi"> <div class="kpi">
@ -96,17 +102,16 @@
</p> </p>
{% endif %} {% endif %}
<p> <div>
Diferencia: Diferencia:
{% if kpi_difference > 0 %} {% if kpi_trend == "up" %}
<span></span> <span style="color:red;"> {{ kpi_difference|floatformat:2 }}€</span>
{% elif kpi_difference < 0 %} {% elif kpi_trend == "down" %}
<span></span> <span style="color:green;"> {{ kpi_difference|floatformat:2 }}€</span>
{% else %} {% else %}
<span>=</span> <span>0€</span>
{% endif %} {% endif %}
<strong>{{ kpi_difference|floatformat:2 }}</strong> </div>
</p>
<p> <p>
Variación: Variación:
{% if kpi_percentage is not None %} {% if kpi_percentage is not None %}
@ -123,26 +128,30 @@
<!-- ========================= --> <!-- ========================= -->
<h2>Gastos por categoría</h2> <h2>Gastos por categoría</h2>
<table> {% if not by_category %}
<thead> <p>No hay gastos para este periodo.</p>
<tr> {% else %}
<th>Categoría</th> <table>
<th>Total</th> <thead>
</tr>
</thead>
<tbody>
{% for row in by_category %}
<tr> <tr>
<td>{{ row.category__name }}</td> <th>Categoría</th>
<td>{{ row.total }}</td> <th>Total</th>
</tr> </tr>
{% empty %} </thead>
<tr> <tbody>
<td colspan="2">Sin datos</td> {% for row in by_category %}
</tr> <tr>
{% endfor %} <td>{{ row.category__name }}</td>
</tbody> <td>{{ row.total }}</td>
</table> </tr>
{% empty %}
<tr>
<td colspan="2">Sin datos</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% if compare_enabled %} {% if compare_enabled %}
<h3>Comparativa por categoría</h3> <h3>Comparativa por categoría</h3>
@ -164,9 +173,9 @@
<td>{{ row.previous }}</td> <td>{{ row.previous }}</td>
<td> <td>
{% if row.difference > 0 %} {% if row.difference > 0 %}
▲ {{ row.difference }} <span style="color:red;">▲ {{ row.difference }}</span>
{% elif row.difference < 0 %} {% elif row.difference < 0 %}
▼ {{ row.difference }} <span style="color:green;">▼ {{ row.difference }}</span>
{% else %} {% else %}
= =
{% endif %} {% endif %}

View File

@ -115,6 +115,7 @@ def dashboard(request):
# ------------------ # ------------------
year = _get_int(request.GET.get('year')) year = _get_int(request.GET.get('year'))
month = _get_int(request.GET.get('month')) month = _get_int(request.GET.get('month'))
period = request.GET.get('period')
current_year = date.today().year current_year = date.today().year
@ -128,6 +129,24 @@ def dashboard(request):
# ----------------- # -----------------
expenses = Expense.objects.filter(owner=request.user) expenses = Expense.objects.filter(owner=request.user)
today = date.today()
if period == 'this_month':
selected_year = today.year
selected_month = today.month
elif period == 'last_month':
if today.month == 1:
selected_year = today.year - 1
selected_month = 12
else:
selected_year = today.year
selected_month = today.month
elif period == 'this_year':
selected_year = today.year
selected_month = None
expenses_filtered = expenses.filter(date__year=selected_year) expenses_filtered = expenses.filter(date__year=selected_year)
if selected_month: if selected_month:
@ -211,7 +230,7 @@ def dashboard(request):
if compare_enabled: if compare_enabled:
previous_expenses = Expense.objects.filter(owner=request.user) previous_expenses = Expense.objects.filter(owner=request.user)
if selected_month: if selected_month:
# Monthly compare # Monthly compare
if selected_month == 1: if selected_month == 1:
@ -239,7 +258,16 @@ def dashboard(request):
difference = total_amount - previous_total difference = total_amount - previous_total
if previous_total: if previous_total:
percentage = (difference / previous_total) * 100 percentage = (difference / previous_total) * 100
kpi_trend = None
if difference is not None:
if difference > 0:
kpi_trend = 'up'
elif difference < 0:
kpi_trend = 'down'
else:
kpi_trend = 'equal'
# ------------------ # ------------------
# Previous expenses by category # Previous expenses by category
@ -295,4 +323,5 @@ def dashboard(request):
'kpi_difference': difference, 'kpi_difference': difference,
'kpi_percentage': percentage, 'kpi_percentage': percentage,
'category_comparison': category_comparison, 'category_comparison': category_comparison,
'kpi_trend': kpi_trend,
}) })