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.
 
 
 
 
 
 

93 lines
3.9 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' and not instance.rebilling:
msg = EmailMessage(
'Вам выставлен новый счёт',
"""%s для оплаты перейдите по ссылке
%s/api/v1/finance/payment/%s/""" % (instance.get_comment(), settings.DOMAIN, instance.yandex_pay.id),
to=[instance.yandex_pay.cps_email],
bcc=[instance.bill.opener.email],
reply_to=[instance.bill.opener.email],
)
msg.send()
if instance.status == 'F' and not instance.rebilling:
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),
to=[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()