* calculate full_price with promocode

This commit is contained in:
Phil Zhitnikov 2023-07-07 01:42:05 +04:00
parent 01b1d6a4f5
commit 8145bb4ae3

View File

@ -194,7 +194,7 @@ def generate_checklist_id():
class ChecklistQuerySet(models.QuerySet): class ChecklistQuerySet(models.QuerySet):
def with_base_related(self): def with_base_related(self):
return self.select_related('manager', 'category', 'payment_method')\ return self.select_related('manager', 'category', 'payment_method', 'promocode')\
.prefetch_related(Prefetch('images', to_attr='_images')) .prefetch_related(Prefetch('images', to_attr='_images'))
def default_ordering(self): def default_ordering(self):
@ -277,7 +277,6 @@ class Checklist(models.Model):
# TODO: replace real_price by parser # TODO: replace real_price by parser
real_price = models.DecimalField('Реальная цена', max_digits=10, decimal_places=2, null=True, blank=True) real_price = models.DecimalField('Реальная цена', max_digits=10, decimal_places=2, null=True, blank=True)
# TODO: choose from Promocode table
# promo # promo
promocode = models.ForeignKey('Promocode', verbose_name='Промокод', on_delete=models.PROTECT, null=True, blank=True) promocode = models.ForeignKey('Promocode', verbose_name='Промокод', on_delete=models.PROTECT, null=True, blank=True)
comment = models.CharField('Комментарий', max_length=200, null=True, blank=True) comment = models.CharField('Комментарий', max_length=200, null=True, blank=True)
@ -325,7 +324,25 @@ class Checklist(models.Model):
@property @property
def full_price(self) -> Decimal: def full_price(self) -> Decimal:
return self.price_rub + GlobalSettings.load().delivery_price_CN + self.delivery_price_CN_RU price = self.price_rub
free_delivery = False
no_comission = False
if self.promocode_id:
promocode = self.promocode
price -= promocode.discount * self.price_rub
free_delivery = promocode.free_delivery
no_comission = promocode.no_comission
if not free_delivery:
price += GlobalSettings.load().delivery_price_CN + self.delivery_price_CN_RU
if not no_comission:
price += self.commission_rub
return price
@property @property
def delivery_price_CN_RU(self) -> Decimal: def delivery_price_CN_RU(self) -> Decimal: