finance email

remotes/origin/yandex_rebiling
Andrey 8 years ago
parent cbef6e6fd1
commit 73d62c897d
  1. 7
      finance/admin.py
  2. 23
      finance/migrations/0007_auto_20180330_1452.py
  3. 28
      finance/migrations/0008_invoicerebilling.py
  4. 21
      finance/migrations/0009_invoicerebilling_pay_count.py
  5. 11
      finance/models.py
  6. 4
      finance/signals.py
  7. 20
      finance/views.py
  8. 10
      template/mail/sales/back_set_bill.html
  9. 0
      template/mail/sales/back_set_bill.txt

@ -1,12 +1,13 @@
# coding=utf-8
from django.contrib import admin
from finance.models import Bill, Invoice
from finance.models import Bill, Invoice, InvoiceRebilling
class InvoiceAdmin(admin.ModelAdmin):
list_display = ('__str__', 'rebilling_on', 'rebilling')
list_display = ('__str__', 'rebilling_on',)
admin.site.register(Bill)
admin.site.register(Invoice, InvoiceAdmin)
admin.site.register(Invoice)
admin.site.register(InvoiceRebilling, InvoiceAdmin)

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-03-30 14:52
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('finance', '0006_auto_20180330_1121'),
]
operations = [
migrations.RemoveField(
model_name='invoice',
name='rebilling',
),
migrations.RemoveField(
model_name='invoice',
name='rebilling_on',
),
]

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-03-30 14:52
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('finance', '0007_auto_20180330_1452'),
]
operations = [
migrations.CreateModel(
name='InvoiceRebilling',
fields=[
('invoice_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='finance.Invoice')),
('rebilling_on', models.BooleanField(default=False, editable=False, verbose_name='Повторять платеж')),
],
options={
'verbose_name': 'Повторный платёж',
'verbose_name_plural': 'Повторные платежи',
},
bases=('finance.invoice',),
),
]

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-03-30 15:03
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('finance', '0008_invoicerebilling'),
]
operations = [
migrations.AddField(
model_name='invoicerebilling',
name='pay_count',
field=models.SmallIntegerField(default=2, editable=False, verbose_name='Всего платежей'),
preserve_default=False,
),
]

@ -59,8 +59,6 @@ class Invoice(models.Model):
bill = models.ForeignKey(to=Bill, verbose_name="Связный счёт")
is_open = models.BooleanField(default=True, verbose_name="Открывает ли платёж курс")
date = models.DateTimeField(auto_now_add=True)
rebilling_on = models.BooleanField(verbose_name='Повторять платеж', default=False, editable=False)
rebilling = models.BooleanField(verbose_name='Повторный платеж', default=False, editable=False)
def get_comment(self):
return '''Вам выставлен счёт,''' if \
@ -72,3 +70,12 @@ class Invoice(models.Model):
class Meta:
verbose_name = 'Платёж'
verbose_name_plural = 'Платежи'
class InvoiceRebilling(Invoice):
rebilling_on = models.BooleanField(verbose_name='Повторять платеж', default=False, editable=False)
pay_count = models.SmallIntegerField(verbose_name='Всего платежей', editable=False)
class Meta:
verbose_name = 'Повторный платёж'
verbose_name_plural = 'Повторные платежи'

@ -16,7 +16,7 @@ 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:
if instance.yandex_pay and instance.method == 'Y' and instance.status == 'P':
msg = EmailMessage(
'Вам выставлен новый счёт',
"""%s для оплаты перейдите по ссылке
@ -27,7 +27,7 @@ def invoice_signal(instance, **kwargs):
)
msg.send()
if instance.status == 'F' and not instance.rebilling:
if instance.status == 'F':
if instance.is_open:
try:
Progress.objects.get(

@ -19,7 +19,7 @@ from django.utils.html import strip_tags
from courses.models import Course
from courses.api import CourseParamsApi
from finance.models import Bill, Invoice
from finance.models import Bill, Invoice, InvoiceRebilling
from finance.serializers import BillSerializer, InvoiceSerializer
from finance.tasks import setup_periodic_billing
from lms.global_decorators import transaction_decorator
@ -99,6 +99,8 @@ class InvoiceDetailView(APIView):
price = request.JSON.get('price', None)
comment = request.JSON.get('comment', None)
real_price = request.JSON.get('real_price', None)
rebilling_on = request.JSON.get('is_rebilling', False)
pay_count = request.JSON.get('pay_count', None)
if bill_id is None:
return Response("Не передан id счёта", status=400)
@ -117,6 +119,16 @@ class InvoiceDetailView(APIView):
if bill.check_validate(invoice_id) and is_open:
return Response("Уже есть платёж открывающий курс", status=400)
if rebilling_on:
invoice = InvoiceRebilling.objects.create(
bill=bill,
method=method,
status=status,
is_open=is_open,
pay_count=pay_count,
)
else:
try:
invoice = Invoice.objects.get(id=invoice_id)
except Invoice.DoesNotExist:
@ -248,6 +260,10 @@ class YandexPay(APIView):
def get(request, pk):
try:
pay = Payment.objects.get(id=pk)
try:
inv = InvoiceRebilling.objects.get(yandex_pay=pay)
except InvoiceRebilling:
inv = None
r = requests.post('https://money.yandex.ru/eshop.xml', data={
'shopId': pay.shop_id,
'scid': pay.scid,
@ -255,7 +271,7 @@ class YandexPay(APIView):
'customerNumber': pay.customer_number,
'orderNumber': pay.order_number,
'cps_email': pay.cps_email,
'rebillingOn': pay.invoice.rebilling_on,
'rebillingOn': False if inv is None else inv.rebilling_on,
'shopSuccessURL': settings.YANDEX_MONEY_SUCCESS_URL,
'shopFailURL': settings.YANDEX_MONEY_FAIL_URL,
})

@ -1,10 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>$Title$</title>
</head>
<body>
$END$
</body>
</html>
Loading…
Cancel
Save