diff --git a/src/customer/decorators.py b/src/customer/decorators.py index b2051ca..5a0c8e9 100644 --- a/src/customer/decorators.py +++ b/src/customer/decorators.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- from django.contrib.auth.decorators import user_passes_test -from django.core.urlresolvers import reverse + def license_required(function=None, redirect_field_name=None, login_url='/my/license/'): """ diff --git a/src/customer/helpers.py b/src/customer/helpers.py new file mode 100644 index 0000000..ebcc3fa --- /dev/null +++ b/src/customer/helpers.py @@ -0,0 +1,15 @@ +# -*- 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 diff --git a/src/customer/utils.py b/src/customer/utils.py index cea368c..0c4fd88 100644 --- a/src/customer/utils.py +++ b/src/customer/utils.py @@ -5,7 +5,6 @@ from django.conf import settings from django.core.mail import EmailMessage from django.template.loader import render_to_string - SUPPORT_EMAIL = getattr(settings, 'SUPPORT_EMAIL') diff --git a/src/customer/views/clients_ajax.py b/src/customer/views/clients_ajax.py index b58f55a..e02c302 100644 --- a/src/customer/views/clients_ajax.py +++ b/src/customer/views/clients_ajax.py @@ -11,8 +11,8 @@ from django.template.loader import render_to_string from customer import models, forms from docs.models import Invoice, Faktura, AktRabot, AktSverki, Nakladn, Platejka, Dover -from customer.decorators import license_required from customer.utils import raise_if_no_profile +from customer.helpers import partner_already_exists @login_required @@ -47,21 +47,35 @@ def clients_add_ajax(request): raise_if_no_profile(request) form_class = forms.ClientForm - - new_client_id = None new_client_str = None form = form_class(data=request.POST) new_client_id = None html = '' if form.is_valid(): - 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)) + # check company has in users clients + if partner_already_exists(request.user.profile, form.cleaned_data['inn']): + + data = { + 'success': False, + 'field_errors': {'inn': []}, + 'form_errors': ['Контрагент с таким ИНН уже существует.'], + '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() if not form.is_valid(): @@ -71,7 +85,6 @@ def clients_add_ajax(request): 'success': form.is_valid(), 'field_errors': form.errors, # ошибки полей 'form_errors': non_field_errors, # ошибки формы - #'reload': form.is_valid() and 'reload_on_success' in request.GET 'reload': False, 'id': new_client_id, 'name': new_client_str, @@ -100,7 +113,7 @@ def clients_edit_ajax(request, id): client = form.save() non_field_errors = form.non_field_errors() - html = render_to_string('customer/clients/list_item.html', + html = render_to_string('customer/clients/list_item.html', {'obj': client}, RequestContext(request)) if not form.is_valid(): non_field_errors.append(u'Заполните/исправьте выделенные поля.') @@ -132,13 +145,13 @@ def clients_delete_ajax(request, id): client = get_object_or_404(models.Client, pk=id, company=request.user.profile) client_docs = [] - doc_list = [(Invoice, u'счета'), (Faktura, u'счета-фактуры'), (Nakladn, u'накладные'), + doc_list = [(Invoice, u'счета'), (Faktura, u'счета-фактуры'), (Nakladn, u'накладные'), (AktRabot, u'акты выполненных работ'), (Platejka, u'платёжные поручения'), (Dover, u'доверенности'), (AktSverki, u'акты сверки')] for doc in doc_list: docs = doc[0].objects.filter(client=client) if docs: - client_docs.append(doc[1]) + client_docs.append(doc[1]) if not client_docs: client.delete() @@ -153,7 +166,7 @@ def clients_delete_ajax(request, id): data = { 'success': success, 'message': message, - 'reload': False, + 'reload': False, 'action': 'client-delete', 'id': del_id, }