diff --git a/project/customer/models.py b/project/customer/models.py index 583723a..6866bcd 100644 --- a/project/customer/models.py +++ b/project/customer/models.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) diff --git a/project/customer/utils.py b/project/customer/utils.py index bd5a873..229372d 100644 --- a/project/customer/utils.py +++ b/project/customer/utils.py @@ -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))