|
|
|
@ -11,12 +11,14 @@ from django.db import transaction
@@ -11,12 +11,14 @@ from django.db import transaction
|
|
|
|
|
import PIL.Image |
|
|
|
|
import StringIO |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Account(models.Model): |
|
|
|
|
user = models.OneToOneField(User) |
|
|
|
|
card_number = models.CharField(max_length=32, unique=True, blank=True, |
|
|
|
|
null=True, verbose_name=_('card number')) |
|
|
|
|
pin = models.CharField(max_length=32, blank=True, verbose_name=_('PIN')) |
|
|
|
|
daily_digest = models.BooleanField(verbose_name = _('daily digest'), default=True) |
|
|
|
|
daily_digest = models.BooleanField(verbose_name=_('daily digest'), |
|
|
|
|
default=True) |
|
|
|
|
credit = models.DecimalField(max_digits=5, decimal_places=2, default=0, |
|
|
|
|
verbose_name=_('credit')) |
|
|
|
|
|
|
|
|
@ -36,8 +38,8 @@ class Account(models.Model):
@@ -36,8 +38,8 @@ class Account(models.Model):
|
|
|
|
|
else: |
|
|
|
|
# When we already have an account, |
|
|
|
|
# we can add the number form LDAP (mongo shit) |
|
|
|
|
if hasattr(instance, 'ldap_user') \ |
|
|
|
|
and instance.ldap_user.attrs.has_key('employeenumber'): |
|
|
|
|
if (hasattr(instance, 'ldap_user') and |
|
|
|
|
'employeenumber' in instance.ldap_user.attrs): |
|
|
|
|
instance.account.card_number = \ |
|
|
|
|
instance.ldap_user.attrs['employeenumber'][0] |
|
|
|
|
instance.account.save() |
|
|
|
@ -61,7 +63,8 @@ class Account(models.Model):
@@ -61,7 +63,8 @@ class Account(models.Model):
|
|
|
|
|
if min(products.values()) <= 0: |
|
|
|
|
raise ValueError('Non-positive amount in products dict.') |
|
|
|
|
|
|
|
|
|
total_value = sum(map(lambda p: p.price * products[p], products.keys())) |
|
|
|
|
total_value = sum(map(lambda p: p.price * products[p], |
|
|
|
|
products.keys())) |
|
|
|
|
if self.credit - total_value >= MAX_DEBIT: |
|
|
|
|
desc = '' |
|
|
|
|
for product in products.keys(): |
|
|
|
@ -70,7 +73,8 @@ class Account(models.Model):
@@ -70,7 +73,8 @@ class Account(models.Model):
|
|
|
|
|
amount = products[product] |
|
|
|
|
|
|
|
|
|
logentry = SalesLogEntry(account=self, product=product, |
|
|
|
|
count=amount, unit_price=product.price) |
|
|
|
|
count=amount, |
|
|
|
|
unit_price=product.price) |
|
|
|
|
logentry.save() |
|
|
|
|
|
|
|
|
|
desc += '%d x %s\n' % (amount, product.name) |
|
|
|
@ -95,6 +99,7 @@ class Account(models.Model):
@@ -95,6 +99,7 @@ class Account(models.Model):
|
|
|
|
|
def check_pin(self, pin): |
|
|
|
|
return pin == self.pin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProductCategory(models.Model): |
|
|
|
|
name = models.CharField(max_length=32, unique=True, |
|
|
|
|
verbose_name=_('name')) |
|
|
|
@ -108,6 +113,7 @@ class ProductCategory(models.Model):
@@ -108,6 +113,7 @@ class ProductCategory(models.Model):
|
|
|
|
|
verbose_name = _('product category') |
|
|
|
|
verbose_name_plural = _('product categories') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Product(models.Model): |
|
|
|
|
name = models.CharField(max_length=32, unique=True, |
|
|
|
|
verbose_name=_('name')) |
|
|
|
@ -129,6 +135,7 @@ class Product(models.Model):
@@ -129,6 +135,7 @@ class Product(models.Model):
|
|
|
|
|
verbose_name = _('product') |
|
|
|
|
verbose_name_plural = _('products') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@receiver(pre_save, sender=Product) |
|
|
|
|
def product_post_save_handler(sender, instance, **kwargs): |
|
|
|
|
img = instance.image |
|
|
|
@ -159,6 +166,7 @@ class ProductBarcode(models.Model):
@@ -159,6 +166,7 @@ class ProductBarcode(models.Model):
|
|
|
|
|
verbose_name = _('barcode') |
|
|
|
|
verbose_name_plural = _('barcodes') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Transaction(models.Model): |
|
|
|
|
account = models.ForeignKey(Account, verbose_name=_('account')) |
|
|
|
|
timestamp = models.DateTimeField(auto_now_add=True, |
|
|
|
@ -172,6 +180,7 @@ class Transaction(models.Model):
@@ -172,6 +180,7 @@ class Transaction(models.Model):
|
|
|
|
|
verbose_name = _('transaction') |
|
|
|
|
verbose_name_plural = _('transactions') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SalesLogEntry(models.Model): |
|
|
|
|
account = models.ForeignKey(Account, verbose_name=_('account')) |
|
|
|
|
product = models.ForeignKey(Product, verbose_name=_('product')) |
|
|
|
@ -183,10 +192,12 @@ class SalesLogEntry(models.Model):
@@ -183,10 +192,12 @@ class SalesLogEntry(models.Model):
|
|
|
|
|
|
|
|
|
|
def __unicode__(self): |
|
|
|
|
return '%dx %s - %s' % (self.count, self.product, self.account) |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
verbose_name = _('sales log entry') |
|
|
|
|
verbose_name_plural = _('sales log entries') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@receiver(pre_delete, sender=SalesLogEntry) |
|
|
|
|
def logentry_pre_delete_handler(sender, instance, **kwargs): |
|
|
|
|
SUBJECT = ugettext_noop('Cancellation') |
|
|
|
@ -196,4 +207,3 @@ def logentry_pre_delete_handler(sender, instance, **kwargs):
@@ -196,4 +207,3 @@ def logentry_pre_delete_handler(sender, instance, **kwargs):
|
|
|
|
|
instance.unit_price * instance.count, |
|
|
|
|
SUBJECT, DESC % (instance.count, instance.product.name) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|