From c2c0acc3540054e418e20e37ca6327e36ae83658 Mon Sep 17 00:00:00 2001 From: Dmitriy Shesterkin Date: Mon, 17 Jul 2017 15:28:27 +0300 Subject: [PATCH] fix date --- src/customer/models.py | 75 +++++++++++++------ src/customer/utils.py | 2 +- src/customer/views/license.py | 16 +++- templates/emails/issued_bonus_license.txt | 2 +- .../emails/license_successful_purchased.txt | 2 +- 5 files changed, 68 insertions(+), 29 deletions(-) diff --git a/src/customer/models.py b/src/customer/models.py index ca1666a..d138083 100644 --- a/src/customer/models.py +++ b/src/customer/models.py @@ -6,6 +6,7 @@ import logging from datetime import datetime, timedelta from PIL import Image +from django.db.models.signals import post_save from django.dispatch import receiver from pytils import numeral from dateutil.relativedelta import relativedelta @@ -736,6 +737,14 @@ class Payment(models.Model): (FAIL, 'Отклонен'), ) + BANK = 0 + CARD = 1 + + CHOICES_TYPE = ( + (BANK, 'Безналичный расчёт'), + (CARD, 'Банковская карта'), + ) + order_amount = models.DecimalField('Сумма заказа', max_digits=15, decimal_places=2) order_number = models.IntegerField('Номер заказа') user = models.ForeignKey( @@ -749,6 +758,12 @@ class Payment(models.Model): choices=CHOICES, default=PROCESSED ) + type = models.PositiveSmallIntegerField( + verbose_name='Тип платежа', + choices=CHOICES_TYPE, + default=BANK + ) + date = models.DateField(verbose_name='Дата', null=True, blank=True) class Meta: verbose_name = 'Платеж' @@ -757,6 +772,10 @@ class Payment(models.Model): def __str__(self): return f'{self.user}-{self.order_number}-{self.get_status_display()}' + def save(self, *args, **kwargs): + payment = super(Payment, self).save(*args, **kwargs) + return payment + def confirmed_purchase(**kwargs): try: @@ -765,34 +784,11 @@ def confirmed_purchase(**kwargs): order_amount=kwargs['OutSum'] ) payment.status = Payment.SUCCESS + payment.date = datetime.now().date() payment.save() - lic = License.objects.get(pk=payment.order_number) - lic.status = consts.STATUS_PAID - lic.paid_date = datetime.now().date() - lic.save() - - emails.send_license_successful_purchased.delay( - payment.user.email, - lic.pk, - lic.get_term(), - lic.date_from - ) - - bonus_license = create_bonus_license(lic) - if bonus_license: - emails.send_bonus_license_issued.delay( - payment.user.email, - lic.pk, - lic.get_term(), - bonus_license.get_term(), - bonus_license.date_from - ) - except Payment.DoesNotExist: log.info(f"payment with id={kwargs['InvId']} not found") - except License.DoesNotExist: - log.info(f"payment with id={kwargs['InvId']} not found") @receiver(result_received) @@ -804,3 +800,34 @@ def order_completed(sender, **kwargs): def success_page_visited_completed(sender, **kwargs): if settings.DEBUG: confirmed_purchase(**kwargs) + + +@receiver(post_save, sender=Payment) +def check_license_dependence(sender, **kwargs): + if not kwargs.get('created'): + payment = kwargs.get('instance') + if payment.status == Payment.SUCCESS and payment.date: + try: + lic = License.objects.get(pk=payment.order_number) + lic.status = consts.STATUS_PAID + lic.paid_date = payment.date + lic.save() + + emails.send_license_successful_purchased.delay( + payment.user.email, + lic.pk, + lic.get_term(), + lic.date_from.strftime("%d.%m.%Y") + ) + + bonus_license = create_bonus_license(lic) + if bonus_license: + emails.send_bonus_license_issued.delay( + payment.user.email, + lic.pk, + lic.get_term(), + bonus_license.get_term(), + bonus_license.date_from.strftime("%d.%m.%Y") + ) + except License.DoesNotExist: + log.info(f"payment with id={kwargs['InvId']} not found") diff --git a/src/customer/utils.py b/src/customer/utils.py index dedc993..da5e668 100644 --- a/src/customer/utils.py +++ b/src/customer/utils.py @@ -163,7 +163,7 @@ def create_bonus_license(lic): if check_confirm_bonus_to_user(lic.company.get_first_user()) and lic.term >= 12: bonus_term = 0 if lic.term == 12: - bonus_term = 2, + bonus_term = 2 if lic.term == 24: bonus_term = 3 bonus_license = lic._meta.model.objects.create( diff --git a/src/customer/views/license.py b/src/customer/views/license.py index 743c219..7794da3 100644 --- a/src/customer/views/license.py +++ b/src/customer/views/license.py @@ -39,15 +39,27 @@ def order_license(request): company=request.user.profile, term=form.cleaned_data['term'].term, payform=form.cleaned_data['payform'], - pay_sum=form.cleaned_data['term'].price + pay_sum=form.cleaned_data['term'].price, ) new_license.save() if form.cleaned_data['payform'] == '1': payment = Payment.objects.create( order_amount=form.cleaned_data['term'].price, order_number=new_license.id, - user=request.user) + user=request.user, + type=1 + ) return redirect(reverse('payment_robokassa', kwargs={'payment_id': payment.id})) + + if form.cleaned_data['payform'] == '0': + Payment.objects.create( + order_amount=form.cleaned_data['term'].price, + order_number=new_license.id, + user=request.user, + type=0 + ) + return redirect(reverse('customer-orders')) + return redirect(reverse('customer-orders')) return render(request, template_name, dictionary) diff --git a/templates/emails/issued_bonus_license.txt b/templates/emails/issued_bonus_license.txt index 8233865..859a427 100644 --- a/templates/emails/issued_bonus_license.txt +++ b/templates/emails/issued_bonus_license.txt @@ -2,7 +2,7 @@ Спасибо Вам за доверие сайту Документор и за покупку лицензии No {{ lic_number }} на {{ lic_term }}. -Как договаривались, мы создали Вам бесплатную бонусную лицензию на {{ bonus_lic_term }}. Она автоматически начнёт работать {{ activate_date|date:"d.m.Y" }}, когда закончится срок других Ваших лицензий. +Как договаривались, мы создали Вам бесплатную бонусную лицензию на {{ bonus_lic_term }}. Она автоматически начнёт работать {{ activate_date }}, когда закончится срок других Ваших лицензий. Ещё раз, спасибо Вам! {{ site_url }} diff --git a/templates/emails/license_successful_purchased.txt b/templates/emails/license_successful_purchased.txt index 195b08e..38eac16 100644 --- a/templates/emails/license_successful_purchased.txt +++ b/templates/emails/license_successful_purchased.txt @@ -2,7 +2,7 @@ Спасибо Вам за оплату счёта {{ order_number }} -Для Вас была создана лицензия No {{ order_number }} на {{ lic_term }} месяцев, которая будет автоматически активирована {{ activate_date|date:"d.m.Y" }}. +Для Вас была создана лицензия No {{ order_number }} на {{ lic_term }} месяцев, которая будет автоматически активирована {{ activate_date }}. Акт выполненных работ будет создан в момент активации лицензии. Вы сможете скачать его на этой странице {{ site_url }}{{ url }} Ещё раз, спасибо Вам! {{ site_url }}