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.
 
 
 
 

117 lines
3.3 KiB

# -*- 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
from ..decorators import license_required
from ..utils import raise_if_no_profile
from django.conf import settings
@login_required
@csrf_protect
@save_per_page_value
def clients_list(request, page_num=None):
"""Список контрагентов пользователя."""
raise_if_no_profile(request)
template_name='customer/clients/list.html'
client_list = models.Client.objects.filter(company=request.user.profile).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
@license_required
@csrf_protect
def clients_add(request):
"""Добавить контрагента."""
raise_if_no_profile(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.company = request.user.profile
new_client.save()
return redirect(success_url)
else:
form = form_class()
return render(request, template_name, {'form': form,})
@login_required
@license_required
@csrf_protect
def clients_edit(request, id):
"""Редактировать контрагента."""
raise_if_no_profile(request)
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, company=request.user.profile)
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
@license_required
@csrf_protect
def clients_delete(request, id):
"""Удалить контрагента."""
raise_if_no_profile(request)
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, profile=request.user.profile)
if request.method == 'POST':
client.delete()
# TODO обработать ошибки удаления
return redirect(success_url)
return render(request, template_name, {'client': client,})