# -*- coding: utf-8 -*- import simplejson as json from django.shortcuts import get_object_or_404 from django.http import HttpResponseBadRequest, HttpResponse from django.template import RequestContext from django.views.decorators.http import require_POST from django.views.decorators.csrf import csrf_protect from django.contrib.auth.decorators import login_required from django.template.loader import render_to_string from .. import models, forms from ...docs.models import Invoice, Faktura, AktRabot, AktSverki, Nakladn, Platejka, Dover from ..decorators import license_required @login_required def clients_get_ajax(request, id): """Получить контрагента - AJAX. Если в форме редактирования контрагента задан атрибут Meta.fields, то дампит только поля, перечисленные в нём. Иначе дампит вообще все поля, которые есть в модели. """ if not request.is_ajax(): return HttpResponseBadRequest() try: fields_list = forms.ClientForm.Meta.fields except AttributeError: fields_list = [] client = get_object_or_404(models.Client.objects.values(*fields_list), pk=id, user=request.user) return HttpResponse(json.dumps(client), mimetype='application/json') @login_required @require_POST @csrf_protect def clients_add_ajax(request): """Добавить контрагента - AJAX.""" form_class = forms.ClientForm if not request.is_ajax(): return HttpResponseBadRequest() 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.user = request.user 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(): non_field_errors.append(u'Заполните/исправьте выделенные поля.') data = { '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, 'action': 'client-add', 'row_html': html, } return HttpResponse(json.dumps(data), mimetype='application/json') @login_required @require_POST @csrf_protect def clients_edit_ajax(request, id): """Редактировать контрагента - AJAX.""" form_class = forms.ClientForm if not request.is_ajax(): return HttpResponseBadRequest() client = get_object_or_404(models.Client, pk=id, user=request.user) form = form_class(data=request.POST, instance=client) if form.is_valid(): client = form.save() non_field_errors = form.non_field_errors() html = render_to_string('customer/clients/list_item.html', {'obj': client}, RequestContext(request)) if not form.is_valid(): non_field_errors.append(u'Заполните/исправьте выделенные поля.') data = { 'success': form.is_valid(), 'field_errors': form.errors, # ошибки полей 'form_errors': non_field_errors, # ошибки формы 'reload': False, 'id': client.id, 'name': client.name, 'contact': client.contact_name, 'phone': client.contact_phone, 'action': 'client-edit', 'row_html': html, } return HttpResponse(json.dumps(data), mimetype='application/json') @login_required @require_POST @csrf_protect def clients_delete_ajax(request, id): """Удалить контрагента - AJAX.""" if not request.is_ajax(): return HttpResponseBadRequest() client = get_object_or_404(models.Client, pk=id, user=request.user) client_docs = [] 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]) if not client_docs: client.delete() success = True message = {'title': u'Инфо', 'msg': u'Контрагент удалён.'} del_id = id else: success = True message = {'title': u'Инфо', 'msg': u'Контрагент не удалён. Есть выписанные документы: %s.' % ','.join(client_docs)} del_id = None data = { 'success': success, 'message': message, 'reload': False, 'action': 'client-delete', 'id': del_id, } return HttpResponse(json.dumps(data), mimetype='application/json')