diff --git a/expenses_manager/expenses/models.py b/expenses_manager/expenses/models.py
index e9a74f2..d36b273 100644
--- a/expenses_manager/expenses/models.py
+++ b/expenses_manager/expenses/models.py
@@ -1,5 +1,7 @@
+from decimal import Decimal
from django.db import models
from django.conf import settings
+from django.db.models import Sum
from django.db.models.fields import related
class Category(models.Model):
@@ -45,6 +47,13 @@ class Account(models.Model):
class Meta:
ordering = ['name']
+ def current_balance(self):
+ expenses_total = (
+ self.expenses.aggregate(total=Sum('amount'))['total']
+ or Decimal('0')
+ )
+ return self.initial_balance - expenses_total
+
def __str__(self):
return self.name
diff --git a/expenses_manager/expenses/templates/expenses/dashboard.html b/expenses_manager/expenses/templates/expenses/dashboard.html
index 6cab4a3..18d4ffb 100644
--- a/expenses_manager/expenses/templates/expenses/dashboard.html
+++ b/expenses_manager/expenses/templates/expenses/dashboard.html
@@ -9,7 +9,12 @@
- Dashboard
+
+ Dashboard
+ {% if selected_account_obj %}
+ — {{ selected_account_obj.name }}
+ {% endif %}
+
@@ -57,6 +62,18 @@
Comparar con periodo anterior
+
+
+
@@ -76,6 +93,11 @@
+
+
Saldo actual
+ {{ kpi_balance|floatformat:2 }}€
+
+
Total
{{ kpi_total }}€
@@ -90,6 +112,7 @@
Categorías
{{ kpi_categories }}
+
{% if compare_enabled %}
diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py
index 464b355..13730f5 100644
--- a/expenses_manager/expenses/views.py
+++ b/expenses_manager/expenses/views.py
@@ -272,6 +272,12 @@ def dashboard(request):
current_year = date.today().year
+ account_id = _get_int(request.GET.get('account'))
+ accounts = Account.objects.filter(
+ owner=request.user,
+ active=True,
+ )
+
selected_year = year or current_year
selected_month = month
@@ -282,6 +288,20 @@ def dashboard(request):
# -----------------
expenses = Expense.objects.filter(owner=request.user)
+ selected_account_obj = None
+ kpi_balance = None
+ if account_id:
+ expenses = expenses.filter(account_id=account_id)
+ selected_account_obj = accounts.filter(id=account_id).first()
+ kpi_balance = selected_account_obj.current_balance()
+ else:
+ kpi_balance = (
+ Accounts.objects.filter(owner.request.user, active=True)
+ .aggregate(total=Sum('initial_balance'))['total'] or 0
+ ) - (
+ expenses.aggregate(total=Sum('amount'))['total'] or 0
+ )
+
today = date.today()
if period == 'this_month':
@@ -482,6 +502,10 @@ def dashboard(request):
'kpi_percentage': percentage,
'category_comparison': category_comparison,
'kpi_trend': kpi_trend,
+ 'accounts':accounts,
+ 'selected_account': account_id,
+ 'selected_account_obj': selected_account_obj,
+ 'kpi_balance': kpi_balance,
})