From 468317b1821eac86440064105da878a0a5543188 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 9 Nov 2017 15:48:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=AF=D0=BD=D0=B4=D0=B5=D0=BA=D1=81=20=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D1=8C=D0=B3=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- finance/apps.py | 2 +- finance/models.py | 3 +++ finance/signals.py | 12 ++++++++++++ finance/views.py | 14 +++++++------- 4 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 finance/signals.py diff --git a/finance/apps.py b/finance/apps.py index 02a3208..3a9d401 100644 --- a/finance/apps.py +++ b/finance/apps.py @@ -4,4 +4,4 @@ from django.apps import AppConfig class FinanceAppConfig(AppConfig): name = "finance" - verbose_name = "Финансы" \ No newline at end of file + verbose_name = "Финансы" diff --git a/finance/models.py b/finance/models.py index 22de0bd..aac8e86 100755 --- a/finance/models.py +++ b/finance/models.py @@ -1,6 +1,8 @@ # coding=utf-8 from django.db import models from django.conf import settings +from yandex_money.models import Payment + from courses.models import Course, Vertex @@ -47,6 +49,7 @@ class Invoice(models.Model): help_text='Сумма, минус комиссия') method = models.CharField(verbose_name='Способ оплаты', max_length=2, default='Y', choices=BILL_METHOD) key = models.CharField(verbose_name='Ключ платежа', blank=True, max_length=255, null=True) + yandex_pay = models.ForeignKey(to=Payment, blank=True, null=True) comment = models.TextField(verbose_name='Комментарий продавца', help_text='Будет показано пользователю', blank=True, editable=False) bill = models.ForeignKey(to=Bill, verbose_name="Связный счёт") diff --git a/finance/signals.py b/finance/signals.py new file mode 100644 index 0000000..9d24239 --- /dev/null +++ b/finance/signals.py @@ -0,0 +1,12 @@ +from finance.tasks import send_to_yandex +from django.db.models.signals import pre_save +from django.dispatch import receiver + +from finance.models import Invoice + + +@receiver(pre_save, sender=Invoice) +def delete_dependencies(instance, **kwargs): + """Отправка сообщения после сохранения платежа""" + if instance.yandex_pay and instance.method == 'Y' and instance.status == 'P': + send_to_yandex(instance.yandex_pay) diff --git a/finance/views.py b/finance/views.py index 6ca9931..cefeda4 100644 --- a/finance/views.py +++ b/finance/views.py @@ -1,7 +1,6 @@ from django.contrib.auth import get_user_model from courses.models import Course -from finance.tasks import send_to_yandex from lms.global_decorators import transaction_decorator from rest_framework.views import APIView from rest_framework.renderers import JSONRenderer @@ -44,17 +43,18 @@ class BillListView(APIView): i['method'] = get_real_name(elem=i['method'][0], array=Invoice.BILL_METHOD) i['status'] = get_real_name(elem=i['status'][0], array=Invoice.BILL_STATUSES) i['bill'] = bill_obj - invoice, _is_create = Invoice.objects.update_or_create(**i) - invoices = [j for j in invoices if not j.id == invoice.id] - if invoice.method == 'Y' and invoice.status == 'P': - pay, _is_create = Payment.objects.get_or_create( - order_amount=invoice.price, + i['yandex_pay'] = None + if i['method'] == 'Y' and i['status'] == 'P': + i['yandex_pay'], _is_create = Payment.objects.get_or_create( + order_amount=i['price'].price, order_number=bill_obj.id, customer_number=bill_obj.user.id, user=bill_obj.user, cps_email=bill_obj.user.email, ) - send_to_yandex(pay) + + invoice, _is_create = Invoice.objects.update_or_create(**i) + invoices = [j for j in invoices if not j.id == invoice.id] [i.delete() for i in invoices]