Files
RasadDam_Backend/apps/product/models.py

157 lines
4.3 KiB
Python

from django.db import models
from apps.core.models import BaseModel
from apps.authorization.models import UserRelations
# Create your models here.
class ReferenceProduct(BaseModel):
""" Reference product - like: rice """
name = models.CharField(max_length=250, default='empty') # noqa
type_choices = (
('F', 'Free'), # free product
('G', 'Governmental') # government product
)
type = models.CharField(max_length=3, choices=type_choices)
img = models.CharField(max_length=100, default='empty')
def __str__(self):
return f'name: {self.name} - type: {self.type}'
def save(self, *args, **kwargs):
super(ReferenceProduct, self).save(*args, **kwargs)
class Product(BaseModel):
""" Child of reference product - like: brown rice """
name = models.CharField(max_length=250, default='empty') # noqa
type_choices = (
('F', 'Free'), # free product
('G', 'Governmental') #
)
type = models.CharField(max_length=3, choices=type_choices)
img = models.CharField(max_length=100, default='empty')
reference = models.ForeignKey(
ReferenceProduct,
on_delete=models.CASCADE,
related_name='reference_product',
null=True
)
def __str__(self):
return f'name: {self.name} - type: {self.type}'
def save(self, *args, **kwargs):
super(Product, self).save(*args, **kwargs)
class Attribute(BaseModel):
"""
every reference product have multiple attributes
"""
reference_product = models.ForeignKey(
ReferenceProduct,
on_delete=models.CASCADE,
related_name='reference_attribute',
null=True
)
name = models.CharField(max_length=100, default='empty')
type_choices = (
('K', 'Per Kilo'),
('', ''),
)
type = models.CharField(
max_length=10,
choices=type_choices,
default='empty',
help_text='type of attribute like: calculate product by kilogram'
)
def __str__(self):
return f'{self.reference_product.name} - {self.name}'
def save(self, *args, **kwargs):
return super(Attribute, self).save(*args, **kwargs)
class AttributeValue(BaseModel):
"""
every child product should have attribute value for
reference product attribute
"""
product = models.ForeignKey(
Product,
on_delete=models.CASCADE,
related_name='product_attribute_value',
null=True
)
attribute = models.ForeignKey(
Attribute,
on_delete=models.CASCADE,
related_name='attribute_value',
null=True
)
value = models.IntegerField(default=0)
def __str__(self):
return f'{self.product.name} - {self.attribute.name} - {self.value}'
def save(self, *args, **kwargs):
return super(AttributeValue, self).save(*args, **kwargs)
class Broker(BaseModel):
""" Broker for product """
reference_product = models.ForeignKey(
ReferenceProduct,
on_delete=models.CASCADE,
related_name='product_broker',
null=True
)
organization_relations = models.ForeignKey(
UserRelations,
on_delete=models.CASCADE,
related_name='product_organization',
null=True
)
calculation_choices = (
('K', 'Per Kilo'),
('', ''),
)
calculation_strategy = models.CharField(
max_length=3,
choices=calculation_choices,
default='empty'
)
required = models.BooleanField(default=False)
def __str__(self):
return f'{self.organization_relations.organization.name} - {self.reference_product.name}'
def save(self, *args, **kwargs):
return super(Broker, self).save(*args, **kwargs)
class SaleUnit(BaseModel):
""" Units of product for sale """
reference_product = models.ForeignKey(
ReferenceProduct,
on_delete=models.CASCADE,
related_name='sale_unit',
null=True
)
unit_choices = (
('10P', '10KG Package'),
('50P', '50KG Package'),
('', ''),
)
unit = models.CharField(max_length=10, choices=unit_choices, null=True)
variation_coefficient = models.IntegerField(default=0)
required = models.BooleanField(default=False)
def __str__(self):
return f'{self.reference_product} - {self.unit} - {self.variation_coefficient}'