Last active
July 22, 2018 02:30
-
-
Save MilanRgm/5928cefd870a20e23b7f43a7301ed121 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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