Обновили шапку и вывод всехтоваров. Добавили фильтры
This commit is contained in:
105
myproject/customers/views.py
Normal file
105
myproject/customers/views.py
Normal file
@@ -0,0 +1,105 @@
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.contrib import messages
|
||||
from django.core.paginator import Paginator
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db.models import Q
|
||||
import phonenumbers
|
||||
from .models import Customer, Address
|
||||
from .forms import CustomerForm
|
||||
|
||||
|
||||
def normalize_query_phone(q):
|
||||
"""Normalize phone number for search"""
|
||||
try:
|
||||
parsed = phonenumbers.parse(q, "BY")
|
||||
if phonenumbers.is_valid_number(parsed):
|
||||
return phonenumbers.format_number(parsed, phonenumbers.PhoneNumberFormat.E164)
|
||||
return q
|
||||
except:
|
||||
return q
|
||||
|
||||
|
||||
def customer_list(request):
|
||||
"""Список всех клиентов"""
|
||||
query = request.GET.get('q')
|
||||
customers = Customer.objects.all()
|
||||
|
||||
if query:
|
||||
# Try to normalize the phone number for searching
|
||||
phone_normalized = normalize_query_phone(query)
|
||||
customers = customers.filter(
|
||||
Q(name__icontains=query) |
|
||||
Q(email__icontains=query) |
|
||||
Q(phone__icontains=phone_normalized)
|
||||
)
|
||||
|
||||
customers = customers.order_by('-created_at')
|
||||
|
||||
# Пагинация
|
||||
paginator = Paginator(customers, 25) # 25 клиентов на страницу
|
||||
page_number = request.GET.get('page')
|
||||
page_obj = paginator.get_page(page_number)
|
||||
|
||||
context = {
|
||||
'page_obj': page_obj,
|
||||
'query': query,
|
||||
}
|
||||
return render(request, 'customers/customer_list.html', context)
|
||||
|
||||
|
||||
def customer_detail(request, pk):
|
||||
"""Детали клиента"""
|
||||
customer = get_object_or_404(Customer, pk=pk)
|
||||
addresses = customer.addresses.all()
|
||||
|
||||
context = {
|
||||
'customer': customer,
|
||||
'addresses': addresses,
|
||||
}
|
||||
return render(request, 'customers/customer_detail.html', context)
|
||||
|
||||
|
||||
def customer_create(request):
|
||||
"""Создание нового клиента"""
|
||||
if request.method == 'POST':
|
||||
form = CustomerForm(request.POST)
|
||||
if form.is_valid():
|
||||
customer = form.save()
|
||||
messages.success(request, f'Клиент {customer.full_name} успешно создан.')
|
||||
return redirect('customers:customer-detail', pk=customer.pk)
|
||||
else:
|
||||
form = CustomerForm()
|
||||
|
||||
return render(request, 'customers/customer_form.html', {'form': form, 'is_creating': True})
|
||||
|
||||
|
||||
def customer_update(request, pk):
|
||||
"""Редактирование клиента"""
|
||||
customer = get_object_or_404(Customer, pk=pk)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = CustomerForm(request.POST, instance=customer)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, f'Клиент {customer.full_name} успешно обновлён.')
|
||||
return redirect('customers:customer-detail', pk=customer.pk)
|
||||
else:
|
||||
form = CustomerForm(instance=customer)
|
||||
|
||||
return render(request, 'customers/customer_form.html', {'form': form, 'is_creating': False})
|
||||
|
||||
|
||||
def customer_delete(request, pk):
|
||||
"""Удаление клиента"""
|
||||
customer = get_object_or_404(Customer, pk=pk)
|
||||
|
||||
if request.method == 'POST':
|
||||
customer_name = customer.full_name
|
||||
customer.delete()
|
||||
messages.success(request, f'Клиент {customer_name} успешно удален.')
|
||||
return redirect('customers:customer-list')
|
||||
|
||||
context = {
|
||||
'customer': customer
|
||||
}
|
||||
return render(request, 'customers/customer_confirm_delete.html', context)
|
||||
Reference in New Issue
Block a user