# -*- coding: utf-8 -*- import simplejson as json from django.shortcuts import get_object_or_404 from django.http import HttpResponseBadRequest, HttpResponse 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.core.urlresolvers import reverse from project.commons.utils import dthandler from .. import models, forms @login_required def bank_accounts_list_ajax(request): """Список расчетных счетов пользователя - AJAX.""" if not request.is_ajax(): return HttpResponseBadRequest() fields_list = ['pk', 'bik', 'name', 'address', 'korr_account', 'account', 'is_main',] accounts = models.BankAccount.objects.get_all(user=request.user).values(*fields_list) for a in accounts: a['edit_url'] = reverse('customer_bank_accounts_edit', kwargs={'id': a['pk'],}) a['delete_url'] = reverse('customer_bank_accounts_delete', kwargs={'id': a['pk'],}) data = json.dumps(list(accounts), default=dthandler) return HttpResponse(data, mimetype='application/json') @login_required def bank_accounts_get_ajax(request, id): """Получить счёт - AJAX. Если в форме редактирования счёта задан атрибут Meta.fields, то дампит только поля, перечисленные в нём. Иначе дампит вообще все поля, которые есть в модели. """ if not request.is_ajax(): return HttpResponseBadRequest() try: fields_list = forms.BankAccountForm.Meta.fields except AttributeError: fields_list = [] account = get_object_or_404(models.BankAccount.objects.values(*fields_list), pk=id, user=request.user) data = json.dumps(account, default=dthandler) return HttpResponse(data, mimetype='application/json') @login_required @require_POST @csrf_protect def bank_accounts_add_ajax(request): """Добавить расчетный счет - AJAX.""" form_class = forms.BankAccountForm if not request.is_ajax(): return HttpResponseBadRequest() form = form_class(data=request.POST) if form.is_valid(): new_account = form.save(commit=False) new_account.user = request.user new_account.save() 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, # ошибки формы } return HttpResponse(json.dumps(data), mimetype='application/json') @login_required @require_POST @csrf_protect def bank_accounts_edit_ajax(request, id): """Редактировать расчетный счет - AJAX.""" form_class = forms.BankAccountForm if not request.is_ajax(): return HttpResponseBadRequest() account = get_object_or_404(models.BankAccount, pk=id, user=request.user) form = form_class(data=request.POST, instance=account) if form.is_valid(): form.save() 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, # ошибки формы } return HttpResponse(json.dumps(data), mimetype='application/json') @login_required @require_POST @csrf_protect def bank_accounts_delete_ajax(request, id): """Удалить расчетный счет - AJAX.""" if not request.is_ajax(): return HttpResponseBadRequest() account = get_object_or_404(models.BankAccount, pk=id, user=request.user) account.delete() # TODO обработать ошибки удаления data = { 'success': True, 'message': {'title': 'Инфо', 'msg': 'Расчётный счёт удалён.',}, } return HttpResponse(json.dumps(data), mimetype='application/json')