From 481e283b9ff4739b1e2d2a905ebba72be1e5929d Mon Sep 17 00:00:00 2001 From: gzbender Date: Tue, 25 Sep 2018 16:00:14 +0500 Subject: [PATCH] =?UTF-8?q?LIL-674=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B8=20?= =?UTF-8?q?=D1=81=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=BB=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/payment/models.py | 6 ++-- apps/payment/views.py | 18 ++++++------ apps/user/templates/user/bonus-history.html | 2 +- project/templates/blocks/popup_buy.html | 7 +++-- web/src/js/modules/popup.js | 31 ++++++++++++++------- web/src/js/utils.js | 5 ++++ web/src/sass/_common.sass | 8 +++++- 7 files changed, 52 insertions(+), 25 deletions(-) create mode 100644 web/src/js/utils.js diff --git a/apps/payment/models.py b/apps/payment/models.py index 4811f489..b59269c9 100644 --- a/apps/payment/models.py +++ b/apps/payment/models.py @@ -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') diff --git a/apps/payment/views.py b/apps/payment/views.py index 3e004a20..5663df39 100644 --- a/apps/payment/views.py +++ b/apps/payment/views.py @@ -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, diff --git a/apps/user/templates/user/bonus-history.html b/apps/user/templates/user/bonus-history.html index fc671f00..d4f32bcb 100644 --- a/apps/user/templates/user/bonus-history.html +++ b/apps/user/templates/user/bonus-history.html @@ -48,7 +48,7 @@ {% else %}
{% 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 %} diff --git a/project/templates/blocks/popup_buy.html b/project/templates/blocks/popup_buy.html index b2f81760..093b19ac 100644 --- a/project/templates/blocks/popup_buy.html +++ b/project/templates/blocks/popup_buy.html @@ -74,14 +74,17 @@ {% endif %}
Итого, за месяц:
-
+
+
+ +
diff --git a/web/src/js/modules/popup.js b/web/src/js/modules/popup.js index b6469075..adfa7510 100644 --- a/web/src/js/modules/popup.js +++ b/web/src/js/modules/popup.js @@ -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 = '' + response.data.price+' ' + 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(); } } diff --git a/web/src/js/utils.js b/web/src/js/utils.js new file mode 100644 index 00000000..0039ba47 --- /dev/null +++ b/web/src/js/utils.js @@ -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)]; +} diff --git a/web/src/sass/_common.sass b/web/src/sass/_common.sass index 10a2f713..56747a04 100755 --- a/web/src/sass/_common.sass +++ b/web/src/sass/_common.sass @@ -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