Skip to content

Instantly share code, notes, and snippets.

@MilanRgm
Last active July 22, 2018 02:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MilanRgm/5928cefd870a20e23b7f43a7301ed121 to your computer and use it in GitHub Desktop.
Save MilanRgm/5928cefd870a20e23b7f43a7301ed121 to your computer and use it in GitHub Desktop.
accounts/models.py
class Role(models.Model):
ROLE_CHOICES = (
('agent', 'Agent'),
('agency', 'Agency'),
('manufacturer', 'Manufacturer'),
)
role = models.CharField(max_length=15, choices=ROLE_CHOICES)
def __str__(self):
return self.role
class User(AbstractUser):
role = models.ForeignKey(
Role,
on_delete=models.CASCADE,
blank=True,
null=True,
)
def __str__(self):
return self.username
def save(self, *args, **kwargs):
if not self.pk: # the instance is created
self.role, created = Role.objects.get_or_create(role="agent")
return super().save(*args, **kwargs)
class Agency(models.Model):
owner = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(
max_length=200,
blank=False,
null=False)
city = models.CharField(max_length=150, blank=False, null=False)
street = models.CharField(max_length=150, blank=True, null=True)
country = models.CharField(max_length=150, blank=True, null=True)
mobile_number = PhoneNumberField()
email = models.EmailField(blank=False, null=False)
vat_number = models.CharField(max_length=40, blank=False, null=False)
class Agent(models.Model):
SEX_CHOICE = (
('male', 'Male'),
('female', 'Female'),
)
owner = models.OneToOneField(User, on_delete=models.CASCADE)
agencies = models.ForeignKey(
Agency,
related_name="agents",
on_delete=models.CASCADE)
manufacturers = models.ForeignKey(
Manufacturer,
related_name="agents_manufacturer",
on_delete=models.CASCADE,
blank=True,
null=True)
date_of_birth = models.DateField(blank=True, null=True)
sex = models.CharField(max_length=6, choices=SEX_CHOICE)
city = models.CharField(max_length=150, blank=False, null=False)
street = models.CharField(max_length=150, blank=True, null=True)
country = models.CharField(max_length=150, blank=True, null=True)
mobile_number = PhoneNumberField()
class Manufacturer(models.Model):
owner = models.OneToOneField(
User, on_delete=models.CASCADE, related_name="manufacturer")
agency = models.ForeignKey(
Agency,
blank=True,
null=True,
related_name="agency_manufacturer",
on_delete=models.CASCADE)
name = models.CharField(
max_length=200,
blank=False,
null=False)
city = models.CharField(max_length=150, blank=False, null=False)
street = models.CharField(max_length=150, blank=True, null=True)
country = models.CharField(max_length=150, blank=True, null=True)
mobile_number = PhoneNumberField()
email = models.EmailField(blank=False, null=False)
vat_number = models.CharField(max_length=40, blank=False, null=False)
class Order(models.Model):
product_code = models.CharField(max_length=50, blank=False, null=False)
agents = models.ForeignKey(
Agent,
on_delete=models.CASCADE,
related_name="order_agents")
shops = models.ForeignKey(
Shop,
related_name="order_manufacturers",
on_delete=models.CASCADE)
product = models.ForeignKey(
Product,
related_name="order_product",
on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=1)
unit = models.CharField(max_length=50)
# package dimension
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
due_date = models.DateTimeField(blank=True, null=True)
class Meta:
verbose_name = 'Order'
verbose_name_plural = 'Orders'
def __str__(self):
return str(self.id)
def save(self, *args, **kwargs):
if not self.id:
self.due_date = datetime.now() + timedelta(3*30)
return super(Order, self).save(*args, **kwargs)
class Shop(models.Model):
agent = models.ForeignKey(Agent, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=150, blank=False, null=False)
city = models.CharField(max_length=150, blank=False, null=False)
street = models.CharField(max_length=150, blank=True, null=True)
country = models.CharField(max_length=150, blank=True, null=True)
mobile_number = PhoneNumberField()
vat_number = models.CharField(max_length=40, blank=False, null=False)
lat = models.CharField(max_length=50, null=True)
lang = models.CharField(max_length=50, null=True)
owner_name = models.CharField(max_length=150, blank=False, null=False)
owner_phone_number = PhoneNumberField()
owner_email = models.EmailField(blank=False, null=False)
def __str__(self):
return self.name
class Category(models.Model):
name = models.CharField(max_length=150, db_index=True)
slug = models.SlugField(max_length=150, db_index=True)
description = models.TextField()
parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)
def __str__(self):
return self.name
class Product(models.Model):
product_code = models.CharField(max_length=50, blank=False, null=False)
agencies = models.ForeignKey(
Agency,
on_delete=models.CASCADE,
related_name="product_agencies",
null=True)
manufacturer = models.ForeignKey(
Manufacturer,
related_name="product_manufacturers",
on_delete=models.CASCADE,
null=True)
name = models.CharField(max_length=120, db_index=True)
category = models.ForeignKey(
Category,
related_name="product_category",
null=True,
on_delete=models.CASCADE)
price = models.DecimalField(max_digits=10, decimal_places=2)
min_price = models.DecimalField(max_digits=10, decimal_places=2)
packaging = models.CharField(max_length=120)
package_dimension = models.CharField(max_length=120, blank=True, null=True)
package_weight = models.PositiveIntegerField(default=1)
# package dimension
available = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
orders/models.py
class Order(models.Model):
product_code = models.CharField(max_length=50, blank=False, null=False)
agents = models.ForeignKey(
Agent,
on_delete=models.CASCADE,
related_name="order_agents")
shops = models.ForeignKey(
Shop,
related_name="order_manufacturers",
on_delete=models.CASCADE)
product = models.ForeignKey(
Product,
related_name="order_product",
on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=1)
unit = models.CharField(max_length=50)
# package dimension
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
due_date = models.DateTimeField(blank=True, null=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment