|
|
|
|
@ -417,40 +417,48 @@ class License(models.Model): |
|
|
|
|
term = models.IntegerField(verbose_name=u'срок лицензии') |
|
|
|
|
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=consts.PAYFORM_BEZNAL) |
|
|
|
|
status = models.IntegerField(verbose_name=u'статус лицензии', |
|
|
|
|
choices=consts.LICENSE_STATUSES, default=consts.LICENSE_UNPAID) |
|
|
|
|
payform = models.IntegerField(verbose_name=u'форма оплаты', choices=consts.PAYFORMS, default=consts.PAYFORM_BEZNAL) |
|
|
|
|
status = models.IntegerField(verbose_name=u'статус лицензии', 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'сумма оплаты') |
|
|
|
|
deleted = models.BooleanField(u'удалено', default=False) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
verbose_name = u'Лицензия' |
|
|
|
|
verbose_name_plural = u'Лицензии' |
|
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs): |
|
|
|
|
super(License, self).__init__(*args, **kwargs) |
|
|
|
|
self.__prev_date = self.paid_date |
|
|
|
|
self.__prev_paid_date = self.paid_date |
|
|
|
|
|
|
|
|
|
def __unicode__(self): |
|
|
|
|
return u'%s - %s %s (%d %s)' % ( |
|
|
|
|
self.company.get_company_name(), |
|
|
|
|
self.term, |
|
|
|
|
numeral.choose_plural(self.term, u"месяц, месяца, месяцев"), |
|
|
|
|
self.pay_sum, |
|
|
|
|
numeral.choose_plural(self.pay_sum, u"рубль, рубля, рублей"), |
|
|
|
|
) |
|
|
|
|
self.company.get_company_name(), |
|
|
|
|
self.term, |
|
|
|
|
numeral.choose_plural(self.term, u"месяц, месяца, месяцев"), |
|
|
|
|
self.pay_sum, |
|
|
|
|
numeral.choose_plural(self.pay_sum, u"рубль, рубля, рублей"), |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs): |
|
|
|
|
if not self.__prev_date and self.paid_date: |
|
|
|
|
if not self.__prev_paid_date and self.paid_date: |
|
|
|
|
max_date_license = License.objects.filter(company=self.company).aggregate(Max('date_to'))['date_to__max'] |
|
|
|
|
today = datetime.now().date() |
|
|
|
|
if max_date_license < today: |
|
|
|
|
max_date_license = today - timedelta(1) |
|
|
|
|
|
|
|
|
|
now_ = datetime.now() |
|
|
|
|
if max_date_license < now_.today(): |
|
|
|
|
max_date_license = now_.today() - timedelta(days=1) |
|
|
|
|
|
|
|
|
|
self.date_from = max_date_license + relativedelta(days=1) |
|
|
|
|
self.date_to = self.date_from + relativedelta(months=self.term, days=-1) |
|
|
|
|
|
|
|
|
|
self.company.active = True |
|
|
|
|
self.company.save() |
|
|
|
|
|
|
|
|
|
self.status = consts.LICENSE_PAID |
|
|
|
|
utils.check_one_profile(self.company, License, datetime.now(), manual=True) |
|
|
|
|
|
|
|
|
|
utils.check_one_profile(self.company, License, now_, manual=True) |
|
|
|
|
|
|
|
|
|
super(License, self).save(*args, **kwargs) |
|
|
|
|
|
|
|
|
|
@ -461,55 +469,61 @@ class License(models.Model): |
|
|
|
|
if self.status == consts.LICENSE_UNPAID: |
|
|
|
|
if self.payform == consts.PAYFORM_BEZNAL: |
|
|
|
|
return u'<a href="%s">Скачать счёт</a>' % reverse('customer_license_get_doc', kwargs={'order_num': self.id}) |
|
|
|
|
|
|
|
|
|
elif self.payform == consts.PAYFORM_CARD: |
|
|
|
|
return u'Оплатить счёт' |
|
|
|
|
|
|
|
|
|
elif self.payform == consts.PAYFORM_SBER_KVITANZ: # не используется. однако могут быть старые лицензии с данной формой оплаты |
|
|
|
|
return u'<a href="%s">Скачать квитанцию</a>' % reverse('customer_license_get_doc', kwargs={'order_num': self.id}) |
|
|
|
|
|
|
|
|
|
elif self.status in [consts.LICENSE_PAID, consts.LICENSE_ACTIVE]: |
|
|
|
|
return u'История операций' |
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
return '' |
|
|
|
|
|
|
|
|
|
def get_term(self): |
|
|
|
|
if self.term == consts.LICENSE_TEST_PERIOD_TERM: |
|
|
|
|
return u'%d дней' % consts.LICENSE_TEST_PERIOD_DAYS |
|
|
|
|
return u'%d %s' % (consts.LICENSE_TEST_PERIOD_DAYS, numeral.choose_plural(self.term, u'день, дня, дней'),) |
|
|
|
|
else: |
|
|
|
|
return u'%s %s' % (self.term, |
|
|
|
|
numeral.choose_plural(self.term, u"месяц, месяца, месяцев"), |
|
|
|
|
) |
|
|
|
|
return u'%s %s' % (self.term, numeral.choose_plural(self.term, u"месяц, месяца, месяцев"),) |
|
|
|
|
|
|
|
|
|
def get_paid_status(self): |
|
|
|
|
if self.status == consts.LICENSE_PAID: |
|
|
|
|
return u'Лицензия оплачена, ещё не активирована' |
|
|
|
|
|
|
|
|
|
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, |
|
|
|
|
numeral.choose_plural(left.months, u"месяц, месяца, месяцев"), |
|
|
|
|
left.days, |
|
|
|
|
numeral.choose_plural(left.days, u"день, дня, дней"), |
|
|
|
|
) |
|
|
|
|
left_str = u'%d %s %d %s' % ( |
|
|
|
|
left.months, |
|
|
|
|
numeral.choose_plural(left.months, u"месяц, месяца, месяцев"), |
|
|
|
|
left.days, |
|
|
|
|
numeral.choose_plural(left.days, u"день, дня, дней"), |
|
|
|
|
) |
|
|
|
|
else: |
|
|
|
|
left_str = '%d %s' % ( |
|
|
|
|
left.days, |
|
|
|
|
numeral.choose_plural(left.days, u"день, дня, дней"), |
|
|
|
|
) |
|
|
|
|
left_str = u'%d %s' % ( |
|
|
|
|
left.days, |
|
|
|
|
numeral.choose_plural(left.days, u"день, дня, дней"), |
|
|
|
|
) |
|
|
|
|
return u'Лицензия активирована: осталось %s' % left_str |
|
|
|
|
|
|
|
|
|
elif self.status == consts.LICENSE_EXPIRED: |
|
|
|
|
return u'Время истекло' |
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LicensePrice(models.Model): |
|
|
|
|
term = models.IntegerField(verbose_name=u'срок лицензии', |
|
|
|
|
choices=consts.TERMS) |
|
|
|
|
price = models.IntegerField(verbose_name=u'сумма оплаты') |
|
|
|
|
term = models.IntegerField(u'срок лицензии', choices=consts.TERMS) |
|
|
|
|
price = models.IntegerField(u'сумма оплаты') |
|
|
|
|
|
|
|
|
|
def __unicode__(self): |
|
|
|
|
return u'%s %s (%d %s)' % (self.term, |
|
|
|
|
numeral.choose_plural(self.term, u"месяц, месяца, месяцев"), |
|
|
|
|
self.price, |
|
|
|
|
numeral.choose_plural(self.price, u"рубль, рубля, рублей"), |
|
|
|
|
) |
|
|
|
|
return u'%s %s (%d %s)' % ( |
|
|
|
|
self.term, |
|
|
|
|
numeral.choose_plural(self.term, u"месяц, месяца, месяцев"), |
|
|
|
|
self.price, |
|
|
|
|
numeral.choose_plural(self.price, u"рубль, рубля, рублей"), |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|