You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

198 lines
4.6 KiB

from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
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,
on_delete=models.CASCADE,
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,
on_delete=models.CASCADE,
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,
on_delete=models.CASCADE,
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,
on_delete=models.CASCADE,
verbose_name=_("account"),
)
product = models.ForeignKey(
Product,
on_delete=models.CASCADE,
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")