|
|
|
@ -63,7 +63,7 @@ class AuthorBalance(models.Model): |
|
|
|
verbose_name_plural = 'Балансы' |
|
|
|
verbose_name_plural = 'Балансы' |
|
|
|
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs): |
|
|
|
def save(self, *args, **kwargs): |
|
|
|
if self.status != self.ACCEPTED: |
|
|
|
if self.type == self.IN and not self.id: |
|
|
|
self.commission = self.calc_commission() |
|
|
|
self.commission = self.calc_commission() |
|
|
|
if self.type == self.OUT: |
|
|
|
if self.type == self.OUT: |
|
|
|
if self.status == self.DECLINED and not self.declined_send_at: |
|
|
|
if self.status == self.DECLINED and not self.declined_send_at: |
|
|
|
@ -152,18 +152,15 @@ class Payment(PolymorphicModel): |
|
|
|
elif isinstance(payment, GiftCertificatePayment): |
|
|
|
elif isinstance(payment, GiftCertificatePayment): |
|
|
|
price = payment.gift_certificate.price |
|
|
|
price = payment.gift_certificate.price |
|
|
|
elif course: |
|
|
|
elif course: |
|
|
|
price = course.price |
|
|
|
paid_before = CoursePayment.objects.filter(user=user, course=course, status__in=Payment.PW_PAID_STATUSES).exists() |
|
|
|
|
|
|
|
price = course.price / 2 if paid_before else course.price |
|
|
|
else: |
|
|
|
else: |
|
|
|
if user: |
|
|
|
if user: |
|
|
|
school_payments = SchoolPayment.objects.filter( |
|
|
|
school_payments = SchoolPayment.objects.filter( |
|
|
|
user=user, |
|
|
|
user=user, |
|
|
|
date_start__lte=date_start, |
|
|
|
date_start__lte=date_start, |
|
|
|
date_end__gte=date_start, |
|
|
|
date_end__gte=date_start, |
|
|
|
status__in=[ |
|
|
|
status__in=Payment.PW_PAID_STATUSES, |
|
|
|
Pingback.PINGBACK_TYPE_REGULAR, |
|
|
|
|
|
|
|
Pingback.PINGBACK_TYPE_GOODWILL, |
|
|
|
|
|
|
|
Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED, |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
) |
|
|
|
) |
|
|
|
school_schedules_purchased = school_payments.annotate( |
|
|
|
school_schedules_purchased = school_payments.annotate( |
|
|
|
joined_weekdays=Func(F('weekdays'), function='unnest', ) |
|
|
|
joined_weekdays=Func(F('weekdays'), function='unnest', ) |
|
|
|
@ -232,39 +229,38 @@ class Payment(PolymorphicModel): |
|
|
|
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs): |
|
|
|
def save(self, *args, **kwargs): |
|
|
|
amount_data = Payment.calc_amount(payment=self) |
|
|
|
amount_data = Payment.calc_amount(payment=self) |
|
|
|
if self.status is None and not self.bonus: |
|
|
|
if not self.is_paid(): |
|
|
|
self.amount = amount_data.get('amount') |
|
|
|
if not self.bonus: |
|
|
|
if isinstance(self, SchoolPayment): |
|
|
|
self.amount = amount_data.get('amount') |
|
|
|
self.weekdays = amount_data.get('weekdays') |
|
|
|
if isinstance(self, SchoolPayment): |
|
|
|
|
|
|
|
self.weekdays = amount_data.get('weekdays') |
|
|
|
super().save(*args, **kwargs) |
|
|
|
super().save(*args, **kwargs) |
|
|
|
if isinstance(self, CoursePayment) and self.is_paid(): |
|
|
|
if self.is_paid(): |
|
|
|
author_balance = getattr(self, 'authorbalance', None) |
|
|
|
if isinstance(self, CoursePayment): |
|
|
|
if not author_balance: |
|
|
|
if not getattr(self, 'authorbalance', None): |
|
|
|
AuthorBalance.objects.create( |
|
|
|
AuthorBalance.objects.create( |
|
|
|
author=self.course.author, |
|
|
|
author=self.course.author, |
|
|
|
amount=self.amount, |
|
|
|
amount=self.amount, |
|
|
|
payment=self, |
|
|
|
payment=self, |
|
|
|
) |
|
|
|
) |
|
|
|
else: |
|
|
|
if isinstance(self, GiftCertificatePayment): |
|
|
|
author_balance.amount = self.amount |
|
|
|
ugs, created = UserGiftCertificate.objects.get_or_create(user=self.user, gift_certificate=self.gift_certificate, |
|
|
|
author_balance.save() |
|
|
|
payment=self) |
|
|
|
if isinstance(self, GiftCertificatePayment) and self.is_paid(): |
|
|
|
if created: |
|
|
|
ugs, created = UserGiftCertificate.objects.get_or_create(user=self.user, gift_certificate=self.gift_certificate, |
|
|
|
from apps.notification.tasks import send_gift_certificate |
|
|
|
payment=self) |
|
|
|
send_gift_certificate(ugs.id) |
|
|
|
if created: |
|
|
|
# Если юзер реферал и нет платежа, где применялась скидка |
|
|
|
from apps.notification.tasks import send_gift_certificate |
|
|
|
if hasattr(self.user, 'referral') and not self.user.referral.payment: |
|
|
|
send_gift_certificate(ugs.id) |
|
|
|
# Платеж - как сигнал, что скидка применилась |
|
|
|
# Если юзер реферал и нет платежа, где применялась скидка |
|
|
|
self.user.referral.payment = self |
|
|
|
if hasattr(self.user, 'referral') and not self.user.referral.payment and self.is_paid(): |
|
|
|
self.user.referral.save() |
|
|
|
# Платеж - как сигнал, что скидка применилась |
|
|
|
# Отправляем кэшбэк |
|
|
|
self.user.referral.payment = self |
|
|
|
self.user.referral.send_bonuses(amount_data.get('referral_bonus'), amount_data.get('referrer_bonus')) |
|
|
|
self.user.referral.save() |
|
|
|
|
|
|
|
# Отправляем кэшбэк |
|
|
|
|
|
|
|
self.user.referral.send_bonuses(amount_data.get('referral_bonus'), amount_data.get('referrer_bonus')) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CoursePayment(Payment): |
|
|
|
class CoursePayment(Payment): |
|
|
|
course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name='Курс', related_name='payments') |
|
|
|
course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name='Курс', related_name='payments') |
|
|
|
|
|
|
|
access_expire = models.DateField('Доступ к курсу до даты', null=True) |
|
|
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
class Meta: |
|
|
|
verbose_name = 'Платеж за курс' |
|
|
|
verbose_name = 'Платеж за курс' |
|
|
|
|