update
This commit is contained in:
@@ -1 +1 @@
|
||||
from .order import * # noqa
|
||||
from .order import *
|
||||
|
||||
@@ -4,33 +4,82 @@ from django.utils.translation import gettext_lazy as _
|
||||
from django.contrib.auth import get_user_model
|
||||
from core.apps.api.choices import OrderStatus
|
||||
from core.apps.accounts.models import Address
|
||||
from core.apps.api.models import AdModel
|
||||
|
||||
|
||||
class Order(AbstractBaseModel):
|
||||
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, verbose_name=_("User"))
|
||||
status = models.CharField(max_length=255, choices=OrderStatus)
|
||||
address = models.ForeignKey(Address, on_delete=models.CASCADE, verbose_name=_("Address"))
|
||||
class OrderModel(AbstractBaseModel):
|
||||
user = models.ForeignKey(
|
||||
get_user_model(),
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_("User"),
|
||||
related_name="orders"
|
||||
)
|
||||
status = models.CharField(
|
||||
_("Status"),
|
||||
max_length=255,
|
||||
choices=OrderStatus,
|
||||
db_index=True
|
||||
)
|
||||
address = models.ForeignKey(
|
||||
Address,
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name=_("Address")
|
||||
)
|
||||
total_amount = models.DecimalField(
|
||||
_("Total Amount"),
|
||||
max_digits=10,
|
||||
decimal_places=2,
|
||||
default=0
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.pk)
|
||||
return f"Order #{self.pk} - {self.user.username}"
|
||||
|
||||
def calculate_total(self):
|
||||
"""Calculate total from order items"""
|
||||
total = sum(item.subtotal for item in self.items.all())
|
||||
self.total_amount = total
|
||||
return total
|
||||
|
||||
class Meta:
|
||||
db_table = "order"
|
||||
verbose_name = _("Order")
|
||||
verbose_name_plural = _("Orders")
|
||||
ordering = ["-created_at"]
|
||||
indexes = [
|
||||
models.Index(fields=["user", "-created_at"]),
|
||||
models.Index(fields=["status"]),
|
||||
]
|
||||
|
||||
|
||||
class OrderItem(models.Model):
|
||||
order = models.ForeignKey(Order, on_delete=models.CASCADE, verbose_name=_("Order"))
|
||||
price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name=_("Price"))
|
||||
ad = models.ForeignKey(AdModel, on_delete=models.CASCADE, verbose_name=_("Ad"))
|
||||
count = models.PositiveIntegerField(default=0, verbose_name=_("Count"))
|
||||
class OrderItemModel(AbstractBaseModel):
|
||||
order = models.ForeignKey(
|
||||
OrderModel,
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_("Order"),
|
||||
related_name="items"
|
||||
)
|
||||
ad = models.ForeignKey(
|
||||
"api.AdModel",
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name=_("Ad")
|
||||
)
|
||||
price = models.DecimalField(
|
||||
_("Price"),
|
||||
max_digits=10,
|
||||
decimal_places=2
|
||||
)
|
||||
quantity = models.PositiveIntegerField(_("Quantity"), default=1)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.pk)
|
||||
return f"{self.ad.name} x {self.quantity}"
|
||||
|
||||
@property
|
||||
def subtotal(self):
|
||||
"""Calculate item subtotal"""
|
||||
return self.price * self.quantity
|
||||
|
||||
class Meta:
|
||||
db_table = "order_item"
|
||||
verbose_name = _("Order Item")
|
||||
verbose_name_plural = _("Order Items")
|
||||
unique_together = [["order", "ad"]]
|
||||
|
||||
Reference in New Issue
Block a user