@ -12,7 +12,8 @@ from django.forms.utils import ErrorList
from django . forms . forms import NON_FIELD_ERRORS
FILE_UPLOAD_MAX_MEMORY_SIZE = getattr ( settings , ' FILE_UPLOAD_MAX_MEMORY_SIZE ' , 2621440 ) # default 2.5Mb
FILE_UPLOAD_MAX_MEMORY_SIZE = getattr ( settings , ' FILE_UPLOAD_MAX_MEMORY_SIZE ' ,
2621440 ) # default 2.5Mb
def get_profile_form_class ( profile_type ) :
@ -33,18 +34,15 @@ def get_profile_filters_form_class(profile_type):
return None
###
def _numeric ( field ) :
real_maxlength = field . widget . attrs [ ' maxlength ' ]
return {
' maxlength ' : int ( real_maxlength ) * 3 , # set fake maxlength. otherwise browser would cut pasted values too early
' maxlength ' : int ( real_maxlength ) * 3 ,
# set fake maxlength. otherwise browser would cut pasted values too early
' data-type ' : ' number ' , # used by jquery selector
' data-maxlength ' : real_maxlength , # save real maxlength
}
# -----------------------------------------------------------------------------
class UserProfileForm ( MyBaseModelForm ) :
""" Общая форма редактирования профиля пользователя.
@ -77,8 +75,8 @@ class UserProfileForm(MyBaseModelForm):
def _check_file_size ( self , image ) :
""" Ограничить максимальный размер загружаемого файла. """
if image and image . size > FILE_UPLOAD_MAX_MEMORY_SIZE :
raise forms . ValidationError (
u ' Размер изображения превышает %i Мб ' % ( FILE_UPLOAD_MAX_MEMORY_SIZE / ( 1024 * 1024 ) ) )
raise forms . ValidationError ( u ' Размер изображения превышает %i Мб ' % (
FILE_UPLOAD_MAX_MEMORY_SIZE / ( 1024 * 1024 ) ) )
return image
def clean_boss_sign ( self ) :
@ -113,7 +111,8 @@ class IpUserProfileForm(UserProfileForm):
# фио главбуха
' glavbuh_surname ' , ' glavbuh_name ' , ' glavbuh_midname ' ,
# контактная информация - адреса, телефон, факс, почта, сайт
' address ' , ' jur_address ' , ' real_address ' , ' phone_code ' , ' phone ' , ' fax_code ' , ' fax ' , ' email ' , ' site ' ,
' address ' , ' jur_address ' , ' real_address ' , ' phone_code ' , ' phone ' , ' fax_code ' , ' fax ' ,
' email ' , ' site ' ,
# подписи, печать и логотип
' boss_sign ' , ' glavbuh_sign ' , ' stamp ' , ' logo ' ,
' tmb_logo ' , ' tmb_boss_sign ' , ' tmb_glavbuh_sign ' , ' tmb_stamp ' ,
@ -136,7 +135,8 @@ class OrgUserProfileForm(UserProfileForm):
# фио главбуха
' glavbuh_surname ' , ' glavbuh_name ' , ' glavbuh_midname ' ,
# контактная информация - адреса, телефон, факс, почта, сайт
' address ' , ' jur_address ' , ' real_address ' , ' phone_code ' , ' phone ' , ' fax_code ' , ' fax ' , ' email ' , ' site ' ,
' address ' , ' jur_address ' , ' real_address ' , ' phone_code ' , ' phone ' , ' fax_code ' , ' fax ' ,
' email ' , ' site ' ,
# подписи, печать и логотип
' boss_sign ' , ' glavbuh_sign ' , ' stamp ' , ' logo ' ,
' tmb_logo ' , ' tmb_boss_sign ' , ' tmb_glavbuh_sign ' , ' tmb_stamp ' ,
@ -146,7 +146,8 @@ class OrgUserProfileForm(UserProfileForm):
class UserProfileAdminForm ( UserProfileForm ) :
""" Форма редактирования профиля - для админки. """
# условно-обязательные поля, проверять отдельно - могут быть обязательны в зависимости от типа профиля
# условно-обязательные поля, проверять отдельно -
# могут быть обязательны в зависимости от типа профиля
unset_required = [
# для ИП
' kpp ' , ' name '
@ -161,23 +162,24 @@ class UserProfileAdminForm(UserProfileForm):
# тип профиля - ИП или Организация
profile_type = cleaned_data . get ( ' profile_type ' )
if profile_type == consts . IP_PROFILE : # поля, обязательные для ИП
if profile_type == consts . IP_PROFILE : # поля, обязательные для ИП
pass
elif profile_type == consts . ORG_PROFILE : # поля, обязательные для Организаций
elif profile_type == consts . ORG_PROFILE : # поля, обязательные для Организаций
org_boss_name = cleaned_data . get ( ' org_boss_name ' )
kpp = cleaned_data . get ( ' kpp ' )
if not org_boss_name : set_field_error ( self , ' org_boss_name ' )
if not kpp : set_field_error ( self , ' kpp ' )
if not org_boss_name :
set_field_error ( self , ' org_boss_name ' )
if not kpp :
set_field_error ( self , ' kpp ' )
return cleaned_data
# -----------------------------------------------------------------------------
class BankAccountForm ( forms . ModelForm ) :
""" Форма редактирования расчетных счетов. """
class Meta :
model = models . BankAccount
fields = ( ' bik ' , ' name ' , ' short_name ' , ' korr_account ' , ' account ' , ' is_main ' , ' company ' )
@ -198,6 +200,7 @@ class BankAccountForm(forms.ModelForm):
class BankAccountAdminForm ( BankAccountForm ) :
""" Форма редактирования расчетных счетов - для админки. """
class Meta ( BankAccountForm . Meta ) :
fields = ' __all__ '
@ -211,18 +214,33 @@ class BankAccountListForm(forms.Form):
super ( BankAccountListForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' bank_account ' ] . queryset = models . BankAccount . objects . get_all ( user . profile )
# -----------------------------------------------------------------------------
class ClientForm ( forms . ModelForm ) :
""" Форма редактирования контрагентов. """
class Meta :
model = models . Client
fields = ( ' name ' , ' name_short_self ' , ' name_short_dadata ' , ' inn ' , ' kpp ' , ' ogrn ' , ' okpo ' , ' address ' ,
# банковские реквизиты
' bank_bik ' , ' bank_name ' , ' bank_short_name ' , ' bank_korr_account ' , ' bank_account ' ,
# контакты
' contact_name ' , ' contact_email ' , ' contact_phone ' , ' contact_skype ' , ' contact_other ' ,
fields = (
' name ' ,
' name_short_self ' ,
' name_short_dadata ' ,
' inn ' ,
' kpp ' ,
' ogrn ' ,
' okpo ' ,
' address ' ,
# банковские реквизиты
' bank_bik ' ,
' bank_name ' ,
' bank_short_name ' ,
' bank_korr_account ' ,
' bank_account ' ,
# контакты
' contact_name ' ,
' contact_email ' ,
' contact_phone ' ,
' contact_skype ' ,
' contact_other ' ,
)
_textarea = forms . Textarea ( attrs = { ' cols ' : 80 , ' rows ' : 3 } )
widgets = {
@ -259,6 +277,7 @@ class ClientForm(forms.ModelForm):
class ClientAdminForm ( ClientForm ) :
""" Форма редактирования контрагентов - для админки. """
class Meta ( ClientForm . Meta ) :
fields = None
exclude = ( ' bank_address ' , )
@ -273,12 +292,11 @@ class ClientsListForm(forms.Form):
super ( ClientsListForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' client ' ] . queryset = models . Client . objects . get_all ( user . profile )
# -----------------------------------------------------------------------------
class UserProfileFiltersForm ( MyBaseModelForm ) :
""" Общая форма фильтрации реквизитов. """
_profile_type = None # задать в наследнике!
# задать в наследнике!
_profile_type = None
_is_admin = False
_user = None
@ -303,7 +321,8 @@ class UserProfileFiltersForm(MyBaseModelForm):
# TODO 1. переписать проверки в стиле new_initial['show_inn'] = bool(profile.inn)
# TODO 2. загнать условия в словарь вида {'show_inn': 'inn'}. потом в цикле обработать
if profile :
# сбросить чекбоксы, если не заполнены определенные поля в профиле или нет расчетных счетов
# сбросить чекбоксы, если не заполнены определенные поля
# в профиле или нет расчетных счетов
if instance :
new_initial [ ' show_inn ' ] = bool ( profile . inn )
new_initial [ ' show_ogrn ' ] = bool ( profile . ogrn )
@ -369,37 +388,60 @@ class UserProfileFiltersForm(MyBaseModelForm):
f = self . fields
# только расчетные счета пользователя
f_acc = f [ ' bank_account ' ] # TODO вынести настройку расчетных счетов в mixin?
f_acc = f [ ' bank_account ' ] # TODO вынести настройку расчетных счетов в mixin?
f_acc . queryset = accounts
f_acc . empty_label = None
# исправить метку
f_acc . label_from_instance = lambda obj : mark_safe (
force_text ( ' %s <br /><span class= " name " > %s </span> ' % ( obj . account , obj . name , ) ) ) # исправить метку
force_text ( ' %s <br /><span class= " name " > %s </span> ' % ( obj . account , obj . name , ) ) )
# заблокировать чекбоксы, если: не заполнены определенные поля в профиле или нет расчетных счетов
# TODO: refactor
# заблокировать чекбоксы, если: не заполнены определенные поля
# в профиле или нет расчетных счетов
if profile :
if not profile . inn : f [ ' show_inn ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . ogrn : f [ ' show_ogrn ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . okpo : f [ ' show_okpo ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . get_glavbuh_fio ( ) : f [ ' show_glavbuh ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . address : f [ ' show_address ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . jur_address : f [ ' show_jur_address ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . real_address : f [ ' show_real_address ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . get_full_phone ( ) : f [ ' show_phone ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . get_full_fax ( ) : f [ ' show_fax ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . email : f [ ' show_email ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . site : f [ ' show_site ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . logo : f [ ' show_logo ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not accounts : f [ ' show_bank_account ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . inn :
f [ ' show_inn ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . ogrn :
f [ ' show_ogrn ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . okpo :
f [ ' show_okpo ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . get_glavbuh_fio ( ) :
f [ ' show_glavbuh ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . address :
f [ ' show_address ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . jur_address :
f [ ' show_jur_address ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . real_address :
f [ ' show_real_address ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . get_full_phone ( ) :
f [ ' show_phone ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . get_full_fax ( ) :
f [ ' show_fax ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . email :
f [ ' show_email ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . site :
f [ ' show_site ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . logo :
f [ ' show_logo ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not accounts :
f [ ' show_bank_account ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if self . _profile_type == consts . IP_PROFILE :
if not profile . svid_gos_reg : f [ ' show_svid_gos_reg ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . ip_reg_date : f [ ' show_ip_reg_date ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . svid_gos_reg :
f [ ' show_svid_gos_reg ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . ip_reg_date :
f [ ' show_ip_reg_date ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
elif self . _profile_type == consts . ORG_PROFILE :
if not profile . name : f [ ' show_name ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . full_name : f [ ' show_full_name ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . kpp : f [ ' show_kpp ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . boss_title : f [ ' show_org_boss_title_and_fio ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . na_osnovanii : f [ ' show_na_osnovanii ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . name :
f [ ' show_name ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . full_name :
f [ ' show_full_name ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . kpp :
f [ ' show_kpp ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . boss_title :
f [ ' show_org_boss_title_and_fio ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
if not profile . na_osnovanii :
f [ ' show_na_osnovanii ' ] . widget . attrs [ ' disabled ' ] = ' disabled '
# блокировать чекбоксы, т.к.эти реквизиты юзеру выключать нельзя
if self . _profile_type == consts . IP_PROFILE :
@ -420,24 +462,24 @@ class IpUserProfileFiltersForm(UserProfileFiltersForm):
class Meta ( UserProfileFiltersForm . Meta ) :
fields = (
' show_profile_type ' ,
' show_ip_boss_fio ' ,
' show_inn ' ,
' show_ogrn ' ,
' show_okpo ' ,
' show_svid_gos_reg ' ,
' show_ip_reg_date ' ,
' show_ip_boss_fio ' ,
' show_inn ' ,
' show_ogrn ' ,
' show_okpo ' ,
' show_svid_gos_reg ' ,
' show_ip_reg_date ' ,
' show_glavbuh ' ,
' show_bank_account ' ,
' bank_account ' ,
' bank_account ' ,
' show_contact_info ' ,
' show_address ' ,
' show_jur_address ' ,
' show_real_address ' ,
' show_phone ' ,
' show_fax ' ,
' show_email ' ,
' show_site ' ,
' show_logo ' ,
' show_address ' ,
' show_jur_address ' ,
' show_real_address ' ,
' show_phone ' ,
' show_fax ' ,
' show_email ' ,
' show_site ' ,
' show_logo ' ,
)
@ -453,45 +495,44 @@ class OrgUserProfileFiltersForm(UserProfileFiltersForm):
class Meta ( UserProfileFiltersForm . Meta ) :
fields = (
' show_profile_type ' ,
' show_name ' ,
' show_full_name ' ,
' show_inn ' ,
' show_kpp ' ,
' show_ogrn ' ,
' show_okpo ' ,
' show_name ' ,
' show_full_name ' ,
' show_inn ' ,
' show_kpp ' ,
' show_ogrn ' ,
' show_okpo ' ,
' show_org_boss_title_and_fio ' ,
' show_na_osnovanii ' ,
' show_na_osnovanii ' ,
' show_glavbuh ' ,
' show_bank_account ' ,
' bank_account ' ,
' bank_account ' ,
' show_contact_info ' ,
' show_address ' ,
' show_jur_address ' ,
' show_real_address ' ,
' show_phone ' ,
' show_fax ' ,
' show_email ' ,
' show_site ' ,
' show_logo ' ,
' show_address ' ,
' show_jur_address ' ,
' show_real_address ' ,
' show_phone ' ,
' show_fax ' ,
' show_email ' ,
' show_site ' ,
' show_logo ' ,
)
# -----------------------------------------------------------------------------
class EmailProfileForm ( forms . Form ) :
""" Форма отправки реквизитов пользователя по email. """
to = forms . EmailField ( label = u ' E-mail получателя ' )
body = forms . CharField ( label = u ' Текст сообщения ' , max_length = 1000 , required = False ,
widget = forms . Textarea ( attrs = { ' cols ' : 80 , ' rows ' : 3 } ) )
widget = forms . Textarea ( attrs = { ' cols ' : 80 , ' rows ' : 3 } ) )
class LicenseForm ( forms . Form ) :
""" Форма продления лицензии
"""
term = forms . ModelChoiceField ( queryset = models . LicensePrice . objects . all ( ) ,
widget = forms . RadioSelect , label = u ' Срок лицензии ' , empty_label = None )
widget = forms . RadioSelect , label = u ' Срок лицензии ' ,
empty_label = None )
payform = forms . ChoiceField ( choices = consts . PAYFORMS [ 1 : ] , widget = forms . RadioSelect ,
label = u ' Форма оплаты ' )
label = u ' Форма оплаты ' )
class YaForm ( PaymentForm ) :