Столкнулся с неприятной ситуацией переопределения скидок. Вроде все по мануалу, ан-нет, не так все просто
Задача стояла следующая, для определенных клиентов отключить применение скидок, причем в правилах скидок это не получается применить, но это отдельная тема.
Что было сделано
И это работает, причем везде, кроме штатной компоненты bitrix:sale.order.ajax, которая не обращается к данному обработчику, и начинает применять скидки для этих пользователей. В результате продаже ниже захода.
Подскажите направление, куда копать, что-бы победить данную тему? И почему данное событие не отрабатывает данный компонет, это так задумано или это ошибка?
Задача стояла следующая, для определенных клиентов отключить применение скидок, причем в правилах скидок это не получается применить, но это отдельная тема.
Что было сделано
Код |
---|
// Решаем вопрос со скидками, т.е. не разрешаем применять скидки из разряда "для всех, в том числе неавторизованных" для оптовиков... \Bitrix\Main\EventManager::getInstance()->addEventHandler('catalog', 'OnGetDiscount', ['pitOnGetDiscount', 'OnGetDiscountHandler']); \Bitrix\Main\EventManager::getInstance()->addEventHandler('catalog', 'OnGetDiscountResult', ['pitOnGetDiscount', 'OnGetDiscountResultHandler']); class pitOnGetDiscount { // static private $arCache = array(); static private $arUserGroups = false; // public function OnGetDiscountHandler($intProductID, $intIBlockID, $arCatalogGroups, $arUserGroups, $strRenewal, $siteID, $arDiscountCoupons, $boolSKU, $boolGetIDS) { self::$arUserGroups = $arUserGroups; return true; } // public function OnGetDiscountResultHandler(&$arResult) { $isOptUser = in_array(12, self::$arUserGroups) || in_array(25, self::$arUserGroups); // Опт, мелкий опт... if($isOptUser) { $connection = false; foreach($arResult as $k => $a) { if(!isset(self::$arCache[$k])) { self::$arCache[$k] = array(); if(!$connection) $connection = \Bitrix\Main\Application::getConnection(); $res = $connection->query('SEL ECT `GROUP_ID` FR OM `b_sale_discount_group` WHERE `DISCOUNT_ID`='.$k); while($ob = $res->fetch()) self::$arCache[$k][] = (int)$ob['GROUP_ID']; } // Проверяем, скидос имеет отношение к оптовому пользователю?... if( !in_array(12, self::$arCache[$k]) // Опт... && !in_array(25, self::$arCache[$k]) // Опт. Питер -15%... ) unset($arResult[$k]); } } } } |
Подскажите направление, куда копать, что-бы победить данную тему? И почему данное событие не отрабатывает данный компонет, это так задумано или это ошибка?