# -*- coding: utf-8 -*- from django.shortcuts import render, redirect, get_object_or_404 from django.views.decorators.csrf import csrf_protect from django.contrib.auth.decorators import login_required from project.commons.paginator import pagination, save_per_page_value from .. import models, forms @login_required @csrf_protect @save_per_page_value def clients_list(request, page_num=None): """Список контрагентов пользователя.""" template_name='customer/clients/list.html' client_list = models.Client.objects.filter(user=request.user).order_by('name', '-created_at') page, pagination_form = pagination(request, client_list, page_num) client_form = forms.ClientForm() dictionary = { 'page': page, 'pagination_form': pagination_form, 'client_form': client_form, } return render(request, template_name, dictionary) @login_required @csrf_protect def clients_add(request): """Добавить контрагента.""" template_name='customer/clients/add.html' success_url = 'customer_clients_list' form_class = forms.ClientForm if request.method == 'POST' and '_cancel' in request.POST: return redirect(success_url) if request.method == 'POST': form = form_class(data=request.POST) if form.is_valid(): new_client = form.save(commit=False) new_client.user = request.user new_client.save() return redirect(success_url) else: form = form_class() return render(request, template_name, {'form': form,}) @login_required @csrf_protect def clients_edit(request, id): """Редактировать контрагента.""" template_name='customer/clients/edit.html' success_url = 'customer_clients_list' if request.method == 'POST' and '_cancel' in request.POST: return redirect(success_url) form_class = forms.ClientForm client = get_object_or_404(models.Client, pk=id, user=request.user) if request.method == 'POST': form = form_class(data=request.POST, instance=client) if form.is_valid(): form.save() return redirect(success_url) else: form = form_class(instance=client) dictionary = { 'client': client, 'form': form, } return render(request, template_name, dictionary) @login_required @csrf_protect def clients_delete(request, id): """Удалить контрагента.""" template_name='customer/clients/delete.html' success_url = 'customer_clients_list' if request.method == 'POST' and '_cancel' in request.POST: return redirect(success_url) client = get_object_or_404(models.Client, pk=id, user=request.user) if request.method == 'POST': client.delete() # TODO обработать ошибки удаления return redirect(success_url) return render(request, template_name, {'client': client,})