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):
user = payment.user
weekdays = payment.weekdays
date_start = payment.date_start
price = 0
referral_bonus = 0
referrer_bonus = 0
if hasattr(user, 'referral') and not user.referral.payment:
referral_bonus = user.referral.bonus
referrer_bonus = user.referral.referrer_bonus
date_start = school_payment.date_start
discount = 0
if course:
price = course.price
@ -214,7 +214,9 @@ class Payment(PolymorphicModel):
paid = self.status in [Pingback.PINGBACK_TYPE_REGULAR, Pingback.PINGBACK_TYPE_GOODWILL,
Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED,]
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')
if isinstance(self, SchoolPayment):
self.weekdays = amount_data.get('weekdays')

@ -147,17 +147,17 @@ class SchoolBuyView(TemplateView):
)
if use_bonuses:
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.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:
messages.error(request, 'Недостаточно бонусов для оплаты')
return redirect(reverse_lazy('school:school'))
bonus = UserBonus.objects.create(amount= -request.user.bonus, user=request.user,
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(
f'school_{school_payment.id}',
school_payment.amount,

@ -48,7 +48,7 @@
{% else %}
<div class="transactions__cell transactions__product">
{% 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 %}
Школа. {% if payment.date_start and payment.date_end %}{{ payment.date_start }} - {{ payment.date_end }}{% endif %}
{% endif %}

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

@ -1,6 +1,7 @@
import $ from 'jquery';
import moment from 'moment';
import {api} from './api';
import {rupluralize} from '../utils';
moment.locale('ru');
@ -155,13 +156,16 @@ $(document).ready(function () {
function updateCart(){
var link = $('.but_btn_popup').data('link');
var $order = $('.order');
var $orderPrice = $('.order_price_text');
var $orderDates = $('.order__dates');
var dateStart = popup.data('date-start');
var days = ['', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'];
var weekdays = [], daysText = [];
var weekdays = [];
var daysText = [];
var $bonuses = $('.buy__bonuses');
var $bonusesCheckbox = $('[data-bonuses]');
var $bonusesCount = $('.buy__bonuses-count');
var useBonuses = $bonusesCheckbox.prop('checked');
var bonuses = +$bonusesCheckbox.data('bonuses');
$('[data-day]').each(function() {
@ -173,15 +177,19 @@ $(document).ready(function () {
});
if(weekdays.length){
$order.addClass('order--loading');
$orderPrice.html('');
api.getPaymentAmount({ user: window.LIL_STORE.user.id, weekdays: weekdays, date_start: dateStart})
.then((response) => {
.then(response => {
$order.removeClass('order--loading');
var text = '';
var amount = +response.data.amount;
if(bonuses && bonuses >= amount){
$bonuses.show();
}
if(useBonuses){
amount = 0;
if(bonuses){
$bonusesCount.text(rupluralize(bonuses > amount ? amount : bonuses, ['бонус', 'бонуса', 'бонусов']));
$bonuses.show();
if(useBonuses) {
amount = bonuses > amount ? 0 : amount - bonuses;
}
}
if(response.data.price != amount) {
text = '<del>' + response.data.price+'</del> ' + amount + 'р.';
@ -191,14 +199,17 @@ $(document).ready(function () {
$orderPrice.html(text);
$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({
weekdays: weekdays,
date_start: moment(response.data.date_start).format('YYYY-MM-DD'),
use_bonuses: useBonuses || '',
weekdays: weekdays,
date_start: moment(response.data.date_start).format('YYYY-MM-DD'),
use_bonuses: useBonuses || '',
}, true)));
}).catch(() => {
$order.removeClass('order--loading');
});
}
else {
$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
&__total
margin-left: auto
position: relative
del
color: #a0a0a0
& .loading-loader
display: none
margin-left: -40px
&--loading .loading-loader
display: block
.lock
padding: 50px 60px 40px
@ -3326,7 +3332,7 @@ a.grey-link
&__product
flex: 0 0 60%;
+m
flex: 0 0 40%;
flex: 1 0 40%;
&__amount
flex: 0 0 10%;
&__user

Loading…
Cancel
Save