Merge branch 'feature/bonus-payment' into 'master'

Feature/bonus payment

See merge request lilschool/site!380
remotes/origin/roistat-logger-gleb
Danil 6 years ago
commit b0ab2e8a28
  1. 29
      apps/payment/templates/payment/pay.html
  2. 12
      apps/payment/templates/payment/paymentwall_widget.html
  3. 50
      apps/payment/views.py
  4. 11
      web/src/js/pages/pay.js
  5. 21
      web/src/sass/_common.sass
  6. 1
      web/webpack.config.js

@ -0,0 +1,29 @@
{% extends "templates/lilcity/index.html" %}
{% load static %}
{% load rupluralize from plural %}
{% block content %}
<div class="section">
<div class="section__center center">
{% if school and request.user.bonus and not payment.bonus %}
{% if request.user.bonus >= payment.amount %}
<a class="btn" href="{{ request.get_full_path }}&use_bonuses=1" style="margin-bottom: 20px">Оплатить бонусами</a>
<div class="text2"><p>или купить онлайн</p></div>
{% else %}
<div class="text2"><p>Для оплаты части стоимости вы можете использовать бонусы</p></div>
<label id="use-bonuses-checkbox" class="switch" style="margin-bottom: 20px">
<input class="switch__input" data-url="{{ request.get_full_path }}" value="true" type="checkbox">
<span class="switch__content">Использовать {{ request.user.bonus|rupluralize:'бонус,бонуса,бонусов' }}</span>
</label>
{% endif %}
{% endif %}
<div id="pw-widget" class="pw-widget">
{% include "./paymentwall_widget.html" %}
</div>
</div>
</div>
{% endblock content %}
{% block foot %}
<script type="text/javascript" src="{% static 'pay.js' %}"></script>
{% endblock foot %}

@ -1,9 +1,3 @@
{% extends "templates/lilcity/index.html" %} {% load static %} {% block content %}
<div class="section">
<div class="section__center center">
{% autoescape off %}
{{ widget }}
{% endautoescape %}
</div>
</div>
{% endblock content %}
{% autoescape off %}
{{ widget }}
{% endautoescape %}

@ -14,7 +14,7 @@ from django.http import HttpResponse, Http404
from django.shortcuts import redirect, get_object_or_404
from django.views.generic import View, TemplateView
from django.views.decorators.csrf import csrf_exempt
from django.urls import reverse_lazy
from django.urls import reverse
from django.utils.decorators import method_decorator
from django.utils.timezone import now
@ -119,7 +119,8 @@ class CourseBuyView(TemplateView):
@method_decorator(login_required, name='dispatch')
class SchoolBuyView(TemplateView):
template_name = 'payment/paymentwall_widget.html'
# template_name = 'payment/paymentwall_widget.html'
template_name = 'payment/pay.html'
def get(self, request, *args, **kwargs):
host = urlsplit(self.request.META.get('HTTP_REFERER'))
@ -128,30 +129,39 @@ class SchoolBuyView(TemplateView):
roistat_visit = request.COOKIES.get('roistat_visit', None)
date_start = request.GET.get('date_start')
duration = request.GET.get('duration')
payment_id = request.GET.get('payment_id')
package = get_object_or_404(Package, duration=duration)
date_start = date_start and datetime.datetime.strptime(date_start, '%Y-%m-%d').date() or now().date()
amount_data = SchoolPayment.calc_amount(package=package, user=request.user, date_start=date_start)
school_payment = SchoolPayment.objects.create(
user=request.user,
weekdays=amount_data.get('weekdays'),
roistat_visit=roistat_visit,
date_start=amount_data.get('date_start'),
date_end=amount_data.get('date_end'),
package=package,
)
if payment_id:
school_payment = get_object_or_404(SchoolPayment, id=payment_id)
else:
amount_data = SchoolPayment.calc_amount(package=package, user=request.user, date_start=date_start)
school_payment = SchoolPayment.objects.create(
user=request.user,
weekdays=amount_data.get('weekdays'),
roistat_visit=roistat_visit,
date_start=amount_data.get('date_start'),
date_end=amount_data.get('date_end'),
package=package,
)
if use_bonuses and request.user.bonus:
if request.user.bonus >= school_payment.amount:
bonus = UserBonus.objects.create(amount= -school_payment.amount, user=request.user, payment=school_payment)
school_payment.amount = 0
school_payment.status = Pingback.PINGBACK_TYPE_REGULAR
else:
bonus = UserBonus.objects.create(amount= -request.user.bonus, user=request.user,
payment=school_payment)
school_payment.amount -= request.user.bonus
bonus = UserBonus.objects.create(amount= -request.user.bonus, user=request.user,
payment=school_payment)
school_payment.bonus = bonus
school_payment.save()
if school_payment.is_paid():
return redirect(reverse_lazy('payment-success'))
return redirect('%s?duration=%s' % (reverse('payment-success'), duration))
if payment_id and school_payment.bonus and not use_bonuses:
bonus = school_payment.bonus
school_payment.amount += school_payment.bonus
school_payment.bonus = None
bonus.delete()
product = Product(
f'school_{school_payment.id}',
school_payment.amount,
@ -168,11 +178,17 @@ class SchoolBuyView(TemplateView):
'evaluation': 1,
'demo': 1,
'test_mode': 1,
'success_url': host + str(reverse_lazy('payment-success')) + '?duration=%s' % duration,
'failure_url': host + str(reverse_lazy('payment-error')),
'success_url': host + reverse('payment-success') + '?duration=%s' % duration,
'failure_url': host + reverse('payment-error'),
}
)
return self.render_to_response(context={'widget': widget.get_html_code()})
if self.request.is_ajax():
self.template_name = 'payment/paymentwall_widget.html'
return self.render_to_response(context={
'widget': widget.get_html_code({'height': '400'}),
'school': True,
'payment': school_payment,
})
@method_decorator(login_required, name='dispatch')

@ -0,0 +1,11 @@
import $ from 'jquery';
$(document).ready(function () {
const $useBonuses = $('#use-bonuses-checkbox input');
const $widget = $('#pw-widget');
$useBonuses.change(e => {
$.get($useBonuses.data('url') + '&use_bonuses=' + ($useBonuses.prop('checked') ? 1 : '')).then(response => {
$widget.html(response);
});
});
});

@ -5238,6 +5238,27 @@ a
width: 24px
margin-bottom: -6px
.pw-widget
display: inline-block
position: relative
&:before
content: ' '
position: absolute
top: 30%
left: 50%
width: 50px
height: 50px
border-left: 3px solid transparent
border: 3px solid #B5B5B5
border-right: none
border-top: none
border-bottom: none
z-index: -1
border-radius: 50%
animation: loading .6s infinite linear
.mobile-hide
+m
display: none

@ -17,6 +17,7 @@ module.exports = {
liveLesson: "./src/js/pages/live-lesson.js",
freeLessons: "./src/js/pages/free-lessons.js",
userGalleryEdit: "./src/js/pages/user-gallery-edit.js",
pay: "./src/js/pages/pay.js",
mixpanel: "./src/js/third_party/mixpanel-2-latest.js",
sprite: glob('./src/icons/*.svg'),
images: glob('./src/img/*.*'),

Loading…
Cancel
Save