From 8c0225a2979522a3017029e9cad41a87e264873d Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Wed, 16 Sep 2026 08:30:01 +0200 Subject: [PATCH] Anade el campo is_transfer a gastos e ingresos Un traspaso entre cuentas propias se registra hoy como dos movimientos: un gasto en la cuenta de origen y un ingreso en la de destino. Los saldos cuadran, pero el gasto infla los analisis (KPIs, graficos, objetivos) con dinero que nunca ha salido del patrimonio del usuario. Marcar el movimiento hace falta en los dos modelos, no en uno solo. Una "categoria de traspaso" cubriria unicamente la mitad de la operacion, porque Income no tiene categoria; de ahi el booleano en ambos. El campo solo se anade aqui: ninguna consulta lo usa todavia, asi que este commit no cambia ningun numero de la aplicacion. Co-Authored-By: Claude Opus 5 --- ..._expense_is_transfer_income_is_transfer.py | 23 +++++++++++++++++++ expenses_manager/expenses/models.py | 21 +++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 expenses_manager/expenses/migrations/0013_expense_is_transfer_income_is_transfer.py diff --git a/expenses_manager/expenses/migrations/0013_expense_is_transfer_income_is_transfer.py b/expenses_manager/expenses/migrations/0013_expense_is_transfer_income_is_transfer.py new file mode 100644 index 0000000..1f6fd3d --- /dev/null +++ b/expenses_manager/expenses/migrations/0013_expense_is_transfer_income_is_transfer.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.10 on 2026-09-15 10:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('expenses', '0012_alter_account_options_alter_category_options_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='expense', + name='is_transfer', + field=models.BooleanField(default=False, help_text='Márcalo si este movimiento solo mueve dinero entre cuentas propias. No contará como gasto ni como ingreso en los análisis, pero sí afectará al saldo de la cuenta.', verbose_name='Es un traspaso entre cuentas'), + ), + migrations.AddField( + model_name='income', + name='is_transfer', + field=models.BooleanField(default=False, help_text='Márcalo si este movimiento solo mueve dinero entre cuentas propias. No contará como gasto ni como ingreso en los análisis, pero sí afectará al saldo de la cuenta.', verbose_name='Es un traspaso entre cuentas'), + ), + ] diff --git a/expenses_manager/expenses/models.py b/expenses_manager/expenses/models.py index e6dc33b..14ca8d8 100644 --- a/expenses_manager/expenses/models.py +++ b/expenses_manager/expenses/models.py @@ -228,6 +228,16 @@ class Expense(models.Model): related_name="expenses", ) + is_transfer = models.BooleanField( + default=False, + verbose_name="Es un traspaso entre cuentas", + help_text=( + "Márcalo si este movimiento solo mueve dinero entre cuentas propias. " + "No contará como gasto ni como ingreso en los análisis, pero sí " + "afectará al saldo de la cuenta." + ), + ) + created_at = models.DateField(auto_now_add=True) class Meta: @@ -246,6 +256,17 @@ class Income(models.Model): name = models.CharField(max_length=150) amount = models.DecimalField(max_digits=12, decimal_places=2) date = models.DateField() + + is_transfer = models.BooleanField( + default=False, + verbose_name="Es un traspaso entre cuentas", + help_text=( + "Márcalo si este movimiento solo mueve dinero entre cuentas propias. " + "No contará como gasto ni como ingreso en los análisis, pero sí " + "afectará al saldo de la cuenta." + ), + ) + created_at = models.DateTimeField(auto_now_add=True) class Meta: