from django.conf import settings from django.db import models from django.core.files import File from django.contrib.auth.models import User from django.utils.translation import ugettext_lazy as _ class Account(models.Model): user = models.OneToOneField( User ) card_number = models.CharField( verbose_name=_('card number'), max_length=32, unique=True, blank=True, null=True, ) pin = models.CharField( verbose_name=_('PIN'), max_length=32, blank=True, ) daily_digest = models.BooleanField( verbose_name=_('daily digest'), default=True, ) credit = models.DecimalField( verbose_name=_('credit'), max_digits=5, decimal_places=2, default=0, ) debit_limit = models.DecimalField( verbose_name=_('debit limit'), max_digits=5, decimal_places=2, default=None, blank=True, null=True, ) avatar = models.ImageField( verbose_name=_('avatar'), upload_to='avatars', blank=True, null=True, ) def __str__(self): return self.user.username class Meta: verbose_name = _('account') verbose_name_plural = _('accounts') class ProductCategory(models.Model): name = models.CharField( verbose_name=_('name'), max_length=32, unique=True, ) comment = models.CharField( verbose_name=_('comment'), max_length=128, blank=True, ) def __str__(self): return '%s (%s)' % (self.name, self.comment) class Meta: verbose_name = _('product category') verbose_name_plural = _('product categories') class Product(models.Model): name = models.CharField( verbose_name=_('name'), max_length=32, unique=True, ) price = models.DecimalField( verbose_name=_('price'), max_digits=5, decimal_places=2, ) active = models.BooleanField( verbose_name=_('active'), default=True, ) category = models.ForeignKey( ProductCategory, verbose_name=_('category'), blank=True, null=True, ) image = models.ImageField( verbose_name=_('image'), upload_to='products', blank=True, null=True, ) image_thumbnail = models.ImageField( verbose_name=_('image'), upload_to='products_thumb', blank=True, null=True, ) def __unicode__(self): return self.name class Meta: verbose_name = _('product') verbose_name_plural = _('products') class ProductBarcode(models.Model): barcode = models.CharField( verbose_name=_('barcode'), max_length=32, unique=True, ) comment = models.CharField( verbose_name=_('comment'), max_length=128, blank=True, ) product = models.ForeignKey( Product, verbose_name=_('product'), ) def __unicode__(self): return self.barcode class Meta: verbose_name = _('barcode') verbose_name_plural = _('barcodes') class Transaction(models.Model): account = models.ForeignKey( Account, verbose_name=_('account'), ) timestamp = models.DateTimeField( verbose_name=_('timestamp'), auto_now_add=True, ) subject = models.CharField( verbose_name=_('subject'), max_length=32, ) description = models.TextField( verbose_name=_('description'), ) amount = models.DecimalField( verbose_name=_('amount'), max_digits=5, decimal_places=2, ) class Meta: 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'), ) count = models.IntegerField( verbose_name=_('count'), ) unit_price = models.DecimalField( verbose_name=_('unit price'), max_digits=5, decimal_places=2, ) timestamp = models.DateTimeField( verbose_name=_('timestamp'), auto_now_add=True, ) 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')