add bonus system

prod
Dmitriy Shesterkin 9 years ago
parent 628dbe6779
commit 39f6a9e71b
  1. 9
      src/commons/management/commands/clearcache.py
  2. 1
      src/customer/consts.py
  3. 17
      src/customer/emails.py
  4. 11
      src/customer/models.py
  5. 25
      src/customer/utils.py
  6. 2
      src/customer/views/license.py
  7. 7
      src/dokumentor/settings/common.py
  8. 7
      src/dokumentor/settings/local.py
  9. 2
      src/dokumentor/settings/stage.py
  10. 5
      src/dokumentor/settings/testing.py
  11. 6
      templates/customer/profile/orders_list.html
  12. 12
      templates/emails/issued_bonus_license.txt
  13. 2
      templates/emails/license_successful_purchased.txt

@ -0,0 +1,9 @@
# -*- coding: utf-8 -*-
from django.core.management.base import BaseCommand
from django.core.cache import cache
class Command(BaseCommand):
def handle(self, *args, **kwargs):
cache.clear()
self.stdout.write('Cleared cache\n')

@ -25,6 +25,7 @@ LICENSE_STATUSES = (
)
PAYFORMS = (
(-2, 'Бонусная'),
(-1, 'Бесплатно'),
(0, 'Безналичный расчёт'),
(1, 'Банковская карта'),

@ -37,3 +37,20 @@ def send_license_successful_purchased(user_email, order_number, lic_term, activa
email_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
return email.send()
@task
def send_bonus_license_issued(user_email, lic_number, lic_term, bonus_lic_term, activate_date):
template_name = 'emails/issued_bonus_license.txt'
subject = 'Документор: Выдана бонусная лицензия'
dict_context = {'user_email': user_email,
'support_email': settings.SUPPORT_EMAIL,
'site_url': get_site_url(),
'lic_number': lic_number,
'lic_term': lic_term,
'bonus_lic_term': bonus_lic_term,
'activate_date': activate_date
}
email_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
return email.send()

@ -18,6 +18,7 @@ from django.utils.deconstruct import deconstructible
from django.conf import settings
from customer import consts, managers, utils
from customer.utils import create_bonus_license
from myauth.models import DokUser
from commons.utils import only_numerics
from robokassa.signals import result_received, success_page_visited
@ -778,6 +779,16 @@ def confirmed_purchase(**kwargs):
lic.date_from.date()
)
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.date()
)
except Payment.DoesNotExist:
log.info(f"payment with id={kwargs['InvId']} not found")
except License.DoesNotExist:

@ -1,11 +1,14 @@
# -*- coding: utf-8 -*-
from datetime import timedelta
from dateutil.relativedelta import relativedelta
from pytils import numeral
from django.utils import timezone
from django.conf import settings
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
from django.core.cache import cache
from commons.utils import get_site_url
@ -154,3 +157,25 @@ def get_display_message_for_bonus(day_count):
f'чтобы получить <a href="#">бонус</a>'
return message
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,
if lic.term == 24:
bonus_term = 3
bonus_license = lic._meta.model.objects.create(
company=lic.company,
term=bonus_term,
payform=-2,
status=1,
order_date=timezone.now().date(),
date_from=lic.date_to + timedelta(1),
date_to=lic.date_to + timedelta(1) + relativedelta(months=bonus_term, days=-1),
pay_sum=0
)
cache.set(f'confirm_bonus_days_{lic.company.get_first_user().username}', -1, 3600)
return bonus_license
return False

@ -158,7 +158,7 @@ def orders_list(request):
accounts_list = License.objects.filter(
company=request.user.profile,
deleted=False,
status__gt=-1).\
status__gt=-1).exclude(payform=-2).\
annotate(type=Count('status')).order_by('-id')
licenses_list = License.objects.filter(

@ -4,7 +4,6 @@
import os
import sys
from datetime import timedelta
import raven
import envvars as e
@ -368,3 +367,9 @@ LOGGING = {
}
},
}
if DEBUG:
LOGGING['loggers']['raven'] = {
'handlers': ['null'],
'level': 'ERROR',
}

@ -22,9 +22,14 @@ if DEBUG:
}
DATABASES = {
'default': dj_database_url.parse(e.get('DJANGO_DB')),
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(ROOT_DIR, 'db.sqlite3'),
}
}
RAVEN_CONFIG = {}
EMAIL_BACKEND = 'eml_email_backend.EmailBackend'
EMAIL_FILE_PATH = os.path.join(ROOT_DIR, 'tmp_emails')

@ -1,6 +1,6 @@
# flake8: noqa
# coding: utf-8
import raven
import dj_database_url
from src.dokumentor.settings.common import *

@ -13,7 +13,10 @@ EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
PASSWORD_HASHERS = ('django.contrib.auth.hashers.MD5PasswordHasher', )
DATABASES = {
'default': dj_database_url.parse(e.get('DJANGO_TEST_DB')),
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(ROOT_DIR, 'db_test.sqlite3'),
}
}

@ -22,7 +22,11 @@
{% else %}
<div class="col__lic-main">
<p>Лицензия № {{object.id}} на {{ object.get_term }},
{% if object.pay_sum > 0 %}{{ object.pay_sum|get_plural:"рубль,рубля,рублей" }}{% else %}бесплатно{% endif %}</p>
{% if object.pay_sum > 0 %}{{ object.pay_sum|get_plural:"рубль,рубля,рублей" }}{% else %}
{% if object.payform == -1 %}
бесплатно{% else %}бонусная
{% endif %}
{% endif %}</p>
<p>{% if object.term > 0 %}{{ object.get_action_link|safe }}{% else %}Пробный период{% endif %}</p>
</div>
{% endif %}

@ -0,0 +1,12 @@
Здравствуйте!
Спасибо Вам за доверие сайту Документор и за покупку лицензии No {{ lic_number }} на {{ lic_term }}.
Как договаривались, мы создали Вам бесплатную бонусную лицензию на {{ bonus_lic_term }}. Она автоматически начнёт работать {{ activate_date|date:"d.m.Y" }}, когда закончится срок других Ваших лицензий.
Ещё раз, спасибо Вам! {{ site_url }}
--
Это письмо отправлено роботом. Пожалуйста не отвечайте на него. По всем вопросам пишите на {{ support_email }}

@ -2,7 +2,7 @@
Спасибо Вам за оплату счёта {{ order_number }}
Для Вас была создана лицензия No {{ order_number }} на {{ lic_term }} месяцев, которая будет автоматически активирована {{ activate_date }}.
Для Вас была создана лицензия No {{ order_number }} на {{ lic_term }} месяцев, которая будет автоматически активирована {{ activate_date|date:"d.m.Y" }}.
Акт выполненных работ будет создан в момент активации лицензии. Вы сможете скачать его на этой странице {{ site_url }}{{ url }}
Если Вы согласны, купите лицензию здесь {{ site_url }}{{ url }}. Если нет - ничего страшного ;)

Loading…
Cancel
Save