diff --git a/project/customer/consts.py b/project/customer/consts.py
index ed42452..3770a68 100644
--- a/project/customer/consts.py
+++ b/project/customer/consts.py
@@ -8,22 +8,43 @@ PROFILE_TYPES = (
(ORG_PROFILE, u'Организация'),
)
+# лицензии
+
+LICENSE_PAY_DAYS = 10 # дней на оплату счёта
+LICENSE_LEFT_DAYS = 15 # осталось дней до конца лицензии
+
+LICENSE_TEST_PERIOD_TERM = 0 # тип срока: пробный период. это особый тип, никак не связанный с моделью LicensePrice
+LICENSE_TEST_PERIOD_DAYS = 45 # длительность пробного периода в днях
+
+LICENSE_TEST_PERIOD = -1
+LICENSE_UNPAID = 0
+LICENSE_PAID = 1
+LICENSE_ACTIVE = 2
+LICENSE_EXPIRED = 3
+LICENSE_SUSPENDED = 4
+
LICENSE_STATUSES = (
- (-1, u'Пробный период'),
- (0, u'Не оплачен'),
- (1, u'Оплачен'),
- (2, u'Активирован'),
- (3, u'Срок действия истёк'),
- (4, u'Заморожен'),
+ (LICENSE_TEST_PERIOD, u'Пробный период'),
+ (LICENSE_UNPAID, u'Не оплачен'),
+ (LICENSE_PAID, u'Оплачен'),
+ (LICENSE_ACTIVE, u'Активирован'),
+ (LICENSE_EXPIRED, u'Срок действия истёк'),
+ (LICENSE_SUSPENDED, u'Заморожен'),
)
+PAYFORM_FREE = -1
+PAYFORM_BEZNAL = 0
+PAYFORM_CARD = 1
+# PAYFORM_SBER_KVITANZ = 2
+
PAYFORMS = (
- (-1, u'Бесплатно'),
- (0, u'Безналичный расчёт'),
- (1, u'Банковская карта'),
-# (2, u'Квитанция Сбербанка'),
+ (PAYFORM_FREE, u'Бесплатно'),
+ (PAYFORM_BEZNAL, u'Безналичный расчёт'),
+ (PAYFORM_CARD, u'Банковская карта'),
+# (PAYFORM_SBER_KVITANZ, u'Квитанция Сбербанка'),
)
+# типы сроков для модели LicensePrice
TERMS = (
(1, u'1 месяц'),
(6, u'6 месяцев'),
diff --git a/project/customer/context_processors.py b/project/customer/context_processors.py
index 7872f64..7edabc0 100644
--- a/project/customer/context_processors.py
+++ b/project/customer/context_processors.py
@@ -4,6 +4,9 @@ from django.core.cache import cache
from .models import License
+cache_duration = 3600
+
+
def license_check_soon_ends(request):
try:
license_cookie = request.COOKIES.get('close_message_license')
@@ -12,21 +15,23 @@ def license_check_soon_ends(request):
cur_license = cache.get('cur_license_%s' % (request.user.username,), None)
if not days_left or not cur_license:
now = datetime.today()
- cur_license = License.objects.filter(company=request.user.profile, date_from__lte=now, date_to__gte=now, status__in=[-1, 1, 2], deleted=False)
+ cur_license = License.objects.filter(company=request.user.profile, date_from__lte=now, date_to__gte=now,
+ status__in=[consts.LICENSE_TEST_PERIOD, consts.LICENSE_PAID, consts.LICENSE_ACTIVE], deleted=False)
if cur_license:
cur_license = cur_license[0]
days_left = (cur_license.date_to - now.date()).days
- cache.set('days_left_%s' % (request.user.username,), days_left, 3600)
- cache.set('cur_license_%s' % (request.user.username,), cur_license, 3600)
+ cache.set('days_left_%s' % (request.user.username,), days_left, cache_duration)
+ cache.set('cur_license_%s' % (request.user.username,), cur_license, cache_duration)
if not license_cookie:
now = datetime.today()
if license_15days is None:
- licenses_ends = License.objects.filter(company=request.user.profile, date_to__lte=now + timedelta(15), status__in=[-1, 1, 2], deleted=False)
- next_licenses = License.objects.filter(company=request.user.profile, status=1, deleted=False)
+ licenses_ends = License.objects.filter(company=request.user.profile, date_to__lte=now + timedelta(consts.LICENSE_LEFT_DAYS),
+ status__in=[consts.LICENSE_TEST_PERIOD, consts.LICENSE_PAID, consts.LICENSE_ACTIVE], deleted=False)
+ next_licenses = License.objects.filter(company=request.user.profile, status=consts.LICENSE_PAID, deleted=False)
if licenses_ends and not next_licenses:
days_to_end = licenses_ends[0].date_to
- cache.set('license_15_%s' % (request.user.username,), days_to_end, 3600)
+ cache.set('license_15_%s' % (request.user.username,), days_to_end, cache_duration)
license_15days = days_to_end
else:
license_15days = ''
diff --git a/project/customer/models.py b/project/customer/models.py
index 0ecc6ce..f7628fa 100644
--- a/project/customer/models.py
+++ b/project/customer/models.py
@@ -418,9 +418,9 @@ class License(models.Model):
date_from = models.DateField(u'дата начала', null=True, blank=True)
date_to = models.DateField(u'дата окончания', null=True, blank=True)
payform = models.IntegerField(verbose_name=u'форма оплаты',
- choices=consts.PAYFORMS, default=0)
+ choices=consts.PAYFORMS, default=consts.PAYFORM_BEZNAL)
status = models.IntegerField(verbose_name=u'статус лицензии',
- choices=consts.LICENSE_STATUSES, default=0)
+ choices=consts.LICENSE_STATUSES, default=consts.LICENSE_UNPAID)
order_date = models.DateField(verbose_name=u'дата заказа', auto_now_add=True)
paid_date = models.DateField(verbose_name=u'дата оплаты', null=True, blank=True)
pay_sum= models.IntegerField(verbose_name=u'сумма оплаты')
@@ -449,7 +449,7 @@ class License(models.Model):
self.date_to = self.date_from + relativedelta(months=self.term, days=-1)
self.company.active = True
self.company.save()
- self.status = 1
+ self.status = consts.LICENSE_PAID
utils.check_one_profile(self.company, License, datetime.now(), manual=True)
super(License, self).save(*args, **kwargs)
@@ -458,31 +458,30 @@ class License(models.Model):
return self.company.get_company_name()
def get_action_link(self):
-
- if self.status == 0:
- if self.payform == 0:
+ if self.status == consts.LICENSE_UNPAID:
+ if self.payform == consts.PAYFORM_BEZNAL:
return u'Скачать счёт' % reverse('customer_license_get_doc', kwargs={'order_num': self.id})
- elif self.payform == 1:
+ elif self.payform == consts.PAYFORM_CARD:
return u'Оплатить счёт'
- elif self.payform == 2:
+ elif self.payform == consts.PAYFORM_SBER_KVITANZ: # не используется. однако могут быть старые лицензии с данной формой оплаты
return u'Скачать квитанцию' % reverse('customer_license_get_doc', kwargs={'order_num': self.id})
- elif self.status in [1, 2]:
+ elif self.status in [consts.LICENSE_PAID, consts.LICENSE_ACTIVE]:
return u'История операций'
else:
return ''
def get_term(self):
- if self.term == 0:
- return u'45 дней'
+ if self.term == consts.LICENSE_TEST_PERIOD_TERM:
+ return u'%d дней' % consts.LICENSE_TEST_PERIOD_DAYS
else:
return u'%s %s' % (self.term,
numeral.choose_plural(self.term, u"месяц, месяца, месяцев"),
)
def get_paid_status(self):
- if self.status == 1:
+ if self.status == consts.LICENSE_PAID:
return u'Лицензия оплачена, ещё не активирована'
- elif self.status in [2, -1]:
+ elif self.status in [consts.LICENSE_ACTIVE, consts.LICENSE_TEST_PERIOD]:
left = relativedelta(self.date_to, datetime.today())
if left.months:
left_str = '%d %s %d %s' % (left.months,
@@ -496,7 +495,7 @@ class License(models.Model):
numeral.choose_plural(left.days, u"день, дня, дней"),
)
return u'Лицензия активирована: осталось %s' % left_str
- elif self.status == 3:
+ elif self.status == consts.LICENSE_EXPIRED:
return u'Время истекло'
else:
return None
diff --git a/project/customer/tasks.py b/project/customer/tasks.py
index 36cd88c..c8e1e54 100644
--- a/project/customer/tasks.py
+++ b/project/customer/tasks.py
@@ -9,6 +9,7 @@ from celery import shared_task
from .models import License, UserProfile
from .utils import check_one_profile
+from project.customer import consts
@shared_task
@@ -16,11 +17,11 @@ def check_license():
profiles = UserProfile.objects.all()
now = datetime.today()
- #licenses = License.objects.filter(date_to__lt=now, status__in=[-1, 2], deleted=False)
- #licenses.update(status=3)
+ #licenses = License.objects.filter(date_to__lt=now, status__in=[consts.LICENSE_TEST_PERIOD, consts.LICENSE_ACTIVE], deleted=False)
+ #licenses.update(status=consts.LICENSE_EXPIRED)
- licenses = License.objects.filter(order_date__lte=now - timedelta(10), status=0, deleted=False)
- licenses.update(status=4)
+ licenses = License.objects.filter(order_date__lte=now - timedelta(consts.LICENSE_PAY_DAYS), status=consts.LICENSE_UNPAID, deleted=False)
+ licenses.update(status=consts.LICENSE_SUSPENDED)
for profile in profiles:
try:
diff --git a/project/customer/utils.py b/project/customer/utils.py
index cea368c..937bc9e 100644
--- a/project/customer/utils.py
+++ b/project/customer/utils.py
@@ -5,14 +5,17 @@ from django.conf import settings
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
+from project.customer import consts
+
SUPPORT_EMAIL = getattr(settings, 'SUPPORT_EMAIL')
def check_one_profile(profile, License, now, manual=False):
profile_is_active = profile.active
- licenses = License.objects.filter(company=profile, date_from__lte=now, date_to__gte=now, status__in=[-1, 1, 2], deleted=False)
- licenses.filter(status=1).update(status=2)
+ licenses = License.objects.filter(company=profile, date_from__lte=now, date_to__gte=now,
+ status__in=[consts.LICENSE_TEST_PERIOD, consts.LICENSE_PAID, consts.LICENSE_ACTIVE], deleted=False)
+ licenses.filter(status=consts.LICENSE_PAID).update(status=consts.LICENSE_ACTIVE)
if licenses:
profile.active = True
@@ -34,12 +37,14 @@ def check_one_profile(profile, License, now, manual=False):
email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
email.send()
- licenses_remain = License.objects.filter(company=profile, date_from__gt=now + timedelta(1), status=1, deleted=False)
- licenses_to_pay = License.objects.filter(company=profile, status=0, deleted=False)
+ licenses_remain = License.objects.filter(company=profile, date_from__gt=now + timedelta(1),
+ status=consts.LICENSE_PAID, deleted=False)
+ licenses_to_pay = License.objects.filter(company=profile, status=consts.LICENSE_UNPAID, deleted=False)
if not licenses_remain and not manual:
- licenses = License.objects.filter(company=profile, date_to__lt=now, status__in=[-1, 2], deleted=False)
- licenses.update(status=3)
+ licenses = License.objects.filter(company=profile, date_to__lt=now,
+ status__in=[consts.LICENSE_TEST_PERIOD, consts.LICENSE_ACTIVE], deleted=False)
+ licenses.update(status=status=consts.LICENSE_EXPIRED)
if licenses:
template_name = 'myauth/license_ended.txt'
@@ -53,7 +58,8 @@ def check_one_profile(profile, License, now, manual=False):
email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
email.send()
- licenses = License.objects.filter(company=profile, date_to=now + timedelta(1), status__in=[-1, 2], deleted=False)
+ licenses = License.objects.filter(company=profile, date_to=now + timedelta(1),
+ status__in=[consts.LICENSE_TEST_PERIOD, consts.LICENSE_ACTIVE], deleted=False)
if licenses:
template_name = 'myauth/license_ends.txt'
@@ -68,7 +74,8 @@ def check_one_profile(profile, License, now, manual=False):
email.send()
if not manual:
- licenses = License.objects.filter(company=profile, order_date=now - timedelta(9), status=0, deleted=False)
+ licenses = License.objects.filter(company=profile, order_date=now - timedelta(consts.LICENSE_PAY_DAYS-1),
+ status=status=consts.LICENSE_UNPAID, deleted=False)
if licenses:
template_name = 'myauth/license_to_pay.txt'