from django.db import models from django.core.validators import * from django.contrib.auth.models import User from decimal import Decimal class TransactionType(models.Model): """ Type for a :class:`Transaction`. States how the money has been added to the account and if somebody needs to check if it was payed. """ name = models.CharField(max_length=100) needsCheck = models.BooleanField(default=True) def __unicode__(self): return unicode(self.name) class Transaction(models.Model): """Represents a money transaction into the users account. """ user = models.ForeignKey(User) transactionType = models.ForeignKey(TransactionType, verbose_name='Typ') dateTime = models.DateTimeField() amount = models.DecimalField(max_digits=8, decimal_places=2, validators=[MinValueValidator(Decimal("0.01"))]) checked = models.BooleanField(default=False) def __unicode__(self): return u"%s for user %s (%s),%schecked" % (self.amount, self.user, self.transactionType, (self.checked and " " or " not ")) # TODO: Find out what would happen if parent save/delete does not like us def save(self, *args, **kwargs): profile = self.user.get_profile() if self.id == None: # insert profile.balance += self.amount else: # update oldobj = Transaction.objects.get(id=self.id) profile.balance += (self.amount-oldobj.amount) profile.save() super(Transaction, self).save(*args, **kwargs) def delete(self, *args, **kwargs): profile = self.user.get_profile() profile.balance -= self.amount profile.save() super(Transaction, self).delete(*args, **kwargs)