From 2d7cd8cb685bc7588afc7aff865745f51519dc2b Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Wed, 16 Sep 2026 08:31:11 +0200 Subject: [PATCH] Permite marcar un traspaso y distinguirlo en la interfaz Sin esto el campo is_transfer no es alcanzable: no aparece en los formularios de gasto ni de ingreso, asi que nadie puede marcar un movimiento como traspaso. Ademas, un movimiento que no suma al total tiene que verse distinto o el usuario no entendera por que sus numeros no cuadran con la tabla. Se anade un distintivo "Traspaso" en el listado de gastos, en los ultimos movimientos de home y en los gastos recientes del dashboard, que son los tres sitios donde se listan movimientos sin agregarlos. El distintivo usa una variante nueva, .badge-neutral, en vez de reutilizar .badge-inactive: un traspaso es informacion, no un estado degradado, y pintarlo con el color de error o de cuenta inactiva daria a entender que algo va mal. Las variables que usa (--color-chip-bg y --color-text-muted) ya existen en los dos temas. Co-Authored-By: Claude Opus 5 --- expenses_manager/expenses/forms.py | 3 ++- expenses_manager/expenses/static/expenses/css/base.css | 7 +++++++ .../expenses/templates/expenses/dashboard.html | 7 ++++++- .../expenses/templates/expenses/expense_list.html | 7 ++++++- expenses_manager/expenses/templates/expenses/home.html | 7 ++++++- expenses_manager/expenses/views.py | 2 ++ 6 files changed, 29 insertions(+), 4 deletions(-) diff --git a/expenses_manager/expenses/forms.py b/expenses_manager/expenses/forms.py index 83ee34e..e2fed43 100644 --- a/expenses_manager/expenses/forms.py +++ b/expenses_manager/expenses/forms.py @@ -27,6 +27,7 @@ class ExpenseForm(forms.ModelForm): "category", "account", "tags", + "is_transfer", ] widgets = { "date": forms.DateInput(format="%Y-%m-%d", attrs={"type": "date"}), @@ -50,7 +51,7 @@ class AccountForm(forms.ModelForm): class IncomeForm(forms.ModelForm): class Meta: model = Income - fields = ["account", "name", "amount", "date"] + fields = ["account", "name", "amount", "date", "is_transfer"] widgets = {"date": forms.DateInput(format="%Y-%m-%d", attrs={"type": "date"})} def __init__(self, *args, **kwargs): diff --git a/expenses_manager/expenses/static/expenses/css/base.css b/expenses_manager/expenses/static/expenses/css/base.css index beed3c2..5031c8c 100644 --- a/expenses_manager/expenses/static/expenses/css/base.css +++ b/expenses_manager/expenses/static/expenses/css/base.css @@ -732,6 +732,13 @@ tr:hover { color: var(--color-danger-text); } +/* Etiqueta informativa, sin carga de error ni de éxito: marca un movimiento + como lo que es, no como un estado degradado. */ +.badge-neutral { + background-color: var(--color-chip-bg); + color: var(--color-text-muted); +} + .row-inactive { opacity: 0.55; } diff --git a/expenses_manager/expenses/templates/expenses/dashboard.html b/expenses_manager/expenses/templates/expenses/dashboard.html index b0ef7c4..5bfb08e 100644 --- a/expenses_manager/expenses/templates/expenses/dashboard.html +++ b/expenses_manager/expenses/templates/expenses/dashboard.html @@ -215,7 +215,12 @@ {{ exp.date|date:"d/m/Y" }} {{ exp.account.name }} - {{ exp.category.name }} + + {{ exp.category.name }} + {% if exp.is_transfer %} + Traspaso + {% endif %} + {{ exp.description|default:"-" }} {{ exp.amount|floatformat:2 }} diff --git a/expenses_manager/expenses/templates/expenses/expense_list.html b/expenses_manager/expenses/templates/expenses/expense_list.html index 10db769..d31d670 100644 --- a/expenses_manager/expenses/templates/expenses/expense_list.html +++ b/expenses_manager/expenses/templates/expenses/expense_list.html @@ -117,7 +117,12 @@ {% for expense in page_obj %} {{ expense.date }} - {{ expense.category.name }} + + {{ expense.category.name }} + {% if expense.is_transfer %} + Traspaso + {% endif %} + {{ expense.amount }} {{ expense.account.name }} diff --git a/expenses_manager/expenses/templates/expenses/home.html b/expenses_manager/expenses/templates/expenses/home.html index 06ff6ca..c5a9efc 100644 --- a/expenses_manager/expenses/templates/expenses/home.html +++ b/expenses_manager/expenses/templates/expenses/home.html @@ -96,7 +96,12 @@ {% for mov in movements %}
  • {{ mov.date }} - {{ mov.label }} + + {{ mov.label }} + {% if mov.is_transfer %} + Traspaso + {% endif %} + {% if mov.kind == 'income' %}+{% else %}−{% endif %}{{ mov.amount|floatformat:2 }}€ diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index c9864c1..7149529 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -255,6 +255,7 @@ def home(request): "label": e.category.name, "account": e.account.name, "amount": e.amount, + "is_transfer": e.is_transfer, } for e in recent_expenses ] @@ -265,6 +266,7 @@ def home(request): "label": i.name, "account": i.account.name, "amount": i.amount, + "is_transfer": i.is_transfer, } for i in recent_incomes ],