You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.8 KiB
94 lines
3.8 KiB
from django.contrib.auth import get_user_model
|
|
from django.core.mail import EmailMessage
|
|
from django.db.models.signals import pre_save, post_save
|
|
from django.dispatch import receiver
|
|
from yandex_money.models import Payment
|
|
from django.conf import settings
|
|
|
|
from finance.models import Invoice
|
|
from courses.models import Course
|
|
from progress.models import Progress, ProgressLesson
|
|
|
|
|
|
@receiver(pre_save, sender=Invoice)
|
|
def invoice_signal(instance, **kwargs):
|
|
"""Отправка сообщения после сохранения платежа"""
|
|
|
|
course = Course.objects.get(token=instance.bill.course_token)
|
|
|
|
if instance.yandex_pay and instance.method == 'Y' and instance.status == 'P':
|
|
msg = EmailMessage(
|
|
'Вам выставлен новый счёт',
|
|
instance.get_comment(),
|
|
settings.EMAIL_LOGIN,
|
|
[instance.yandex_pay.cps_email],
|
|
[instance.bill.opener.email],
|
|
reply_to=[instance.bill.opener.email],
|
|
)
|
|
msg.send()
|
|
|
|
if instance.status == 'F':
|
|
if instance.is_open:
|
|
try:
|
|
Progress.objects.get(
|
|
course_token=instance.bill.course_token,
|
|
user=instance.bill.user,
|
|
)
|
|
except Progress.DoesNotExist:
|
|
p = Progress.objects.create(
|
|
course_token=instance.bill.course_token,
|
|
user=instance.bill.user,
|
|
teacher=get_user_model().objects.get(out_key=course.get_teacher())
|
|
)
|
|
ProgressLesson.objects.create(
|
|
progress=p,
|
|
lesson_token=course.get_first_lesson().token,
|
|
checker=p.user,
|
|
)
|
|
|
|
msg = EmailMessage(
|
|
'Ваш платёж прошёл успешно',
|
|
'''Вам открыт доступ к курсу "%s", вы можете перейти по ссылке и
|
|
ознакомиться с материалами %s/course/%s'''
|
|
% (course.title, settings.DOMAIN, course.slug),
|
|
'robo@skillbox.ru',
|
|
[instance.bill.user.email],
|
|
bcc=[instance.bill.opener.email],
|
|
reply_to=[instance.bill.opener.email],
|
|
)
|
|
else:
|
|
msg = EmailMessage(
|
|
'Ваш платёж прошёл успешно',
|
|
'''Курс "%s" был забронирован''' % course.title,
|
|
'robo@skillbox.ru',
|
|
[instance.bill.user.email],
|
|
bcc=[instance.bill.opener.email],
|
|
reply_to=[instance.bill.opener.email],
|
|
)
|
|
msg.send()
|
|
|
|
if instance.status == 'C':
|
|
msg = EmailMessage(
|
|
'Ошибка платежа!'
|
|
"""Внимание не прошёл платёж пользавателю %s,
|
|
по курсу "%s" ID платежа: %s. Если не получается
|
|
решить проблему самостоятельно, ответьте на это письмо,
|
|
постарайтесь подробно описать последовательность действий,
|
|
которая привела к ошибке"""
|
|
% (instance.bill.user.get_full_name(), course.title, instance.id),
|
|
instance.bill.opener.email,
|
|
reply_to=["it@skillbox.ru"]
|
|
)
|
|
msg.send()
|
|
|
|
|
|
@receiver(post_save, sender=Payment)
|
|
def access_pay(instance, **kwargs):
|
|
if instance.status == 'success':
|
|
instance.invoice.status = "F"
|
|
instance.invoice.real_price = instance.shop_amount
|
|
instance.invoice.save()
|
|
|
|
if instance.status == 'fail':
|
|
instance.invoice.status = "C"
|
|
instance.invoice.save()
|
|
|