From 55c76b686366bb96334a0e582a5663861f042d52 Mon Sep 17 00:00:00 2001 From: gzbender Date: Fri, 9 Aug 2019 14:42:10 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86?= =?UTF-8?q?=D0=B0=20=D1=81=20=D1=86=D0=B5=D0=BD=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0030_auto_20190809_0133.py | 18 +++++++ .../migrations/0038_auto_20190809_0133.py | 36 +++++++++++++ apps/payment/models.py | 9 ++++ .../payment/package_payment_success.html | 12 +++++ apps/payment/views.py | 50 ++++++++++++++++++- 5 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 apps/content/migrations/0030_auto_20190809_0133.py create mode 100644 apps/payment/migrations/0038_auto_20190809_0133.py create mode 100644 apps/payment/templates/payment/package_payment_success.html diff --git a/apps/content/migrations/0030_auto_20190809_0133.py b/apps/content/migrations/0030_auto_20190809_0133.py new file mode 100644 index 00000000..da8fed67 --- /dev/null +++ b/apps/content/migrations/0030_auto_20190809_0133.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.7 on 2019-08-09 01:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('content', '0029_auto_20190730_2032'), + ] + + operations = [ + migrations.AlterField( + model_name='package', + name='options', + field=models.TextField(db_index=True, default='', verbose_name='Опции'), + ), + ] diff --git a/apps/payment/migrations/0038_auto_20190809_0133.py b/apps/payment/migrations/0038_auto_20190809_0133.py new file mode 100644 index 00000000..c8c96aab --- /dev/null +++ b/apps/payment/migrations/0038_auto_20190809_0133.py @@ -0,0 +1,36 @@ +# Generated by Django 2.0.7 on 2019-08-09 01:33 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('content', '0030_auto_20190809_0133'), + ('payment', '0037_add_paid_one_more_bonuses'), + ] + + operations = [ + migrations.CreateModel( + name='PackagePayment', + fields=[ + ('payment_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='payment.Payment')), + ('date_start', models.DateField(blank=True, null=True, verbose_name='Дата начала подписки')), + ('date_end', models.DateField(blank=True, null=True, verbose_name='Дата окончания подписки')), + ('camp_payment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='payment.DrawingCampPayment')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='content.Package')), + ('school_payment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='payment.SchoolPayment')), + ], + options={ + 'abstract': False, + 'base_manager_name': 'objects', + }, + bases=('payment.payment',), + ), + migrations.AlterField( + model_name='payment', + name='bonus', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='purchase_payments', to='payment.UserBonus'), + ), + ] diff --git a/apps/payment/models.py b/apps/payment/models.py index b8e2d8c1..fdc84020 100644 --- a/apps/payment/models.py +++ b/apps/payment/models.py @@ -16,6 +16,7 @@ from django.core.validators import RegexValidator from django.utils.timezone import now from django.conf import settings +from apps.content.models import Package from project.utils import weekdays_in_date_range from apps.course.models import Course @@ -384,6 +385,14 @@ class GiftCertificatePayment(Payment): verbose_name_plural = 'Платежи за подарочные сертификаты' +class PackagePayment(Payment): + date_start = models.DateField('Дата начала подписки', null=True, blank=True) + date_end = models.DateField('Дата окончания подписки', null=True, blank=True) + package = models.ForeignKey(Package, on_delete=models.CASCADE) + school_payment = models.ForeignKey(SchoolPayment, on_delete=models.SET_NULL, null=True, blank=True) + camp_payment = models.ForeignKey(DrawingCampPayment, on_delete=models.SET_NULL, null=True, blank=True) + + class UserBonus(models.Model): ACTION_FILL_PROFILE = 'fill_profile' ACTION_PAID_ONE_MORE = 'paid_one_more' diff --git a/apps/payment/templates/payment/package_payment_success.html b/apps/payment/templates/payment/package_payment_success.html new file mode 100644 index 00000000..9ad18b96 --- /dev/null +++ b/apps/payment/templates/payment/package_payment_success.html @@ -0,0 +1,12 @@ +{% extends "templates/lilcity/index.html" %} {% load static %} {% block content %} +
+
+
+
Вы успешно приобрели подписку с {{ package.date_start }} по {{ package.date_end }}!
+ +
+
+
+{% endblock content %} diff --git a/apps/payment/views.py b/apps/payment/views.py index 9aca10df..6a542f73 100644 --- a/apps/payment/views.py +++ b/apps/payment/views.py @@ -20,12 +20,13 @@ from django.utils.timezone import now from paymentwall import Pingback, Product, Widget +from apps.content.models import Package from apps.course.models import Course from apps.payment.tasks import transaction_to_mixpanel, product_payment_to_mixpanel, transaction_to_roistat from apps.notification.utils import send_email from .models import AuthorBalance, CoursePayment, SchoolPayment, Payment, UserBonus, GiftCertificate, \ - GiftCertificatePayment, UserGiftCertificate, DrawingCampPayment + GiftCertificatePayment, UserGiftCertificate, DrawingCampPayment, PackagePayment logger = logging.getLogger('django') @@ -486,3 +487,50 @@ class GiftCertificateGetView(TemplateView): context = self.get_context_data(**kwargs) return self.render_to_response(context) + +@method_decorator(login_required, name='dispatch') +class PackagePaymentBuyView(TemplateView): + model = PackagePayment + template_name = 'payment/paymentwall_widget.html' + + def get(self, request, pk, *args, **kwargs): + package = get_object_or_404(Package, pk=pk) + roistat_visit = request.COOKIES.get('roistat_visit', None) + pp = PackagePayment.objects.create( + user=request.user, + package=package, + roistat_visit=roistat_visit, ) + context = self.get_context_data(**kwargs) + product = Product( + f'package_{pp.id}', + pp.amount, + 'RUB', + 'Пакет', + ) + host = urlsplit(self.request.META.get('HTTP_REFERER')) + host = str(host[0]) + '://' + str(host[1]) + widget = Widget( + str(request.user.id), + 'p1_1', + [product], + extra_params={ + 'lang': 'ru', + 'evaluation': 1, + 'demo': 1, + 'test_mode': 1, + 'success_url': host + str( + reverse_lazy('gift-certificate-payment-success', args=[gift_certificate_payment.id])), + 'failure_url': host + str(reverse_lazy('payment-error')), + } + ) + context['widget'] = widget.get_html_code() + return self.render_to_response(context) + + +@method_decorator(login_required, name='dispatch') +class PackagePaymentBuySuccessView(TemplateView): + template_name = 'payment/package_payment_success.html' + + def get(self, request, pk=None, *args, **kwargs): + course = get_object_or_404(Course, pk=pk) + return self.render_to_response(context={'course': course})