diff --git a/myproject/orders/templates/orders/order_form.html b/myproject/orders/templates/orders/order_form.html index 46a8c7c..5c54793 100644 --- a/myproject/orders/templates/orders/order_form.html +++ b/myproject/orders/templates/orders/order_form.html @@ -561,7 +561,7 @@ function initCustomerSelect2() { // Очищаем значение $customerSelect.val(null).trigger('change.select2'); // Открываем модаль - openCreateCustomerModal(data.search_text); + window.openCreateCustomerModal(data.search_text); return false; } }); @@ -580,19 +580,17 @@ function initCustomerSelect2() { console.log('9_option. Ближайший option:', target); if (!target) return; - // Проверяем содержит ли элемент класс customer-create-option - const createOptionDiv = target.querySelector('.customer-create-option'); - console.log('9_create. create option найден:', !!createOptionDiv); - if (createOptionDiv) { + // Проверяем текст опции - если это "Создать клиента", открываем модаль + const optionText = target.textContent.trim(); + console.log('9_text. Текст опции:', optionText); + + if (optionText.startsWith('Создать клиента:')) { console.log('9c. Клик на create option напрямую'); - // Получаем текст опции - const fullText = target.textContent.trim(); - console.log('9_text. Полный текст:', fullText); // Извлекаем поисковый текст (удаляем "Создать клиента: ") - const searchText = fullText.replace(/^\s*[\s\S]+?:\s*"([^"]*)"\s*$/, '$1') || fullText; + const searchText = optionText.replace(/^Создать\s+клиента:\s*"([^"]*)"\s*$/, '$1') || optionText; console.log('9d. Открываем модаль с текстом:', searchText); - openCreateCustomerModal(searchText); + window.openCreateCustomerModal(searchText); // Закрываем dropdown $customerSelect.select2('close'); @@ -615,7 +613,7 @@ function initCustomerSelect2() { // Триггерим нативное change событие для draft-creator.js const changeEvent = new Event('change', { bubbles: true }); this.dispatchEvent(changeEvent); - openCreateCustomerModal(data.search_text); + window.openCreateCustomerModal(data.search_text); } else { // Триггерим нативное change событие для других обработчиков (например, draft-creator.js) console.log('12. Триггерим нативное change событие'); @@ -659,6 +657,46 @@ function initCustomerSelect2() { } } +// === СОЗДАНИЕ НОВОГО КЛИЕНТА === +// Функция открытия модального окна создания клиента (определяем ДО инициализации Select2) +window.openCreateCustomerModal = function(searchText = '') { + // Заполняем форму предложенными данными + if (searchText) { + // Пытаемся распознать введенные данные + const phoneRegex = /[\d\s\-\+\(\)]+/; + const emailRegex = /[^\s@]+@[^\s@]+\.[^\s@]+/; + + // Ищем email и телефон в строке поиска + const emailMatch = searchText.match(emailRegex); + const phoneMatch = searchText.match(phoneRegex); + + // Если это похоже на email, заполняем email + if (emailMatch) { + document.getElementById('customer-email').value = emailMatch[0]; + } + // Если это похоже на телефон (много цифр), заполняем телефон + else if (phoneMatch && phoneMatch[0].replace(/\D/g, '').length >= 9) { + document.getElementById('customer-phone').value = phoneMatch[0]; + } + // Иначе считаем это имя + else { + document.getElementById('customer-name').value = searchText; + } + } + + // Очищаем поля которые не заполнены + const customerNameInput = document.getElementById('customer-name'); + const customerPhoneInput = document.getElementById('customer-phone'); + const customerEmailInput = document.getElementById('customer-email'); + const createCustomerModal = new bootstrap.Modal(document.getElementById('createCustomerModal')); + + // Очищаем сообщения об ошибках + document.getElementById('customer-form-errors').innerHTML = ''; + document.getElementById('customer-form-errors').style.display = 'none'; + + createCustomerModal.show(); +}; + // Вызываем инициализацию initCustomerSelect2(); @@ -923,47 +961,6 @@ if (typeof $ !== 'undefined') { } }); - // === СОЗДАНИЕ НОВОГО КЛИЕНТА === - - // Функция открытия модального окна создания клиента - window.openCreateCustomerModal = function(searchText = '') { - // Заполняем форму предложенными данными - if (searchText) { - // Пытаемся распознать введенные данные - const phoneRegex = /[\d\s\-\+\(\)]+/; - const emailRegex = /[^\s@]+@[^\s@]+\.[^\s@]+/; - - // Ищем email и телефон в строке поиска - const emailMatch = searchText.match(emailRegex); - const phoneMatch = searchText.match(phoneRegex); - - // Если это похоже на email, заполняем email - if (emailMatch) { - document.getElementById('customer-email').value = emailMatch[0]; - } - // Если это похоже на телефон (много цифр), заполняем телефон - else if (phoneMatch && phoneMatch[0].replace(/\D/g, '').length >= 9) { - document.getElementById('customer-phone').value = phoneMatch[0]; - } - // Иначе считаем это имя - else { - document.getElementById('customer-name').value = searchText; - } - } - - // Очищаем поля которые не заполнены - const customerNameInput = document.getElementById('customer-name'); - const customerPhoneInput = document.getElementById('customer-phone'); - const customerEmailInput = document.getElementById('customer-email'); - const createCustomerModal = new bootstrap.Modal(document.getElementById('createCustomerModal')); - - // Очищаем сообщения об ошибках - document.getElementById('customer-form-errors').innerHTML = ''; - document.getElementById('customer-form-errors').style.display = 'none'; - - createCustomerModal.show(); - }; - // Обработчик сохранения нового клиента document.getElementById('save-customer-btn').addEventListener('click', function() { const name = document.getElementById('customer-name').value.trim();