forced fix of numeric values

remotes/origin/yandex
apache 9 years ago
parent 46390d666d
commit 5ea958a77d
  1. 7
      project/commons/utils.py
  2. 37
      project/customer/forms.py
  3. 21
      project/customer/models.py
  4. 15
      project/static/js/commons.js

@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import datetime
@ -12,3 +12,8 @@ def safe_int(value, default=None):
return int(value)
except:
return default
def only_numerics(value):
"""Убирает из переданной строки все не цифровые символы."""
return u''.join(c for c in value if c.isdigit())

@ -29,6 +29,17 @@ def get_profile_filters_form_class(profile_type):
return OrgUserProfileFiltersForm
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
'data-type': 'number', # used by jquery selector
'data-maxlength': real_maxlength, # save real maxlength
}
# -----------------------------------------------------------------------------
@ -50,9 +61,14 @@ class UserProfileForm(MyBaseModelForm):
def __init__(self, *args, **kwargs):
super(UserProfileForm, self).__init__(*args, **kwargs)
f = self.fields
if 'ip_reg_date' in f:
f['ip_reg_date'].widget.attrs['class'] = 'has-datepicker'
if 'ip_reg_date' in self.fields:
self.fields['ip_reg_date'].widget.attrs['class'] = 'has-datepicker'
#
self.fields['inn'].widget.attrs.update(_numeric(self.fields['inn']))
self.fields['ogrn'].widget.attrs.update(_numeric(self.fields['ogrn']))
self.fields['okpo'].widget.attrs.update(_numeric(self.fields['okpo']))
if 'kpp' in self.fields:
self.fields['kpp'].widget.attrs.update(_numeric(self.fields['kpp']))
def _check_file_size(self, image):
"""Ограничить максимальный размер загружаемого файла."""
@ -165,6 +181,12 @@ class BankAccountForm(forms.ModelForm):
widgets = {'name': _textarea, 'address': _textarea, 'company': forms.HiddenInput()}
#widgets = {'name': _textarea, 'address': _textarea,}
def __init__(self, *args, **kwargs):
super(BankAccountForm, self).__init__(*args, **kwargs)
self.fields['bik'].widget.attrs.update(_numeric(self.fields['bik']))
self.fields['korr_account'].widget.attrs.update(_numeric(self.fields['korr_account']))
self.fields['account'].widget.attrs.update(_numeric(self.fields['account']))
class BankAccountAdminForm(BankAccountForm):
"""Форма редактирования расчетных счетов - для админки."""
@ -203,6 +225,15 @@ class ClientForm(forms.ModelForm):
#'contact_other': _textarea,
}
def __init__(self, *args, **kwargs):
super(ClientForm, self).__init__(*args, **kwargs)
self.fields['inn'].widget.attrs.update(_numeric(self.fields['inn']))
self.fields['kpp'].widget.attrs.update(_numeric(self.fields['kpp']))
self.fields['okpo'].widget.attrs.update(_numeric(self.fields['okpo']))
self.fields['bank_bik'].widget.attrs.update(_numeric(self.fields['bank_bik']))
self.fields['bank_korr_account'].widget.attrs.update(_numeric(self.fields['bank_korr_account']))
self.fields['bank_account'].widget.attrs.update(_numeric(self.fields['bank_account']))
class ClientAdminForm(ClientForm):
"""Форма редактирования контрагентов - для админки."""

@ -13,6 +13,7 @@ from django.core.urlresolvers import reverse
from . import consts, managers, utils
from project.myauth.models import DokUser
from project.commons.utils import only_numerics
PROFILE_IMAGES_UPLOAD_DIR = 'customer/profile/' # куда сохранять загруженные изображения
@ -123,6 +124,11 @@ class UserProfile(models.Model):
return u'%s, ИНН %s' % (self.get_company_name()[0:30], self.inn or u'не указан')
def save(self, *args, **kwargs):
self.inn = only_numerics(self.inn)
self.ogrn = only_numerics(self.ogrn)
self.okpo = only_numerics(self.okpo)
self.kpp = only_numerics(self.kpp)
def process_img(orig_img, size):
w = orig_img.width
h = orig_img.height
@ -273,8 +279,12 @@ class BankAccount(models.Model):
return (u'%s, %s' % (self.account, self.name[0:30],)).strip()
def save(self, *args, **kwargs):
self.bik = only_numerics(self.bik)
self.korr_account = only_numerics(self.korr_account)
self.account = only_numerics(self.account)
super(BankAccount, self).save(*args, **kwargs)
company = self.company
if self.is_main:
# если задано, что это будет основной счет, то сбросить у остальных счетов пользователя этот признак
BankAccount.objects.filter(company=self.company, is_main=True).exclude(pk=self.pk).update(is_main=False)
@ -326,6 +336,15 @@ class Client(models.Model):
def __unicode__(self):
return (u'%s, ИНН %s' % (self.name[0:30], self.inn or u'не указан',)).strip()
def save(self, *args, **kwargs):
self.inn = only_numerics(self.inn)
self.kpp = only_numerics(self.kpp)
self.okpo = only_numerics(self.okpo)
self.bank_bik = only_numerics(self.bank_bik)
self.bank_korr_account = only_numerics(self.bank_korr_account)
self.bank_account = only_numerics(self.bank_account)
super(Client, self).save(*args, **kwargs)
def get_inn_and_kpp(self):
"""Возвращает пару ИНН/КПП или только ИНН, если КПП не заполнен."""
kpp = self.kpp.strip()

@ -103,6 +103,21 @@ $(document).ready(function() {
$form.find('img.captcha').attr('src', json.image_url);
});
});
$('input[data-type="number"]').on('input propertychange', function (e) {
var el = $(this);
var maxlength = el.data('maxlength');
setTimeout(function () {
var text = el.val();
var new_text = text.replace(/\D/g,'');
if (new_text.length > maxlength) {
new_text = new_text.substring(0, maxlength);
}
if (text != new_text) {
el.val(new_text);
}
}, 200);
});
});
function fetch_data(url, async) {

Loading…
Cancel
Save