страница с ценами

remotes/origin/feature/packages-page-1-08-19
gzbender 7 years ago
parent 407590f5a1
commit 55c76b6863
  1. 18
      apps/content/migrations/0030_auto_20190809_0133.py
  2. 36
      apps/payment/migrations/0038_auto_20190809_0133.py
  3. 9
      apps/payment/models.py
  4. 12
      apps/payment/templates/payment/package_payment_success.html
  5. 50
      apps/payment/views.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='Опции'),
),
]

@ -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'),
),
]

@ -16,6 +16,7 @@ from django.core.validators import RegexValidator
from django.utils.timezone import now from django.utils.timezone import now
from django.conf import settings from django.conf import settings
from apps.content.models import Package
from project.utils import weekdays_in_date_range from project.utils import weekdays_in_date_range
from apps.course.models import Course from apps.course.models import Course
@ -384,6 +385,14 @@ class GiftCertificatePayment(Payment):
verbose_name_plural = 'Платежи за подарочные сертификаты' 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): class UserBonus(models.Model):
ACTION_FILL_PROFILE = 'fill_profile' ACTION_FILL_PROFILE = 'fill_profile'
ACTION_PAID_ONE_MORE = 'paid_one_more' ACTION_PAID_ONE_MORE = 'paid_one_more'

@ -0,0 +1,12 @@
{% extends "templates/lilcity/index.html" %} {% load static %} {% block content %}
<div class="section">
<div class="section__center center center_xs">
<div class="done">
<div class="done__title title">Вы успешно приобрели подписку с {{ package.date_start }} по {{ package.date_end }}!</div>
<div class="done__foot">
<a class="done__btn btn btn_md btn_stroke" href="{{ course.url }}">ПЕРЕЙТИ К КУРСУ</a>
</div>
</div>
</div>
</div>
{% endblock content %}

@ -20,12 +20,13 @@ from django.utils.timezone import now
from paymentwall import Pingback, Product, Widget from paymentwall import Pingback, Product, Widget
from apps.content.models import Package
from apps.course.models import Course from apps.course.models import Course
from apps.payment.tasks import transaction_to_mixpanel, product_payment_to_mixpanel, transaction_to_roistat from apps.payment.tasks import transaction_to_mixpanel, product_payment_to_mixpanel, transaction_to_roistat
from apps.notification.utils import send_email from apps.notification.utils import send_email
from .models import AuthorBalance, CoursePayment, SchoolPayment, Payment, UserBonus, GiftCertificate, \ from .models import AuthorBalance, CoursePayment, SchoolPayment, Payment, UserBonus, GiftCertificate, \
GiftCertificatePayment, UserGiftCertificate, DrawingCampPayment GiftCertificatePayment, UserGiftCertificate, DrawingCampPayment, PackagePayment
logger = logging.getLogger('django') logger = logging.getLogger('django')
@ -486,3 +487,50 @@ class GiftCertificateGetView(TemplateView):
context = self.get_context_data(**kwargs) context = self.get_context_data(**kwargs)
return self.render_to_response(context) 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})

Loading…
Cancel
Save