feat(orders): добавлены поля скидок в Order и OrderItem
Интеграция системы скидок с моделями заказов: Order: - applied_discount: ForeignKey на Discount - discount_amount: сумма скидки на заказ - applied_promo_code: использованный промокод - calculate_total(): обновлён с учётом скидки OrderItem: - applied_discount: ForeignKey на Discount - discount_amount: сумма скидки на позицию - get_total_price(): обновлён с учётом скидки Миграция: - 0003_order_applied_discount... добавляет новые поля Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -82,6 +82,23 @@ class OrderItem(models.Model):
|
||||
help_text="True если цена была изменена вручную при создании заказа"
|
||||
)
|
||||
|
||||
# Скидки
|
||||
applied_discount = models.ForeignKey(
|
||||
'discounts.Discount',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name='order_items',
|
||||
verbose_name="Скидка на позицию"
|
||||
)
|
||||
|
||||
discount_amount = models.DecimalField(
|
||||
max_digits=10,
|
||||
decimal_places=2,
|
||||
default=0,
|
||||
verbose_name="Сумма скидки"
|
||||
)
|
||||
|
||||
# Витринные продажи
|
||||
is_from_showcase = models.BooleanField(
|
||||
default=False,
|
||||
@@ -214,8 +231,10 @@ class OrderItem(models.Model):
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
def get_total_price(self):
|
||||
"""Возвращает общую стоимость позиции"""
|
||||
return self.price * self.quantity
|
||||
"""Возвращает общую стоимость позиции с учетом скидки"""
|
||||
subtotal = self.price * self.quantity
|
||||
discount = Decimal(str(self.discount_amount)) if self.discount_amount else Decimal('0')
|
||||
return subtotal - discount
|
||||
|
||||
@property
|
||||
def item_name(self):
|
||||
|
||||
Reference in New Issue
Block a user