Улучшен поиск клиента по телефону

Исправления:
- Поиск по телефону теперь работает независимо от формата ввода (иконки, пробелы, +/-)
- Добавлена поддержка поиска по цифрам телефона (например, введение '291234' найдет +375291234567)
- Оптимизирована задержка AJAX запроса (300ms вместо 250ms)
- Добавлена обработка ошибок AJAX с логированием
- Улучшена обработка пустых результатов

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-10 22:24:36 +03:00
parent 74ece6dd66
commit 000b791702
2 changed files with 42 additions and 11 deletions

View File

@@ -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 = []