You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.3 KiB
126 lines
4.3 KiB
# -*- 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
|
|
from ..decorators import license_required
|
|
|
|
|
|
@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')
|
|
|