From 1be8333eb60b5806be6e55bd913a04269c385f2d Mon Sep 17 00:00:00 2001 From: Niklas Brachmann Date: Thu, 2 Jan 2014 22:14:46 +0100 Subject: [PATCH] Credit change is now atomic --- cash/models.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cash/models.py b/cash/models.py index 5b0e6a7..0c931a2 100644 --- a/cash/models.py +++ b/cash/models.py @@ -1,4 +1,3 @@ - from django.conf import settings from django.db import models from django.core.files import File @@ -9,6 +8,7 @@ from django.dispatch import receiver from django_auth_ldap.backend import populate_user from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_noop +from django.db import transaction import PIL import StringIO @@ -43,13 +43,16 @@ class Account(models.Model): instance.ldap_user.attrs['employeenumber'][0] instance.account.save() + @transaction.atomic def change_credit(self, amount, subject, desc): - self.credit += amount + # For atomicity fetch current value first + cur = Account.objects.filter(pk=self.pk)[0] + self.credit = cur.credit + amount self.save() - transaction = Transaction(account=self, subject=subject, - amount=amount, description=desc) - transaction.save() + trans = Transaction(account=self, subject=subject, + amount=amount, description=desc) + trans.save() def buy_products(self, products): # TODO place it somewhere else