Minishop2 Обязательные поля для способа оплаты

Всем доброго времени суток!

Есть корзина на сайте (не кликабельная, даю прямую ссылку): lasmik.com/cart
Товары можно добавить отсюда: lasmik.com/dev-page

В корзине есть два способа доставки: Самовывоз и Доставка. У обоих из них есть способ оплаты «Выставление счета для юрлиц». Есть группа полей «Юр. лицо». Поля добавлял по этой инструкции: modx.pro/solutions/10040 Поля работают, в админку все приходит корректно.

Эти поля должны быть обязательны для заполнения только для вышеуказанного способа оплаты.

В minishop2 обязательные поля привязываются к способу доставки, к оплате привязать нельзя. Я решил воспользоваться js калбеками и перехватить событие до отправки заказа:

miniShop2.Callbacks.add('Order.submit.before', 'order_submit_before', function() {
    if ($('[name="payment"]:checked').attr('id') == 'payment_6') { // если выбран способ оплаты Выставление счета
        
        var empty = 0; // счетчик полей юр. лица с ошибкой (в данном случае - пустых)
        $('#legal-entity_block input').each(function(i, item) { 
            if (!$(item).val()) { 
                $(item).addClass('extfld_error');
                empty++;
            } else {
                $(item).removeClass('extfld_error'); // если поле пустое - добавляем extfld_error
            }
        });
        if (empty > 0) { // если хоть одно поле пустое, возвращаем return false;
            return false;
        }
        
    }
});
Здесь следующее: если выбран способ оплаты Выставить счет, то проверяем на заполненность поля группы Юр. лицо. Если хотя бы одно поле не заполнено, отменяем формирование заказа вернув return: false;

Однако, как я понял return: false; отправляется еще до валидации обязательных полей, типа адрес и контактные данные (телефон, email и т.д.). И получается так, что валидация полей Юр. лица проходит, а до остальных обязательных полей, привязанных к способам доставки, дело не доходит.



Еще блокируются (disabled) кнопки отправки заказа и очистки данных. И не разблокируются, даже если заполнить все поля. Но это, допустим, я уберу через js. Сейчас не это главная проблема.

Я пробовал экспериментировать с событиями, но безрезультатно. Например, пытался все вышеуказанные манипуляции провести на событие order.submit.ajax.done Типа, отменить заказ после того как данные ушли и были проверены на сервере. В этом случает обе валидации работают, но если заполнить основные (не кастомные) поля заказа, то заказ создается и return: false; вызываемый при проверке полей юр. лица не отменяет его.

Подскажите, пожалуйста, как сделать чтобы обе валидации срабатывали и заказ отправлялся только если обе они прошли.

Зарание спасибо!
Андрей
24 июня 2021, 00:08
modx.pro
2
890
0

Комментарии: 2

Роман
04 октября 2022, 17:43
0
Столкнулся с такой же проблемой, может быть кто-то знает решение?
    deleted
    04 октября 2022, 18:54
    0
    Такие вещи, мне кажется, проще на vue или alpine.js делать
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2