diff --git a/api/v1/views.py b/api/v1/views.py index 63dc2ea1..ca551de4 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -486,6 +486,7 @@ class PaymentViewSet(ExtendedModelViewSet): return Response(Payment.calc_amount(user=user, course=course, weekdays=weekdays)) + class ContestViewSet(ExtendedModelViewSet): queryset = Contest.objects.all() serializer_class = ContestCreateSerializer diff --git a/apps/payment/models.py b/apps/payment/models.py index 9f8d4d31..016646a7 100644 --- a/apps/payment/models.py +++ b/apps/payment/models.py @@ -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) diff --git a/apps/user/models.py b/apps/user/models.py index 1c070240..c2fcf3cd 100644 --- a/apps/user/models.py +++ b/apps/user/models.py @@ -265,14 +265,15 @@ class EmailSubscription(models.Model): class Referral(models.Model): referral = models.OneToOneField(User, on_delete=models.CASCADE, related_name='referral') referrer = models.ForeignKey(User, on_delete=models.CASCADE, related_name='referrals') - discount = models.IntegerField() - referrer_cashback = models.IntegerField() + bonus = models.IntegerField() + referrer_bonus = models.IntegerField() payment = models.OneToOneField('payment.Payment', null=True, blank=True, on_delete=models.CASCADE) class Meta: verbose_name = 'Реферал' verbose_name_plural = 'Рефералы' - def cashback(self, amount): - # TODO - pass + def send_bonuses(self, referral_bonus, referrer_bonus): + from apps.payment.models import UserBonus + UserBonus.objects.create(user=self.referral, amount=referral_bonus, payment=self.payment, referral=self) + UserBonus.objects.create(user=self.referrer, amount=referrer_bonus, payment=self.payment, referral=self) diff --git a/apps/user/templates/blocks/menu.html b/apps/user/templates/blocks/profile-menu.html similarity index 100% rename from apps/user/templates/blocks/menu.html rename to apps/user/templates/blocks/profile-menu.html diff --git a/apps/user/templates/user/bonus-history.html b/apps/user/templates/user/bonus-history.html index b4095470..72be8b05 100644 --- a/apps/user/templates/user/bonus-history.html +++ b/apps/user/templates/user/bonus-history.html @@ -3,18 +3,22 @@ {% load rupluralize from plural %} {% block content %} -{% include "../blocks/menu.html" %} +{% include "../blocks/profile-menu.html" %} -