From a6fc7f5a921162ae5f3f20cdccbaf8c77931f8b0 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Fri, 3 Jan 2025 14:25:40 +0100 Subject: [PATCH] Move statement sum and diff to properties instead of model fields Fix #32 --- ...ove_statement_diff_remove_statement_sum.py | 20 +++++++++++ nummi/statement/models.py | 36 +++++-------------- 2 files changed, 29 insertions(+), 27 deletions(-) create mode 100644 nummi/statement/migrations/0003_remove_statement_diff_remove_statement_sum.py diff --git a/nummi/statement/migrations/0003_remove_statement_diff_remove_statement_sum.py b/nummi/statement/migrations/0003_remove_statement_diff_remove_statement_sum.py new file mode 100644 index 0000000..d76d0f8 --- /dev/null +++ b/nummi/statement/migrations/0003_remove_statement_diff_remove_statement_sum.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2 on 2025-01-03 13:23 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("statement", "0002_alter_statement_table"), + ] + + operations = [ + migrations.RemoveField( + model_name="statement", + name="diff", + ), + migrations.RemoveField( + model_name="statement", + name="sum", + ), + ] diff --git a/nummi/statement/models.py b/nummi/statement/models.py index c5e0337..fe661a8 100644 --- a/nummi/statement/models.py +++ b/nummi/statement/models.py @@ -4,7 +4,7 @@ from uuid import uuid4 from account.models import AccountModel from django.core.validators import FileExtensionValidator -from django.db import models, transaction +from django.db import models from django.urls import reverse from django.utils.translation import gettext_lazy as _ from media.utils import get_path @@ -22,20 +22,6 @@ class Statement(AccountModel): start_value = models.DecimalField( max_digits=12, decimal_places=2, default=0, verbose_name=_("Start value") ) - diff = models.DecimalField( - max_digits=12, - decimal_places=2, - default=0, - verbose_name=_("Difference"), - editable=False, - ) - sum = models.DecimalField( - max_digits=12, - decimal_places=2, - default=0, - verbose_name=_("Transaction difference"), - editable=False, - ) file = models.FileField( upload_to=get_path, validators=[FileExtensionValidator(["pdf"])], @@ -54,21 +40,17 @@ class Statement(AccountModel): if _prever.file and _prever.file != self.file: Path(_prever.file.path).unlink(missing_ok=True) - with transaction.atomic(): - for trans in self.transaction_set.all(): - trans.save() - - self.diff = self.value - self.start_value - self.sum = ( - self.transaction_set.aggregate(sum=models.Sum("value")).get("sum", 0) or 0 - ) super().save(*args, **kwargs) - def update_sum(self): - self.sum = ( - self.transaction_set.aggregate(sum=models.Sum("value")).get("sum", 0) or 0 + @property + def sum(self): + return self.transaction_set.aggregate(sum=models.Sum("value", default=0)).get( + "sum" ) - super().save() + + @property + def diff(self): + return self.value - self.start_value def delete(self, *args, **kwargs): if self.file: