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)


