diff options
Diffstat (limited to 'core/models.py')
| -rw-r--r-- | core/models.py | 69 |
1 files changed, 68 insertions, 1 deletions
diff --git a/core/models.py b/core/models.py index 71a8362..dce67cf 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,70 @@ +from django.contrib.auth.models import AbstractUser from django.db import models -# Create your models here. +class Role(models.Model): + name = models.CharField(max_length=50, unique=True, verbose_name="Name of the role") + + def __str__(self) -> str: + return self.name + +class User(AbstractUser): + role = models.ForeignKey(Role, on_delete=models.SET_NULL, null=True, blank=True) + full_name = models.CharField(max_length=255) + + +class Supplier(models.Model): + name = models.CharField(max_length=200, unique=True) + + def __str__(self) -> str: + return self.name + + +class PickupPoint(models.Model): + address = models.TextField() + + def __str__(self) -> str: + return self.address[:50] + +class Product(models.Model): + article = models.CharField(max_length=50, unique=True) + name = models.CharField(max_length=200) + unit = models.CharField(max_length=20) + price = models.DecimalField(max_digits=20, decimal_places=2) + manufacturer = models.CharField(max_length=200) + supplier = models.CharField(max_length=200) + category = models.CharField(max_length=100) + discount = models.DecimalField(max_digits=5, decimal_places=2, default=0) + quantity = models.IntegerField(default=0) + description = models.TextField() + photo = models.ImageField(upload_to="products/", null=True, blank=True) + + def save(self, *args, **kwargs): + try: + this = Product.objects.get(id=self.id) + if this.photo and self.photo and this.photo != self.photo: + this.photo.delete(save=False) + except Exception: + pass + super().save(*args, **kwargs) + + @property + def final_price(self): + return self.price * (1 - self.discount / 100) if self.discount else self.price + + + def __str__(self) -> str: + return self.name + +class Order(models.Model): + order_date = models.DateTimeField(auto_now_add=True) + delivery_date = models.DateTimeField() + pickup_point = models.ForeignKey(PickupPoint, on_delete=models.CASCADE) + client_name = models.CharField(max_length=255, null=True, blank=True) + pickup_code = models.IntegerField() + status = models.CharField(max_length=50, default="Новый") + user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True) + +class OrderItem(models.Model): + order = models.ForeignKey(Order, related_name="items", on_delete=models.CASCADE) + product = models.ForeignKey(Product, on_delete=models.CASCADE) + count = models.IntegerField() |
