some refactor, add function clear errors on form added client

feature/docker
Dmitriy Shesterkin 9 years ago
parent 7b75159aa2
commit 54bf195a07
  1. 20
      src/customer/forms.py
  2. 15
      src/customer/helpers.py
  3. 1
      src/customer/models.py
  4. 39
      src/customer/views/clients_ajax.py
  5. 18
      src/dokumentor/static/js/client/search-external-api.js

@ -236,14 +236,26 @@ class ClientForm(forms.ModelForm):
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(ClientForm, self).__init__(*args, **kwargs) super(ClientForm, self).__init__(*args, **kwargs)
self.fields['inn'].widget.attrs.update(_numeric(self.fields['inn'])) self.fields['inn'].widget.attrs.update(_numeric(self.fields['inn']))
self.fields['kpp'].widget.attrs.update(_numeric(self.fields['kpp'])) self.fields['kpp'].widget.attrs.update(_numeric(self.fields['kpp']))
self.fields['ogrn'].widget.attrs.update(_numeric(self.fields['ogrn'])) self.fields['ogrn'].widget.attrs.update(_numeric(self.fields['ogrn']))
self.fields['okpo'].widget.attrs.update(_numeric(self.fields['okpo'])) 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'])) def clean(self):
# self.fields['bank_account'].widget.attrs.update(_numeric(self.fields['bank_account'])) inn = self.cleaned_data.get('inn')
partner_exists = models.Client.objects.filter(inn=inn, company=self.request.user.profile)
if partner_exists:
if 'inn' not in self._errors:
from django.forms.util import ErrorList
from django.forms.forms import NON_FIELD_ERRORS
error = 'Контрагент с ИНН {} уже существует'.format(inn)
self._errors['inn'] = ErrorList()
self._errors['inn'].append(error)
self._errors[NON_FIELD_ERRORS] = self.error_class([error])
return self.cleaned_data
class ClientAdminForm(ClientForm): class ClientAdminForm(ClientForm):
@ -267,7 +279,7 @@ class ClientsListForm(forms.Form):
class UserProfileFiltersForm(MyBaseModelForm): class UserProfileFiltersForm(MyBaseModelForm):
"""Общая форма фильтрации реквизитов.""" """Общая форма фильтрации реквизитов."""
_profile_type = None # задать в наследнике! _profile_type = None # задать в наследнике!
_is_admin = False _is_admin = False
_user = None _user = None

@ -1,15 +0,0 @@
# -*- coding: utf-8 -*-
from customer.models import Client
def partner_already_exists(user_as_company, partner_inn):
"""
:param user_as_company:
:param partner_inn:
:return:
"""
if Client.objects.filter(company=user_as_company, inn=partner_inn):
return True
else:
return False

@ -14,6 +14,7 @@ from customer import consts, managers, utils
from myauth.models import DokUser from myauth.models import DokUser
from commons.utils import only_numerics from commons.utils import only_numerics
from django.utils.deconstruct import deconstructible from django.utils.deconstruct import deconstructible
from django.core.exceptions import ValidationError
PROFILE_IMAGES_UPLOAD_DIR = 'customer/profile/' # куда сохранять загруженные изображения PROFILE_IMAGES_UPLOAD_DIR = 'customer/profile/' # куда сохранять загруженные изображения
BOSS_SIGN_IMG_SIZE = (159, 65) BOSS_SIGN_IMG_SIZE = (159, 65)

@ -12,7 +12,6 @@ from django.template.loader import render_to_string
from customer import models, forms from customer import models, forms
from docs.models import Invoice, Faktura, AktRabot, AktSverki, Nakladn, Platejka, Dover from docs.models import Invoice, Faktura, AktRabot, AktSverki, Nakladn, Platejka, Dover
from customer.utils import raise_if_no_profile from customer.utils import raise_if_no_profile
from customer.helpers import partner_already_exists
@login_required @login_required
@ -46,36 +45,18 @@ def clients_add_ajax(request):
raise_if_no_profile(request) raise_if_no_profile(request)
form_class = forms.ClientForm form = forms.ClientForm(request.POST, request=request)
new_client_str = None new_client_str = None
form = form_class(data=request.POST)
new_client_id = None new_client_id = None
html = '' html = ''
if form.is_valid(): if form.is_valid():
# check company has in users clients new_client = form.save(commit=False)
if partner_already_exists(request.user.profile, form.cleaned_data['inn']): new_client.company = request.user.profile
new_client_str = new_client.name
data = { new_client.save()
'success': False, new_client_id = new_client.id
'field_errors': {'inn': []}, html = render_to_string('customer/clients/list_item.html',
'form_errors': ['Контрагент с таким ИНН уже существует.'], {'obj': new_client}, RequestContext(request))
'reload': False,
'id': None,
'name': None,
'action': 'client-add',
'row_html': '',
}
return HttpResponse(json.dumps(data), content_type='application/json')
else:
new_client = form.save(commit=False)
new_client.company = request.user.profile
new_client_str = new_client.name
new_client.save()
new_client_id = new_client.id
html = render_to_string('customer/clients/list_item.html',
{'obj': new_client}, RequestContext(request))
non_field_errors = form.non_field_errors() non_field_errors = form.non_field_errors()
if not form.is_valid(): if not form.is_valid():
@ -83,8 +64,8 @@ def clients_add_ajax(request):
data = { data = {
'success': form.is_valid(), 'success': form.is_valid(),
'field_errors': form.errors, # ошибки полей 'field_errors': form.errors,
'form_errors': non_field_errors, # ошибки формы 'form_errors': non_field_errors,
'reload': False, 'reload': False,
'id': new_client_id, 'id': new_client_id,
'name': new_client_str, 'name': new_client_str,

@ -136,14 +136,23 @@ $(document).ready(function() {
}); });
} }
function cleanFormErrors() {
var formErrors = $('.errors-layout'),
inputErrors = $('.ui-state-error');
if (formErrors) { formErrors.hide()}
if (inputErrors) {inputErrors.removeClass('ui-state-error')}
}
// TODO: edd clear button
bankSearch.on('keyup',(function () { bankSearch.on('keyup',(function () {
// TODO: on clear button
if (bankSearch.val().length === 0) { if (bankSearch.val().length === 0) {
clearResultSearchDiv($("#searchBankResult")); clearResultSearchDiv($("#searchBankResult"));
clearSearchInputs([bankFullName, bankBic, bankCorrespondentAccount]); clearSearchInputs([bankFullName, bankBic, bankCorrespondentAccount]);
} }
})); }));
// TODO: on clear button
// TODO: edd clear button
// clientSearch.on('keyup',(function () { // clientSearch.on('keyup',(function () {
// //
// if (clientSearch.val().length === 0) { // if (clientSearch.val().length === 0) {
@ -151,6 +160,11 @@ $(document).ready(function() {
// } // }
// })); // }));
clientSearch.on('keyup',(function () {
cleanFormErrors();
}));
fillInput(clientSearch, "PARTY", 5); fillInput(clientSearch, "PARTY", 5);
fillInput(bankSearch, "BANK", 1); fillInput(bankSearch, "BANK", 1);

Loading…
Cancel
Save