|
|
|
|
@ -11,7 +11,6 @@ from django.core.validators import RegexValidator |
|
|
|
|
from django.utils.timezone import now |
|
|
|
|
from django.conf import settings |
|
|
|
|
|
|
|
|
|
from apps.user.models import Referral |
|
|
|
|
from project.utils import weekday_in_date_range |
|
|
|
|
|
|
|
|
|
from apps.course.models import Course |
|
|
|
|
@ -122,11 +121,11 @@ class Payment(PolymorphicModel): |
|
|
|
|
add_days = school_payment.add_days |
|
|
|
|
date_start = school_payment.date_start |
|
|
|
|
date_end = school_payment.date_end |
|
|
|
|
referral_discount = 0 |
|
|
|
|
referrer_cashback = 0 |
|
|
|
|
referral_bonus = 0 |
|
|
|
|
referrer_bonus = 0 |
|
|
|
|
if hasattr(user, 'referral') and not user.referral.payment: |
|
|
|
|
referral_discount = user.referral.discount |
|
|
|
|
referrer_cashback = user.referral.referrer_cashback |
|
|
|
|
referral_bonus = user.referral.bonus |
|
|
|
|
referrer_bonus = user.referral.referrer_bonus |
|
|
|
|
discount = 0 |
|
|
|
|
if course: |
|
|
|
|
price = course.price |
|
|
|
|
@ -155,14 +154,14 @@ class Payment(PolymorphicModel): |
|
|
|
|
price = Decimal(aggregate.get('month_price__sum', 0)) |
|
|
|
|
if price >= config.SERVICE_DISCOUNT_MIN_AMOUNT: |
|
|
|
|
discount = config.SERVICE_DISCOUNT |
|
|
|
|
referral_discount = (price - discount) * referral_discount / 100 |
|
|
|
|
referrer_cashback = (price - discount) * referrer_cashback / 100 |
|
|
|
|
amount = price - discount - referral_discount |
|
|
|
|
amount = price - discount |
|
|
|
|
referral_bonus = round(amount * referral_bonus / 100) |
|
|
|
|
referrer_bonus = round(amount * referrer_bonus / 100) |
|
|
|
|
return { |
|
|
|
|
'price': price, |
|
|
|
|
'amount': amount, |
|
|
|
|
'referral_discount': referral_discount, |
|
|
|
|
'referrer_cashback': referrer_cashback, |
|
|
|
|
'referral_bonus': referral_bonus, |
|
|
|
|
'referrer_bonus': referrer_bonus, |
|
|
|
|
'discount': discount, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -209,11 +208,11 @@ class CoursePayment(Payment): |
|
|
|
|
author_balance.save() |
|
|
|
|
# Если юзер реферал и нет платежа, где применялась скидка |
|
|
|
|
if hasattr(self.user, 'referral') and not self.user.referral.payment: |
|
|
|
|
# Отправляем кэшбэк |
|
|
|
|
self.user.referral.cashback(amount_data.get('referrer_cashback')) |
|
|
|
|
# Платеж - как сигнал, что скидка применилась |
|
|
|
|
self.user.referral.payment = self |
|
|
|
|
self.user.referral.save() |
|
|
|
|
# Отправляем кэшбэк |
|
|
|
|
self.user.referral.send_bonuses(amount_data.get('referral_bonus'), amount_data.get('referrer_bonus')) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SchoolPayment(Payment): |
|
|
|
|
@ -239,11 +238,11 @@ class SchoolPayment(Payment): |
|
|
|
|
super().save(*args, **kwargs) |
|
|
|
|
# Если юзер реферал и нет платежа, где применялась скидка |
|
|
|
|
if not self.add_days and hasattr(self.user, 'referral') and not self.user.referral.payment: |
|
|
|
|
# Отправляем кэшбэк |
|
|
|
|
self.user.referral.cashback(amount_data.get('referrer_cashback')) |
|
|
|
|
# Платеж - как сигнал, что скидка применилась |
|
|
|
|
self.user.referral.payment = self |
|
|
|
|
self.user.referral.save() |
|
|
|
|
# Отправляем кэшбэк |
|
|
|
|
self.user.referral.send_bonuses(amount_data.get('referral_bonus'), amount_data.get('referrer_bonus')) |
|
|
|
|
|
|
|
|
|
@property |
|
|
|
|
def date_end_humanize(self): |
|
|
|
|
@ -254,6 +253,6 @@ class UserBonus(models.Model): |
|
|
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='bonuses') |
|
|
|
|
amount = models.DecimalField(max_digits=8, decimal_places=2, default=0, editable=False) |
|
|
|
|
payment = models.OneToOneField(Payment, on_delete=models.SET_NULL, null=True) |
|
|
|
|
referral = models.ForeignKey(Referral, on_delete=models.SET_NULL, null=True) |
|
|
|
|
referral = models.ForeignKey('user.Referral', on_delete=models.SET_NULL, null=True) |
|
|
|
|
created_at = models.DateTimeField(auto_now_add=True) |
|
|
|
|
|
|
|
|
|
|