1С-Битрикс — отмена скидки пользователя в корзине
Кейс — при оформлении заказа пользователь выбирает тот или иной способ доставки, при этом у некоторых способов доставки имеются дополнительные условия.
Одним из условий является отмена скидок на товар.
И все бы ничего, но штатного метода для локальной отмены скидки пользователя я не нашел, Yandex и Google тоже не помогли.
Решение — очередной ВелоГовноКод
Уже традиционно решение находится в событиях системы, в данном случае нам поможет событие «OnGetDiscountResult» модуля «catalog», оно вызывается после того как для пользователя рассчитаны все возможные скидки.
После регистрации события и передачи данных в кастомную функцию мы можем получить доступ к массиву рассчитанных скидок пользователя. Данные передаются по ссылке в переменной, следовательно массив можно прочитать и изменить на свой вкус.
Дело за малым, в кастомной функции обработчике ограничиваем выполнение кода любым удобным/доступным способом, я перехватываю данные из $_REQUEST, т.к. в корзине у меня имеются определенные ключи доступные на всех нужных этапах оформления заказа. Далее читаем $arFields переданный по ссылке, обнуляем скидку и радуемся результату.
Да! Чтобы понять какие именно скидки нужно убрать, не плохо бы иметь отфильтрованный список неугодных скидок. Достаточно сделать ::GetList(); но как выяснилось их два =)
Bitrix\Catalog\DiscountTable::getList(); Bitrix\Sale\Internals\DiscountTable::getList();
Первый выберет скидки модуля «каталог», это непосредственно скидки в общем понимании. Второй же выберет скидки модуля «интернет магазин», в админке они называются правилами работы с корзиной.
Если у кого есть решение получше — пишите в комменты, мне этот велосипед тоже не нравится!
P.S.
Перед тем как найти решение, я направил запрос в саппорт Битрикс.
Ответ правда оказался совершенно бесполезным — (screenshot 1).
Оставить комментарий
Комментарии (11)
Оставить комментарий