from django.db import models
from django.utils.translation import ugettext_lazy as _
from djmoney.models.fields import MoneyField
from eggplant.core.utils import generate_upload_path
[docs]def do_upload_product_image(inst, filename):
return generate_upload_path(inst, filename, dirname='product_images')
[docs]class Product(models.Model):
title = models.CharField(
_("title"),
max_length=512
)
description = models.TextField(
_("description"),
)
category = models.ForeignKey(
'market.ProductCategory',
verbose_name=_("category"),
)
price = MoneyField(
_("price"),
max_digits=12,
decimal_places=2,
)
stock = models.PositiveIntegerField(
_("stock"),
blank=True,
null=True,
default=1,
help_text=_("Items in stock, leave blank if endless quantity available.")
)
tax = models.ForeignKey('ProductTax', verbose_name=_("tax"))
enabled = models.BooleanField(_("enabled"), default=True)
image = models.ImageField(upload_to=do_upload_product_image, blank=True,
null=True)
def __str__(self):
return "{} {} ({})".format(self.id, self.title, self.category)
class Meta:
app_label = 'market'
[docs]class ProductCategory(models.Model):
title = models.CharField(max_length=70)
description = models.TextField(null=True, blank=True)
enabled = models.BooleanField(_("enabled"), default=True)
class Meta:
app_label = 'market'
def __str__(self):
return self.title
[docs]class ProductTax(models.Model):
title = models.CharField(
_("title"),
max_length=512
)
description = models.TextField(
_("description"),
)
enabled = models.BooleanField(_("enabled"), default=True)
tax = models.DecimalField(
_("tax"),
help_text=_("A factor, e.g. '0.25' adds 25% to value in order."),
max_digits=5,
decimal_places=4
)
class Meta:
app_label = 'market'
def __str__(self):
return "{} ({:f}%)".format(self.title, (self.tax * 100).normalize())