1С-Битрикс. Совместная работа накопительных скидок и правил работы с корзиной
В 1С-Битрикс скидки по накопительным скидкам и скидки на заказ в правилах работы с корзиной суммируются. Техническая поддержка 1С-Битрикс говорит, что изменить этот механизм в продукте нельзя. Я написал небольшой модуль, который выбирают большую скидку и оставляет только её. Но для его работы необходимо добавить пару строк кода в модуль sale. Если вы не готовы к правке исходников — этот способ не для вас.
Предисловие
Есть следующий сценарий в работе с интернет-магазинов:
1. Пользователь попадает под одно из правил накопительной программы, например 5%
2. Сумма заказа попадает по правило работы с корзиной, например 10%
Сейчас в таком случае скидки применяются последовательно и в итоге суммируются.
Как применять только одну, самую большую скидку? В нашем случае: применить правило работы с корзиной — 10%
Модуль
Метод CSaleDiscountActionApply::ApplyBasketDiscount применяет скидку из правил работы с корзиной. В него и надо добавить кусок кода.
Конечно, я позаботился о том, где и как нужно поправить в модуле sale. На странице обновления продукта выводится огромное сообщение, что нужно внимательно обновляться и инструкция куда вставить нужный кусок кода.
В методе ApplyBasketDiscount я добавил вызов события:
// {{{ Olegpro $bApply = false; foreach(GetModuleEvents("sale", "CSaleDiscountActionApplyOlegpro", true) as $arEvent){ if(ExecuteModuleEventEx($arEvent, Array(&$arOrder, $func, $dblValue, $strUnit)) === true){ $bApply = true; break; } } if($bApply){ return; } // }}}
Далее, в своём модуле я подписываюсь на это событие. Если накопительная скидка уже применена и меньше, чем скидка попадающая под правило работы с корзиной, то я отменяю эту скидку и даю применится скидке по правилу работы с корзиной. Если нет, то оставляю только накопительную скидку.
Кому нужен модуль — пишите, вышлю архив.
P.S.
Конечно, надо бы написать это на сайте идей. Но идеи там очень тяжко принимаются к рассмотрению. Напишу как-нибудь. Написал.
3 комментария
Приветствую! А если такой же алгоритм, но для комбинации: скидки на товар и правила корзины?
У меня готового решения нет.
Подскажите в каком месте в коде вы именно отменяете скидку которая не подходит? или если не сложно на почту модуль глянуть. Спасибо