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)