Move statement sum and diff to properties instead of model fields

Fix #32
This commit is contained in:
Edgar P. Burkhart 2025-01-03 14:25:40 +01:00
parent 26f97dd179
commit a6fc7f5a92
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
2 changed files with 29 additions and 27 deletions

View file

@ -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",
),
]

View file

@ -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: