LIL-674 Изменение логики списания баллов

remotes/origin/hotfix/LIL-691
gzbender 7 years ago
parent 2b52d9852c
commit 481e283b9f
  1. 6
      apps/payment/models.py
  2. 18
      apps/payment/views.py
  3. 2
      apps/user/templates/user/bonus-history.html
  4. 7
      project/templates/blocks/popup_buy.html
  5. 31
      web/src/js/modules/popup.js
  6. 5
      web/src/js/utils.js
  7. 8
      web/src/sass/_common.sass

@ -131,13 +131,13 @@ class Payment(PolymorphicModel):
if isinstance(payment, SchoolPayment): if isinstance(payment, SchoolPayment):
user = payment.user user = payment.user
weekdays = payment.weekdays weekdays = payment.weekdays
date_start = payment.date_start
price = 0 price = 0
referral_bonus = 0 referral_bonus = 0
referrer_bonus = 0 referrer_bonus = 0
if hasattr(user, 'referral') and not user.referral.payment: if hasattr(user, 'referral') and not user.referral.payment:
referral_bonus = user.referral.bonus referral_bonus = user.referral.bonus
referrer_bonus = user.referral.referrer_bonus referrer_bonus = user.referral.referrer_bonus
date_start = school_payment.date_start
discount = 0 discount = 0
if course: if course:
price = course.price price = course.price
@ -214,7 +214,9 @@ class Payment(PolymorphicModel):
paid = self.status in [Pingback.PINGBACK_TYPE_REGULAR, Pingback.PINGBACK_TYPE_GOODWILL, paid = self.status in [Pingback.PINGBACK_TYPE_REGULAR, Pingback.PINGBACK_TYPE_GOODWILL,
Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED,] Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED,]
amount_data = Payment.calc_amount(payment=self) amount_data = Payment.calc_amount(payment=self)
if self.status is None: print('amount_data', amount_data)
if self.status is None and not self.bonus:
print(123)
self.amount = amount_data.get('amount') self.amount = amount_data.get('amount')
if isinstance(self, SchoolPayment): if isinstance(self, SchoolPayment):
self.weekdays = amount_data.get('weekdays') self.weekdays = amount_data.get('weekdays')

@ -147,17 +147,17 @@ class SchoolBuyView(TemplateView):
) )
if use_bonuses: if use_bonuses:
if request.user.bonus >= school_payment.amount: if request.user.bonus >= school_payment.amount:
bonus = UserBonus.objects.create(amount=- school_payment.amount, user=request.user, payment=school_payment) 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 school_payment.status = Pingback.PINGBACK_TYPE_REGULAR
school_payment.bonus = bonus
if not add_days:
school_payment.date_start = now().date()
school_payment.date_end = Payment.add_months(school_payment.date_start)
school_payment.save()
return redirect(reverse_lazy('payment-success'))
else: else:
messages.error(request, 'Недостаточно бонусов для оплаты') bonus = UserBonus.objects.create(amount= -request.user.bonus, user=request.user,
return redirect(reverse_lazy('school:school')) payment=school_payment)
school_payment.amount -= request.user.bonus
school_payment.bonus = bonus
school_payment.save()
if school_payment.status == Pingback.PINGBACK_TYPE_REGULAR:
return redirect(reverse_lazy('payment-success'))
product = Product( product = Product(
f'school_{school_payment.id}', f'school_{school_payment.id}',
school_payment.amount, school_payment.amount,

@ -48,7 +48,7 @@
{% else %} {% else %}
<div class="transactions__cell transactions__product"> <div class="transactions__cell transactions__product">
{% if request.user_agent.is_mobile %} {% if request.user_agent.is_mobile %}
Школа. {% if payment.date_start and payment.date_end %}{{ payment.date_start|date:"" }} - {{ payment.date_end }}{% endif %} Школа. {% if payment.date_start and payment.date_end %}{{ payment.date_start|date:"j b" }} - {{ payment.date_end|date:"j b" }}{% endif %}
{% else %} {% else %}
Школа. {% if payment.date_start and payment.date_end %}{{ payment.date_start }} - {{ payment.date_end }}{% endif %} Школа. {% if payment.date_start and payment.date_end %}{{ payment.date_start }} - {{ payment.date_end }}{% endif %}
{% endif %} {% endif %}

@ -74,14 +74,17 @@
<label class="buy__bonuses switch" style="display: none;"> <label class="buy__bonuses switch" style="display: none;">
<input class="switch__input" type="checkbox" data-bonuses="{{ request.user.bonus }}"> <input class="switch__input" type="checkbox" data-bonuses="{{ request.user.bonus }}">
<span class="switch__content"> <span class="switch__content">
<span class="switch__cell">Оплатить бонусами</span> <span class="switch__cell">Использовать <span class="buy__bonuses-count"></span></span>
</span> </span>
</label> </label>
{% endif %} {% endif %}
</div> </div>
<div class="order__foot"> <div class="order__foot">
<div class="order__subtitle">Итого, за месяц:</div> <div class="order__subtitle">Итого, за месяц:</div>
<div class="order__total order_price_text"></div> <div class="order__total">
<div class="loading-loader"></div>
<span class="order_price_text"></span>
</div>
</div> </div>
</div> </div>
</div> </div>

@ -1,6 +1,7 @@
import $ from 'jquery'; import $ from 'jquery';
import moment from 'moment'; import moment from 'moment';
import {api} from './api'; import {api} from './api';
import {rupluralize} from '../utils';
moment.locale('ru'); moment.locale('ru');
@ -155,13 +156,16 @@ $(document).ready(function () {
function updateCart(){ function updateCart(){
var link = $('.but_btn_popup').data('link'); var link = $('.but_btn_popup').data('link');
var $order = $('.order');
var $orderPrice = $('.order_price_text'); var $orderPrice = $('.order_price_text');
var $orderDates = $('.order__dates'); var $orderDates = $('.order__dates');
var dateStart = popup.data('date-start'); var dateStart = popup.data('date-start');
var days = ['', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье']; var days = ['', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'];
var weekdays = [], daysText = []; var weekdays = [];
var daysText = [];
var $bonuses = $('.buy__bonuses'); var $bonuses = $('.buy__bonuses');
var $bonusesCheckbox = $('[data-bonuses]'); var $bonusesCheckbox = $('[data-bonuses]');
var $bonusesCount = $('.buy__bonuses-count');
var useBonuses = $bonusesCheckbox.prop('checked'); var useBonuses = $bonusesCheckbox.prop('checked');
var bonuses = +$bonusesCheckbox.data('bonuses'); var bonuses = +$bonusesCheckbox.data('bonuses');
$('[data-day]').each(function() { $('[data-day]').each(function() {
@ -173,15 +177,19 @@ $(document).ready(function () {
}); });
if(weekdays.length){ if(weekdays.length){
$order.addClass('order--loading');
$orderPrice.html('');
api.getPaymentAmount({ user: window.LIL_STORE.user.id, weekdays: weekdays, date_start: dateStart}) api.getPaymentAmount({ user: window.LIL_STORE.user.id, weekdays: weekdays, date_start: dateStart})
.then((response) => { .then(response => {
$order.removeClass('order--loading');
var text = ''; var text = '';
var amount = +response.data.amount; var amount = +response.data.amount;
if(bonuses && bonuses >= amount){ if(bonuses){
$bonuses.show(); $bonusesCount.text(rupluralize(bonuses > amount ? amount : bonuses, ['бонус', 'бонуса', 'бонусов']));
} $bonuses.show();
if(useBonuses){ if(useBonuses) {
amount = 0; amount = bonuses > amount ? 0 : amount - bonuses;
}
} }
if(response.data.price != amount) { if(response.data.price != amount) {
text = '<del>' + response.data.price+'</del> ' + amount + 'р.'; text = '<del>' + response.data.price+'</del> ' + amount + 'р.';
@ -191,14 +199,17 @@ $(document).ready(function () {
$orderPrice.html(text); $orderPrice.html(text);
$orderDates.text(moment(response.data.date_start).format('D MMM') + ' - ' + moment(response.data.date_end).format('D MMM')); $orderDates.text(moment(response.data.date_start).format('D MMM') + ' - ' + moment(response.data.date_end).format('D MMM'));
$('.but_btn_popup').attr('href', link+'?'+decodeURIComponent($.param({ $('.but_btn_popup').attr('href', link+'?'+decodeURIComponent($.param({
weekdays: weekdays, weekdays: weekdays,
date_start: moment(response.data.date_start).format('YYYY-MM-DD'), date_start: moment(response.data.date_start).format('YYYY-MM-DD'),
use_bonuses: useBonuses || '', use_bonuses: useBonuses || '',
}, true))); }, true)));
}).catch(() => {
$order.removeClass('order--loading');
}); });
} }
else { else {
$orderPrice.html('0p.'); $orderPrice.html('0p.');
$bonuses.hide();
} }
} }

@ -0,0 +1,5 @@
export const rupluralize = (value, args) => {
let digit = Math.trunc(value) + '';
digit = digit[digit.length - 1];
return value + ' ' + args[digit == '1' ? 0 : ('234'.search(digit) > -1 ? 1 : 2)];
}

@ -3091,8 +3091,14 @@ a.grey-link
padding: 20px 20px 0 padding: 20px 20px 0
&__total &__total
margin-left: auto margin-left: auto
position: relative
del del
color: #a0a0a0 color: #a0a0a0
& .loading-loader
display: none
margin-left: -40px
&--loading .loading-loader
display: block
.lock .lock
padding: 50px 60px 40px padding: 50px 60px 40px
@ -3326,7 +3332,7 @@ a.grey-link
&__product &__product
flex: 0 0 60%; flex: 0 0 60%;
+m +m
flex: 0 0 40%; flex: 1 0 40%;
&__amount &__amount
flex: 0 0 10%; flex: 0 0 10%;
&__user &__user

Loading…
Cancel
Save