summaryrefslogtreecommitdiff
path: root/core/models.py
diff options
context:
space:
mode:
authorspl3g <spleefer6@gmail.com>2026-05-29 21:05:25 +0300
committerspl3g <spleefer6@gmail.com>2026-05-29 21:18:21 +0300
commit4d408ecd6df06bc73eba586a404813c3bb818e99 (patch)
tree8d1cc5d9887484ed6ee23f38998361a7f6cade3f /core/models.py
parent9a7ca8a6cbab866d6ce6b1eb12e5977f7f2a9367 (diff)
update some settings and add models
Diffstat (limited to 'core/models.py')
-rw-r--r--core/models.py69
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()