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 = ( PAYFORMS = (
(-2, 'Бонусная'),
(-1, 'Бесплатно'), (-1, 'Бесплатно'),
(0, 'Безналичный расчёт'), (0, 'Безналичный расчёт'),
(1, 'Банковская карта'), (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_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body) email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
return email.send() 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 django.conf import settings
from customer import consts, managers, utils from customer import consts, managers, utils
from customer.utils import create_bonus_license
from myauth.models import DokUser from myauth.models import DokUser
from commons.utils import only_numerics from commons.utils import only_numerics
from robokassa.signals import result_received, success_page_visited from robokassa.signals import result_received, success_page_visited
@ -778,6 +779,16 @@ def confirmed_purchase(**kwargs):
lic.date_from.date() 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: except Payment.DoesNotExist:
log.info(f"payment with id={kwargs['InvId']} not found") log.info(f"payment with id={kwargs['InvId']} not found")
except License.DoesNotExist: except License.DoesNotExist:

@ -1,11 +1,14 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from datetime import timedelta from datetime import timedelta
from dateutil.relativedelta import relativedelta
from pytils import numeral from pytils import numeral
from django.utils import timezone from django.utils import timezone
from django.conf import settings from django.conf import settings
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.core.cache import cache
from commons.utils import get_site_url from commons.utils import get_site_url
@ -154,3 +157,25 @@ def get_display_message_for_bonus(day_count):
f'чтобы получить <a href="#">бонус</a>' f'чтобы получить <a href="#">бонус</a>'
return message 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( accounts_list = License.objects.filter(
company=request.user.profile, company=request.user.profile,
deleted=False, deleted=False,
status__gt=-1).\ status__gt=-1).exclude(payform=-2).\
annotate(type=Count('status')).order_by('-id') annotate(type=Count('status')).order_by('-id')
licenses_list = License.objects.filter( licenses_list = License.objects.filter(

@ -4,7 +4,6 @@
import os import os
import sys import sys
from datetime import timedelta from datetime import timedelta
import raven
import envvars as e 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 = { 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_BACKEND = 'eml_email_backend.EmailBackend'
EMAIL_FILE_PATH = os.path.join(ROOT_DIR, 'tmp_emails') EMAIL_FILE_PATH = os.path.join(ROOT_DIR, 'tmp_emails')

@ -1,6 +1,6 @@
# flake8: noqa # flake8: noqa
# coding: utf-8 # coding: utf-8
import raven
import dj_database_url import dj_database_url
from src.dokumentor.settings.common import * 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', ) PASSWORD_HASHERS = ('django.contrib.auth.hashers.MD5PasswordHasher', )
DATABASES = { 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 %} {% else %}
<div class="col__lic-main"> <div class="col__lic-main">
<p>Лицензия № {{object.id}} на {{ object.get_term }}, <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> <p>{% if object.term > 0 %}{{ object.get_action_link|safe }}{% else %}Пробный период{% endif %}</p>
</div> </div>
{% endif %} {% 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 }} Спасибо Вам за оплату счёта {{ 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 }}
Если Вы согласны, купите лицензию здесь {{ site_url }}{{ url }}. Если нет - ничего страшного ;) Если Вы согласны, купите лицензию здесь {{ site_url }}{{ url }}. Если нет - ничего страшного ;)

Loading…
Cancel
Save