license: bonuses, the beginning

remotes/origin/license
Andrey 9 years ago
parent acb2946c65
commit 4203cbada9
  1. 6
      project/customer/models.py
  2. 19
      project/customer/utils.py

@ -457,6 +457,7 @@ class License(models.Model):
def save(self, *args, **kwargs):
now_ = datetime.now()
_maybe_bonus = False
if not self.order_date and self.order_status == consts.ORDER_UNPAID:
self.order_date = _now_.date() # TODO maybe raise ValidationError?
@ -480,9 +481,14 @@ class License(models.Model):
if not self.__prev_paid_date and self.paid_date:
self.set_period(now_)
self.set_paid()
_maybe_bonus = True
super(License, self).save(*args, **kwargs)
# добавить бонусную лицензию
if _maybe_bonus:
utils.check_prepaid_bonus(self.company, License, now_)
# дополнительные действия, связанные с сохранением лицензии
utils.check_one_profile(self.company, License, now_, manual=True)

@ -108,6 +108,25 @@ def check_one_profile(profile, License, now_, manual=False):
email.send()
def check_prepaid_bonus(profile, License, now_):
"""
Проверить полагается ли переданному профилю бонус за предоплату.
И если да, то создать для него бонусную лицензию.
Условие предоставления бонуса:
- оплачена лицензия на 1 или 2 года
- до конца лицензии пробного периода осталось не менее 25 дней
"""
# активная лицензия пробного периода
test_license = License.objects.filter(company=profile, date_from__lte=now_, date_to__gte = now_ + timedelta(days=25), # TODO no magic numbers
deleted=False, status=consts.LICENSE_ACTIVE, payform=consts.PAYFORM_TEST_PERIOD)[:1]
if test_license:
# найти ближайшую платную лицензию на год или два
# проверить не давали ли за неё бонус (чтобы не дать дважды)
# если всё ок - создать бонус на 2 или 3 месяца в зависимости от того, оплатили ли лицензию на год или два
def raise_if_no_profile(request):
if not request.user.profile:
raise Exception(u"Profile not found for user: %d, '%s'" % (request.user.pk, request.user.username))

Loading…
Cancel
Save