ShopOrderModel and ShopDailyReport system
This commit is contained in:
@@ -248,3 +248,66 @@ class OrderItemModel(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
return f'({self.product}) - ({self.order.user})'
|
||||
|
||||
|
||||
class ShopOrderModel(models.Model):
|
||||
"""Represents the portion of a customer Order that belongs to a single Shop.
|
||||
|
||||
This model is created automatically when an `OrderModel` is finalized/paid.
|
||||
It holds aggregated financial details for that shop (subtotal, discounts,
|
||||
commission and final payable amount).
|
||||
"""
|
||||
order = models.ForeignKey(OrderModel, on_delete=models.CASCADE, related_name='shop_orders')
|
||||
shop = models.ForeignKey('account.ShopModel', on_delete=models.CASCADE, related_name='shop_orders')
|
||||
subtotal = models.BigIntegerField(verbose_name='جمع جزئیات', default=0)
|
||||
items_count = models.PositiveIntegerField(default=0)
|
||||
discount_amount = models.BigIntegerField(default=0, verbose_name='تخفیف اختصاصی فروشگاه')
|
||||
special_discount_amount = models.BigIntegerField(default=0, verbose_name='تخفیف ویژه اختصاصی')
|
||||
commission_percent = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='درصد کمیسیون')
|
||||
commission_amount = models.BigIntegerField(default=0, verbose_name='مبلغ کمیسیون')
|
||||
tax_amount = models.BigIntegerField(default=0, verbose_name='مالیات')
|
||||
payable_amount = models.BigIntegerField(default=0, verbose_name='قابل پرداخت به فروشگاه')
|
||||
is_settled = models.BooleanField(default=False, verbose_name='تسویه شده')
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'سفارش به ازای فروشگاه'
|
||||
verbose_name_plural = 'سفارشات به ازای فروشگاه'
|
||||
|
||||
def __str__(self):
|
||||
return f'ShopOrder({self.shop.shop_name}) for Order {self.order.pk}'
|
||||
|
||||
|
||||
class ShopOrderItem(models.Model):
|
||||
shop_order = models.ForeignKey(ShopOrderModel, on_delete=models.CASCADE, related_name='items')
|
||||
order_item = models.ForeignKey(OrderItemModel, on_delete=models.PROTECT, related_name='shop_items')
|
||||
quantity = models.PositiveIntegerField()
|
||||
unit_price = models.BigIntegerField()
|
||||
total_price = models.BigIntegerField()
|
||||
discount_amount = models.BigIntegerField(default=0)
|
||||
special_discount_amount = models.BigIntegerField(default=0)
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'ایتم سفارش فروشگاه'
|
||||
verbose_name_plural = 'ایتم های سفارش فروشگاه'
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.order_item} for {self.shop_order}'
|
||||
|
||||
|
||||
class ShopDailyReport(models.Model):
|
||||
"""Daily aggregated report per shop. Run once per day to record totals."""
|
||||
shop = models.ForeignKey('account.ShopModel', on_delete=models.CASCADE, related_name='daily_reports')
|
||||
date = models.DateField()
|
||||
total_sales = models.BigIntegerField(default=0)
|
||||
total_commission = models.BigIntegerField(default=0)
|
||||
total_payable = models.BigIntegerField(default=0)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'گزارش روزانه فروشگاه'
|
||||
verbose_name_plural = 'گزارش های روزانه فروشگاه'
|
||||
unique_together = (('shop', 'date'),)
|
||||
|
||||
def __str__(self):
|
||||
return f'Report {self.shop.shop_name} - {self.date}'
|
||||
|
||||
Reference in New Issue
Block a user