Улучшен поиск клиента по телефону
Исправления: - Поиск по телефону теперь работает независимо от формата ввода (иконки, пробелы, +/-) - Добавлена поддержка поиска по цифрам телефона (например, введение '291234' найдет +375291234567) - Оптимизирована задержка AJAX запроса (300ms вместо 250ms) - Добавлена обработка ошибок AJAX с логированием - Улучшена обработка пустых результатов 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -148,12 +148,31 @@ def api_search_customers(request):
|
||||
# Пытаемся нормализовать номер телефона для поиска
|
||||
phone_normalized = normalize_query_phone(query)
|
||||
|
||||
# Для поиска по телефону: извлекаем только цифры и ищем по ним
|
||||
# Это позволит найти клиента независимо от формата ввода
|
||||
query_digits = ''.join(c for c in query if c.isdigit())
|
||||
|
||||
# Ищем по имени, email или телефону
|
||||
customers = Customer.objects.filter(
|
||||
Q(name__icontains=query) |
|
||||
Q(email__icontains=query) |
|
||||
Q(phone__icontains=phone_normalized)
|
||||
).order_by('name')[:20] # Ограничиваем 20 результатами
|
||||
# Используем Q-объекты для OR условий
|
||||
q_objects = Q(name__icontains=query) | Q(email__icontains=query)
|
||||
|
||||
# Для телефона ищем по нормализованному номеру и по цифрам
|
||||
if phone_normalized:
|
||||
q_objects |= Q(phone__icontains=phone_normalized)
|
||||
|
||||
if query_digits:
|
||||
# Ищем клиентов, чьи телефоны содержат введенные цифры
|
||||
customers_by_phone = Customer.objects.filter(phone__isnull=False)
|
||||
matching_by_digits = []
|
||||
for customer in customers_by_phone:
|
||||
customer_digits = ''.join(c for c in str(customer.phone) if c.isdigit())
|
||||
if query_digits in customer_digits:
|
||||
matching_by_digits.append(customer.pk)
|
||||
|
||||
if matching_by_digits:
|
||||
q_objects |= Q(pk__in=matching_by_digits)
|
||||
|
||||
customers = Customer.objects.filter(q_objects).distinct().order_by('name')[:20]
|
||||
|
||||
results = []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user