@ -50,25 +50,25 @@ class UploadAndRename(object):
class UserProfile ( models . Model ) :
""" Профиль пользователя. """
profile_type = models . PositiveSmallIntegerField ( u ' Тип профиля ' , choices = consts . PROFILE_TYPES )
profile_type = models . PositiveSmallIntegerField ( ' Тип профиля ' , choices = consts . PROFILE_TYPES )
# общие поля
boss_surname = models . CharField ( u ' Фамилия ' , max_length = 30 , default = ' ' ,
help_text = u ' Используется для строки " подпись " в документах. ' )
boss_name = models . CharField ( u ' Имя ' , max_length = 30 , default = ' ' )
boss_midname = models . CharField ( u ' Отчество ' , max_length = 30 , default = ' ' )
boss_surname = models . CharField ( ' Фамилия ' , max_length = 30 , default = ' ' ,
help_text = ' Используется для строки " подпись " в документах. ' )
boss_name = models . CharField ( ' Имя ' , max_length = 30 , default = ' ' )
boss_midname = models . CharField ( ' Отчество ' , max_length = 30 , default = ' ' )
# длина: 10 для организаций, 12 для ИП
inn = models . CharField ( u ' ИНН ' , max_length = 12 , default = ' ' )
inn = models . CharField ( ' ИНН ' , max_length = 12 , default = ' ' )
# длина: 13 для организаций, 15 для ИП
ogrn = models . CharField ( u ' ОГРН/ОГРНИП ' , max_length = 15 , default = ' ' )
ogrn = models . CharField ( ' ОГРН/ОГРНИП ' , max_length = 15 , default = ' ' )
# длина: 8 для организаций, 8 или 10 для ИП
okpo = models . CharField ( u ' ОКПО ' , max_length = 10 , blank = True , default = ' ' )
okpo = models . CharField ( ' ОКПО ' , max_length = 10 , blank = True , default = ' ' )
glavbuh_surname = models . CharField ( ' Фамилия ' , max_length = 30 , blank = True , default = ' ' ,
help_text = ' Используется для строки " подпись " в документах. ' )
glavbuh_name = models . CharField ( u ' Имя ' , max_length = 30 , blank = True , default = ' ' )
glavbuh_midname = models . CharField ( u ' Отчество ' , max_length = 30 , blank = True , default = ' ' )
glavbuh_name = models . CharField ( ' Имя ' , max_length = 30 , blank = True , default = ' ' )
glavbuh_midname = models . CharField ( ' Отчество ' , max_length = 30 , blank = True , default = ' ' )
address = models . CharField (
' Фактический адрес ' ,
@ -77,17 +77,17 @@ class UserProfile(models.Model):
help_text = ' Будет подставляться в создаваемые счета, акты и накладные. '
)
jur_address = models . CharField ( u ' Юридический адрес ' , max_length = 256 , blank = True , default = ' ' ,
help_text = u ' Как в учредительных документах. ' )
jur_address = models . CharField ( ' Юридический адрес ' , max_length = 256 , blank = True , default = ' ' ,
help_text = ' Как в учредительных документах. ' )
real_address = models . CharField ( u ' Почтовый адрес ' , max_length = 256 , blank = True , default = ' ' ,
help_text = u ' Используется только для карточки компании. ' )
real_address = models . CharField ( ' Почтовый адрес ' , max_length = 256 , blank = True , default = ' ' ,
help_text = ' Используется только для карточки компании. ' )
phone_code = models . CharField ( u ' Код города ' , max_length = 10 , blank = True , default = ' ' )
phone = models . CharField ( u ' Номер телефона ' , max_length = 20 , blank = True , default = ' ' )
phone_code = models . CharField ( ' Код города ' , max_length = 10 , blank = True , default = ' ' )
phone = models . CharField ( ' Номер телефона ' , max_length = 20 , blank = True , default = ' ' )
fax_code = models . CharField ( u ' Код города ' , max_length = 10 , blank = True , default = ' ' )
fax = models . CharField ( u ' Номер телефона ' , max_length = 20 , blank = True , default = ' ' )
fax_code = models . CharField ( ' Код города ' , max_length = 10 , blank = True , default = ' ' )
fax = models . CharField ( ' Номер телефона ' , max_length = 20 , blank = True , default = ' ' )
email = models . EmailField (
' Электронная почта ' ,
@ -108,36 +108,36 @@ class UserProfile(models.Model):
max_length = 256 ,
blank = True ,
default = ' ' ,
help_text = u ' Требуется для счет-фактуры. '
help_text = ' Требуется для счет-фактуры. '
)
ip_reg_date = models . DateField ( u ' Дата регистрации ИП ' , blank = True , null = True )
ip_reg_date = models . DateField ( ' Дата регистрации ИП ' , blank = True , null = True )
# поля, только для Организации
name = models . CharField (
' Краткое название организации ' ,
max_length = 256 ,
default = ' ' ,
help_text = u ' Будет подставляться в создаваемые документы. '
help_text = ' Будет подставляться в создаваемые документы. '
)
full_name = models . CharField (
' Полное название организации ' ,
max_length = 256 ,
blank = True ,
default = ' ' ,
help_text = u ' Как в учредительных документах. '
help_text = ' Как в учредительных документах. '
)
kpp = models . CharField ( u ' КПП ' , max_length = 9 , default = ' ' )
kpp = models . CharField ( ' КПП ' , max_length = 9 , default = ' ' )
boss_title = models . CharField (
u ' Должность руководителя ' ,
' Должность руководителя ' ,
max_length = 256 ,
blank = True ,
default = ' '
)
na_osnovanii = models . CharField (
u ' Действует на основании ' ,
' Действует на основании ' ,
max_length = 256 ,
blank = True ,
default = ' '
@ -151,13 +151,13 @@ class UserProfile(models.Model):
upload_to = UploadAndRename ( PROFILE_IMAGES_UPLOAD_DIR , ' boss_sign.png ' )
)
glavbuh_sign = models . ImageField (
u ' Подпись бухгалтера ' ,
' Подпись бухгалтера ' ,
blank = True ,
default = ' ' ,
upload_to = UploadAndRename ( PROFILE_IMAGES_UPLOAD_DIR , ' glavbuh_sign.png ' )
)
stamp = models . ImageField (
u ' Печать ' ,
' Печать ' ,
blank = True ,
default = ' ' ,
upload_to = UploadAndRename ( PROFILE_IMAGES_UPLOAD_DIR , ' stamp.png ' )
@ -169,30 +169,30 @@ class UserProfile(models.Model):
upload_to = UploadAndRename ( PROFILE_IMAGES_UPLOAD_DIR , ' logo.png ' )
)
created_at = models . DateTimeField ( u ' Создан ' , auto_now_add = True )
updated_at = models . DateTimeField ( u ' Изменен ' , auto_now = True )
active = models . BooleanField ( u ' Активен ' , default = False )
confirmed = models . BooleanField ( u ' Подтверждён ' , default = False )
created_at = models . DateTimeField ( ' Создан ' , auto_now_add = True )
updated_at = models . DateTimeField ( ' Изменен ' , auto_now = True )
active = models . BooleanField ( ' Активен ' , default = False )
confirmed = models . BooleanField ( ' Подтверждён ' , default = False )
user_session_key = models . CharField (
u ' Ключ сессии (служебная информация) ' ,
' Ключ сессии (служебная информация) ' ,
max_length = 256 ,
blank = True ,
default = ' ' ,
help_text = u ' Руками не трогать... '
help_text = ' Руками не трогать... '
)
objects = managers . UserProfileManager ( )
class Meta :
verbose_name = u ' Реквизиты (профиль) '
verbose_name_plural = u ' Реквизиты (профили) '
verbose_name = ' Реквизиты (профиль) '
verbose_name_plural = ' Реквизиты (профили) '
def __unicode__ ( self ) :
return u ' %s , ИНН %s ' % ( self . get_company_name ( ) [ 0 : 30 ] , self . inn or u ' не указан ' )
return ' %s , ИНН %s ' % ( self . get_company_name ( ) [ 0 : 30 ] , self . inn or ' не указан ' )
def __str__ ( self ) :
return u ' %s , ИНН %s ' % ( self . get_company_name ( ) [ 0 : 30 ] , self . inn or u ' не указан ' )
return ' %s , ИНН %s ' % ( self . get_company_name ( ) [ 0 : 30 ] , self . inn or ' не указан ' )
def save ( self , * args , * * kwargs ) :
self . inn = only_numerics ( self . inn )
@ -268,54 +268,52 @@ class UserProfile(models.Model):
` ИП ФИО ` или ` Название Организации ` .
"""
if self . profile_type == consts . IP_PROFILE :
return u ' ИП %s ' % self . get_boss_full_fio ( )
return ' ИП %s ' % self . get_boss_full_fio ( )
elif self . profile_type == consts . ORG_PROFILE :
return self . name . strip ( )
return u ' '
return ' '
def get_inn_and_kpp ( self ) :
""" Возвращает пару ИНН/КПП или только ИНН, если это ИП или КПП не заполнен. """
if self . profile_type == consts . ORG_PROFILE :
kpp = self . kpp . strip ( )
if kpp :
return u ' %s / %s ' % ( self . inn , kpp , )
return ' %s / %s ' % ( self . inn , kpp , )
return self . inn
def get_boss_title ( self ) :
""" Текст ' Индивидуальный предприниматель ' или ' Руководитель организации ' . """
if self . profile_type == consts . IP_PROFILE :
return u ' Индивидуальный предприниматель '
return ' Индивидуальный предприниматель '
elif self . profile_type == consts . ORG_PROFILE :
return u ' Руководитель организации '
return u ' '
return ' Руководитель организации '
return ' '
def get_boss_fio ( self ) :
""" Фамилия и инициалы руководителя ИП/организации. """
if self . boss_surname and self . boss_name and self . boss_midname :
return u ' %s %s . %s . ' % ( self . boss_surname , self . boss_name [ 0 ] , self . boss_midname [ 0 ] , )
return u ' '
return ' %s %s . %s . ' % ( self . boss_surname , self . boss_name [ 0 ] , self . boss_midname [ 0 ] , )
return ' '
def get_boss_full_fio ( self ) :
""" Полное ФИО руководителя ИП/организации. """
return ( u ' %s %s %s ' % ( self . boss_surname , self . boss_name , self . boss_midname , ) ) . strip ( )
return ( ' %s %s %s ' % ( self . boss_surname , self . boss_name , self . boss_midname , ) ) . strip ( )
def get_glavbuh_fio ( self ) :
""" Фамилия и инициалы главного бухгалтера. """
if self . glavbuh_surname and self . glavbuh_name and self . glavbuh_midname :
return ( u ' %s %s . %s . ' % ( self . glavbuh_surname , self . glavbuh_name [ 0 ] ,
self . glavbuh_midname [ 0 ] , ) ) . strip ( )
return u ' '
return f ' { self . glavbuh_surname } { self . glavbuh_name [ 0 ] } . { self . glavbuh_midname [ 0 ] } . '
return ' '
def get_glavbuh_full_fio ( self ) :
""" Полное ФИО главного бухгалтера. """
return ( u ' %s %s %s ' % ( self . glavbuh_surname , self . glavbuh_name ,
self . glavbuh_midname , ) ) . strip ( )
return f ' { self . glavbuh_surname } { self . glavbuh_name } { self . glavbuh_midname } '
def get_full_phone ( self ) :
""" (Код города) Номер телефона. """
phone_code = self . phone_code . strip ( ' () ' )
phone_code = u ' ( %s ) ' % phone_code if phone_code else phone_code
return ( u ' %s %s ' % ( phone_code , self . phone , ) ) . strip ( )
phone_code = f ' ( { phone_code } ) '
return f ' { phone_code } { self . phone } '
def get_email ( self ) :
try :
@ -326,8 +324,8 @@ class UserProfile(models.Model):
def get_full_fax ( self ) :
""" (Код города) Номер факса. """
fax_code = self . fax_code . strip ( ' () ' )
fax_code = u ' ( %s ) ' % fax_code if fax_code else fax_code
return ( u ' %s %s ' % ( fax_code , self . fax , ) ) . strip ( )
fax_code = ' ( %s ) ' % fax_code if fax_code else fax_code
return ( ' %s %s ' % ( fax_code , self . fax , ) ) . strip ( )
def validate_has_profile_account ( self ) :
"""
@ -344,34 +342,34 @@ class BankAccount(models.Model):
""" Расчетные счета. """
company = models . ForeignKey ( UserProfile , related_name = ' bank_accounts ' )
bik = models . CharField ( u ' БИК ' , max_length = 10 )
name = models . CharField ( u ' Наименование банка ' , max_length = 256 )
bik = models . CharField ( ' БИК ' , max_length = 10 )
name = models . CharField ( ' Наименование банка ' , max_length = 256 )
short_name = models . CharField (
' Сокращенное название банка ' ,
max_length = 100 ,
blank = True ,
default = ' '
)
korr_account = models . CharField ( u ' Корр. счет ' , max_length = 20 )
account = models . CharField ( u ' Расчетный счет ' , max_length = 20 )
korr_account = models . CharField ( ' Корр. счет ' , max_length = 20 )
account = models . CharField ( ' Расчетный счет ' , max_length = 20 )
is_main = models . BooleanField ( u ' Основной счет ' , default = False )
is_main = models . BooleanField ( ' Основной счет ' , default = False )
created_at = models . DateTimeField ( u ' Создан ' , auto_now_add = True )
updated_at = models . DateTimeField ( u ' Изменен ' , auto_now = True )
created_at = models . DateTimeField ( ' Создан ' , auto_now_add = True )
updated_at = models . DateTimeField ( ' Изменен ' , auto_now = True )
objects = managers . BankAccountManager ( )
class Meta :
verbose_name = u ' Расчётный счет '
verbose_name_plural = u ' Расчётные счета '
verbose_name = ' Расчётный счет '
verbose_name_plural = ' Расчётные счета '
ordering = [ ' -created_at ' ]
def __unicode__ ( self ) :
return ( u ' %s , %s ' % ( self . account , self . short_name [ 0 : 30 ] or self . name [ 0 : 30 ] , ) ) . strip ( )
return ( ' %s , %s ' % ( self . account , self . short_name [ 0 : 30 ] or self . name [ 0 : 30 ] , ) ) . strip ( )
def __str__ ( self ) :
return ( u ' %s , %s ' % ( self . account , self . short_name [ 0 : 30 ] or self . name [ 0 : 30 ] , ) ) . strip ( )
return ( ' %s , %s ' % ( self . account , self . short_name [ 0 : 30 ] or self . name [ 0 : 30 ] , ) ) . strip ( )
def save ( self , * args , * * kwargs ) :
self . bik = only_numerics ( self . bik )
@ -399,7 +397,7 @@ class Client(models.Model):
""" Контрагенты. """
company = models . ForeignKey ( UserProfile , related_name = ' clients ' )
name = models . CharField ( u ' Наименование ' , max_length = 256 , db_index = True )
name = models . CharField ( ' Наименование ' , max_length = 256 , db_index = True )
name_short_self = models . CharField (
' Короткое наименование ' ,
@ -414,52 +412,52 @@ class Client(models.Model):
blank = True
)
inn = models . CharField ( u ' ИНН ' , max_length = 12 )
kpp = models . CharField ( u ' КПП ' , max_length = 9 , blank = True , default = ' ' ) # Организация
ogrn = models . CharField ( u ' ОГРН ' , max_length = 15 , default = ' ' )
okpo = models . CharField ( u ' ОКПО ' , max_length = 10 , blank = True , default = ' ' ) # ИП
address = models . CharField ( u ' Юр. адрес ' , max_length = 256 )
inn = models . CharField ( ' ИНН ' , max_length = 12 )
kpp = models . CharField ( ' КПП ' , max_length = 9 , blank = True , default = ' ' ) # Организация
ogrn = models . CharField ( ' ОГРН ' , max_length = 15 , default = ' ' )
okpo = models . CharField ( ' ОКПО ' , max_length = 10 , blank = True , default = ' ' ) # ИП
address = models . CharField ( ' Юр. адрес ' , max_length = 256 )
# банковские реквизиты
bank_bik = models . CharField ( u ' БИК ' , max_length = 10 , blank = True , default = ' ' )
bank_name = models . CharField ( u ' Наименование банка ' , max_length = 256 , blank = True , default = ' ' )
bank_bik = models . CharField ( ' БИК ' , max_length = 10 , blank = True , default = ' ' )
bank_name = models . CharField ( ' Наименование банка ' , max_length = 256 , blank = True , default = ' ' )
bank_short_name = models . CharField (
' Сокращенное наименование банка ' ,
max_length = 256 ,
blank = True ,
default = ' '
)
bank_korr_account = models . CharField ( u ' Корр. счет ' , max_length = 20 , blank = True , default = ' ' )
bank_account = models . CharField ( u ' Расчетный счет ' , max_length = 20 , blank = True , default = ' ' )
bank_korr_account = models . CharField ( ' Корр. счет ' , max_length = 20 , blank = True , default = ' ' )
bank_account = models . CharField ( ' Расчетный счет ' , max_length = 20 , blank = True , default = ' ' )
# контакты
contact_name = models . CharField ( u ' Имя ' , max_length = 50 , blank = True , default = ' ' )
contact_email = models . EmailField ( u ' E-mail ' , max_length = 50 , blank = True , default = ' ' )
contact_phone = models . CharField ( u ' Телефон ' , max_length = 50 , blank = True , default = ' ' )
contact_skype = models . CharField ( u ' Skype ' , max_length = 20 , blank = True , default = ' ' )
contact_other = models . CharField ( u ' Другое ' , max_length = 256 , blank = True , default = ' ' )
contact_name = models . CharField ( ' Имя ' , max_length = 50 , blank = True , default = ' ' )
contact_email = models . EmailField ( ' E-mail ' , max_length = 50 , blank = True , default = ' ' )
contact_phone = models . CharField ( ' Телефон ' , max_length = 50 , blank = True , default = ' ' )
contact_skype = models . CharField ( ' Skype ' , max_length = 20 , blank = True , default = ' ' )
contact_other = models . CharField ( ' Другое ' , max_length = 256 , blank = True , default = ' ' )
created_at = models . DateTimeField ( u ' Создан ' , auto_now_add = True )
updated_at = models . DateTimeField ( u ' Изменен ' , auto_now = True )
created_at = models . DateTimeField ( ' Создан ' , auto_now_add = True )
updated_at = models . DateTimeField ( ' Изменен ' , auto_now = True )
objects = managers . ClientManager ( )
class Meta :
verbose_name = u ' Контрагент '
verbose_name_plural = u ' Контрагенты '
verbose_name = ' Контрагент '
verbose_name_plural = ' Контрагенты '
ordering = [ ' name ' , ' -created_at ' ]
def __unicode__ ( self ) :
if self . name_short_self :
return ( u ' %s , %s ' % ( self . name_short_dadata , self . name_short_self ) ) . strip ( )
return ( ' %s , %s ' % ( self . name_short_dadata , self . name_short_self ) ) . strip ( )
else :
return ( u ' %s , ИНН %s ' % ( self . name , self . inn or u ' не указан ' , ) ) . strip ( )
return ( ' %s , ИНН %s ' % ( self . name , self . inn or ' не указан ' , ) ) . strip ( )
def __str__ ( self ) :
if self . name_short_self :
return ( u ' %s , %s ' % ( self . name_short_dadata , self . name_short_self ) ) . strip ( )
return ( ' %s , %s ' % ( self . name_short_dadata , self . name_short_self ) ) . strip ( )
else :
return ( u ' %s , ИНН %s ' % ( self . name , self . inn or u ' не указан ' , ) ) . strip ( )
return ( ' %s , ИНН %s ' % ( self . name , self . inn or ' не указан ' , ) ) . strip ( )
def save ( self , * args , * * kwargs ) :
self . inn = only_numerics ( self . inn )
@ -475,7 +473,7 @@ class Client(models.Model):
""" Возвращает пару ИНН/КПП или только ИНН, если КПП не заполнен. """
kpp = self . kpp . strip ( )
if kpp :
return u ' %s / %s ' % ( self . inn , kpp , )
return ' %s / %s ' % ( self . inn , kpp , )
return self . inn
@ -486,47 +484,47 @@ class UserProfileFilters(models.Model):
company = models . OneToOneField ( UserProfile , related_name = ' profile_filters ' , primary_key = True )
# общие фильтры
show_profile_type = models . BooleanField ( u ' Тип профиля ' , default = True )
show_profile_type = models . BooleanField ( ' Тип профиля ' , default = True )
show_inn = models . BooleanField ( u ' ИНН ' , default = True )
show_ogrn = models . BooleanField ( u ' ОГРН/ОГРНИП ' , default = True )
show_okpo = models . BooleanField ( u ' ОКПО ' , default = True )
show_inn = models . BooleanField ( ' ИНН ' , default = True )
show_ogrn = models . BooleanField ( ' ОГРН/ОГРНИП ' , default = True )
show_okpo = models . BooleanField ( ' ОКПО ' , default = True )
show_glavbuh = models . BooleanField ( u ' Главный бухгалтер ' , default = True )
show_glavbuh = models . BooleanField ( ' Главный бухгалтер ' , default = True )
show_bank_account = models . BooleanField ( u ' Банковские реквизиты ' , default = True )
show_bank_account = models . BooleanField ( ' Банковские реквизиты ' , default = True )
bank_account = models . ForeignKey (
BankAccount ,
related_name = ' + ' ,
verbose_name = u ' Расчетный счет ' ,
verbose_name = ' Расчетный счет ' ,
blank = True ,
null = True ,
default = None
)
show_contact_info = models . BooleanField ( u ' Контактная информация ' , default = True )
show_address = models . BooleanField ( u ' Фактический адрес ' , default = True )
show_jur_address = models . BooleanField ( u ' Юридический адрес ' , default = True )
show_real_address = models . BooleanField ( u ' Почтовый адрес ' , default = True )
show_phone = models . BooleanField ( u ' Телефон ' , default = True )
show_fax = models . BooleanField ( u ' Факс ' , default = True )
show_email = models . BooleanField ( u ' Электронная почта ' , default = True )
show_site = models . BooleanField ( u ' Сайт ' , default = True )
show_contact_info = models . BooleanField ( ' Контактная информация ' , default = True )
show_address = models . BooleanField ( ' Фактический адрес ' , default = True )
show_jur_address = models . BooleanField ( ' Юридический адрес ' , default = True )
show_real_address = models . BooleanField ( ' Почтовый адрес ' , default = True )
show_phone = models . BooleanField ( ' Телефон ' , default = True )
show_fax = models . BooleanField ( ' Факс ' , default = True )
show_email = models . BooleanField ( ' Электронная почта ' , default = True )
show_site = models . BooleanField ( ' Сайт ' , default = True )
show_logo = models . BooleanField ( u ' Логотип ' , default = True )
show_logo = models . BooleanField ( ' Логотип ' , default = True )
# только для ИП
show_ip_boss_fio = models . BooleanField ( u ' Фамилия, Имя, Отчество ' , default = True )
show_svid_gos_reg = models . BooleanField ( u ' Свид-во о гос. регистрации ' , default = True )
show_ip_reg_date = models . BooleanField ( u ' Дата регистрации ИП ' , default = True )
show_ip_boss_fio = models . BooleanField ( ' Фамилия, Имя, Отчество ' , default = True )
show_svid_gos_reg = models . BooleanField ( ' Свид-во о гос. регистрации ' , default = True )
show_ip_reg_date = models . BooleanField ( ' Дата регистрации ИП ' , default = True )
# только для Организации
show_name = models . BooleanField ( u ' Краткое название организации ' , default = True )
show_full_name = models . BooleanField ( u ' Полное название организации ' , default = True )
show_kpp = models . BooleanField ( u ' КПП ' , default = True )
show_name = models . BooleanField ( ' Краткое название организации ' , default = True )
show_full_name = models . BooleanField ( ' Полное название организации ' , default = True )
show_kpp = models . BooleanField ( ' КПП ' , default = True )
show_org_boss_title_and_fio = models . BooleanField (
' Руководитель (Должность, ФИО) ' , default = True )
show_na_osnovanii = models . BooleanField ( u ' Действует на основании ' , default = True )
show_na_osnovanii = models . BooleanField ( ' Действует на основании ' , default = True )
objects = managers . UserProfileFiltersManager ( )
@ -550,29 +548,33 @@ class License(models.Model):
related_name = ' licenses ' ,
verbose_name = ' пользователь '
)
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 ' форма оплаты ' ,
term = models . IntegerField ( verbose_name = ' срок лицензии ' )
date_from = models . DateField ( ' дата начала ' , null = True , blank = True )
date_to = models . DateField ( ' дата окончания ' , null = True , blank = True )
payform = models . IntegerField ( verbose_name = ' форма оплаты ' ,
choices = consts . PAYFORMS , default = 0 )
status = models . IntegerField ( verbose_name = u ' статус лицензии ' ,
status = models . IntegerField ( verbose_name = ' статус лицензии ' ,
choices = consts . LICENSE_STATUSES , default = 0 )
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 )
order_date = models . DateField ( verbose_name = ' дата заказа ' , auto_now_add = True )
paid_date = models . DateField ( verbose_name = ' дата оплаты ' , null = True , blank = True )
pay_sum = models . IntegerField ( verbose_name = ' сумма оплаты ' )
deleted = models . BooleanField ( ' удалено ' , default = False )
class Meta :
verbose_name = ' Лицензии '
verbose_name_plural = ' Лицензии '
def __init__ ( self , * args , * * kwargs ) :
super ( License , self ) . __init__ ( * args , * * kwargs )
self . __prev_date = self . paid_date
def __str__ ( self ) :
return u ' %s - %s %s ( %d %s ) ' % (
return ' %s - %s %s ( %d %s ) ' % (
self . company . get_company_name ( ) ,
self . term ,
numeral . choose_plural ( self . term , u " месяц, месяца, месяцев " ) ,
numeral . choose_plural ( self . term , " месяц, месяца, месяцев " ) ,
self . pay_sum ,
numeral . choose_plural ( self . pay_sum , u " рубль, рубля, рублей " ) ,
numeral . choose_plural ( self . pay_sum , " рубль, рубля, рублей " ) ,
)
def save ( self , * args , * * kwargs ) :
@ -599,47 +601,35 @@ class License(models.Model):
if self . status == 0 :
if self . payform == 0 :
return u ' <a href= " %s " >Скачать счёт</a> ' % reverse (
' customer_license_get_doc ' ,
kwargs = { ' order_num ' : self . id }
)
url = reverse ( ' customer_license_get_doc ' , kwargs = { ' order_num ' : self . id } )
return f ' <a href= " { url } " >Скачать счёт</a> '
elif self . payform == 1 :
return u ' Оплатить счёт '
return ' Оплатить счёт '
elif self . payform == 2 :
return u ' <a href= " %s " >Скачать квитанцию</a> ' % reverse (
' customer_license_get_doc ' ,
kwargs = { ' order_num ' : self . id }
)
url = reverse ( ' customer_license_get_doc ' , kwargs = { ' order_num ' : self . id } )
return f ' <a href= " { url } " >Скачать квитанцию</a> '
elif self . status in [ 1 , 2 ] :
return u ' История операций '
return ' История операций '
else :
return ' '
def get_term ( self ) :
if self . term == 0 :
return u ' 45 дней '
return ' 45 дней '
else :
return u ' %s %s ' % ( self . term ,
numeral . choose_plural ( self . term , u " месяц, месяца, месяцев " ) ,
)
return f ' { self . term } { numeral . choose_plural ( self . term , " месяц, месяца, месяцев " ) } '
def get_paid_status ( self ) :
if self . status == 1 :
return u ' Лицензия оплачена, ещё не активирована '
return ' Лицензия оплачена, ещё не активирована '
elif self . status in [ 2 , - 1 ] :
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 = f ' { left . months } ' \
f ' { numeral . choose_plural ( left . months , " месяц, месяца, месяцев " ) } ' \
f ' { left . days } { numeral . choose_plural ( left . days , " день, дня, дней " ) } '
else :
left_str = ' %d %s ' % (
left . days ,
numeral . choose_plural ( left . days , u " день, дня, дней " ) ,
)
left_str = f ' { left . days } { numeral . choose_plural ( left . days , " день, дня, дней " ) } '
return f ' Лицензия активирована: осталось { left_str } '
elif self . status == 3 :
return ' Время истекло '
@ -652,9 +642,10 @@ class LicensePrice(models.Model):
choices = consts . TERMS )
price = models . IntegerField ( verbose_name = ' сумма оплаты ' )
class Meta :
verbose_name = ' Прайс на лицензии '
verbose_name_plural = ' Прайсы на лицензии '
def __str__ ( self ) :
return u ' %s %s ( %d %s ) ' % ( self . term ,
numeral . choose_plural ( self . term , u " месяц, месяца, месяцев " ) ,
self . price ,
numeral . choose_plural ( self . price , u " рубль, рубля, рублей " ) ,
)
return f ' { self . term } { numeral . choose_plural ( self . term , " месяц, месяца, месяцев " ) } ' \
f ' ( { self . price } { numeral . choose_plural ( self . price , " рубль, рубля, рублей " ) } ) '