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.
 
 
 
 

107 lines
3.5 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 .. import models, forms
@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()
form = form_class(data=request.POST)
if form.is_valid():
new_client = form.save(commit=False)
new_client.user = request.user
new_client.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, # ошибки формы
'reload': form.is_valid() and 'reload_on_success' in request.GET
}
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():
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, # ошибки формы
'reload': form.is_valid() and 'reload_on_success' in request.GET
}
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.delete()
# TODO обработать ошибки удаления
data = {
'success': True,
'message': {'title': 'Инфо', 'msg': 'Контрагент удалён.',},
'reload': 'reload_on_success' in request.GET
}
return HttpResponse(json.dumps(data), mimetype='application/json')