Обработчики событий подключайте в init.php или в файлах /local/php_interface/. Ниже - полный набор событий API с примерами из документации модуля.
Позволяет изменить параметры до начисления бонусов.
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "BeforeAddBonus", "EventBeforeAddBonus");
function EventBeforeAddBonus(\Bitrix\Main\Event $event)
{
$arFields = $event->getParameters();
//Для примера отменим начисление
$arFields["ADD_BONUS"] = 0;
$result = new Bitrix\Main\EventResult($event->getEventType(), $arFields);
return $result;
}
Пример использования для отмены начисления бонусов за заказы, выгруженные например из 1С (в номере заказа имеется идентификатор - в примере символ "C"):
/* ДЛЯ МОДУЛЯ logictim.bonus - отмена начисления бонусов за заказы с номерами "C"*/
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "BeforeAddBonus", "EventBeforeAddBonus");
function EventBeforeAddBonus(\Bitrix\Main\Event $event)
{
$arFields = $event->getParameters();
if($arFields['OPERATION_TYPE'] == 'ADD_FROM_ORDER' && $arFields['ADD_BONUS'] > 0):
$order = \Bitrix\Sale\Order::load($arFields['ORDER_ID']);
$orderNumber = $order->getField("ACCOUNT_NUMBER");
if(strpos($orderNumber, 'C') !== false)
{
$arFields["ADD_BONUS"] = 0;
}
endif;
$result = new Bitrix\Main\EventResult($event->getEventType(), $arFields);
return $result;
}
/* ДЛЯ МОДУЛЯ logictim.bonus - отмена начисления бонусов за заказы с номерами "C"*/
Срабатывает после создания операции начисления. Параметры менять нельзя.
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "AfterAddBonus", "AfterAddBonus");
function AfterAddBonus(\Bitrix\Main\Event $event)
{
$arBonus = $event->getParameters();
}
$arBonus - информация об операции начисления.
После создания операции ожидания (если есть задержка активации). Параметры менять нельзя.
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "AfterAddBonusWait", "AfterAddBonusWait");
function AfterAddBonusWait(\Bitrix\Main\Event $event)
{
$arBonus = $event->getParameters();
}
$arBonus - информация об операции начисления.
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "AfterUserAdd", "LofictimBobusAfterUserAdd");
function LofictimBobusAfterUserAdd(\Bitrix\Main\Event $event){
$arBonus = $event->getParameters();
}
$arBonus = ['USER_ID' => 'ID зарегистрированного пользователя', 'PARTNER_ID' => 'ID партнера (при наличии)']. Имя обработчика в примере сохранено как в API-документации (LofictimBobusAfterUserAdd).
Позволяет изменить параметры до списания.
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "BeforeMinusBonus", "EventBeforeMinusBonus");
function EventBeforeMinusBonus(\Bitrix\Main\Event $event)
{
$arFields = $event->getParameters();
//Для примера, отменим списание бонусов
$arFields["MINUS_BONUS"] = 0;
$result = new Bitrix\Main\EventResult($event->getEventType(), $arFields);
return $result;
}
После операции списания. Параметры менять нельзя.
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "AfterMinusBonus", "AfterMinusBonus");
function AfterMinusBonus(\Bitrix\Main\Event $event)
{
$arBonus = $event->getParameters();
}
$arBonus - информация об операции списания.
Меняет сумму заказов для правил начисления/списания. По умолчанию - сумма оплаченных заказов на сайте; через событие можно подставить сумму из 1С или произвольного поля.
Пример 1 - фиксированная сумма:
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "BeforeUserOrdersSum", "EventBeforeUserOrdersSum");
function EventBeforeUserOrdersSum(\Bitrix\Main\Event $event)
{
$arFields = $event->getParameters();
$arFields["CUSTOM_ORDERS_SUM"] = 10000; //Если здесь укажите сумму заказов, то при расчетах правил будет использоваться именно она
$result = new Bitrix\Main\EventResult($event->getEventType(), $arFields);
return $result;
}
Пример 2 - сумма за период через CumulativeCalculator:
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "BeforeUserOrdersSum", "EventBeforeUserOrdersSum");
function EventBeforeUserOrdersSum(\Bitrix\Main\Event $event)
{
$dateStart = strtotime('16.12.2021'); //Учитывать в сумме покупок заказы начиная с даты
$dateEnd = time(); //Учитывать в сумме покупок заказы до текущей даты
$arFields = $event->getParameters();
//Получаем сумм оплаченных заказов пользователя за период
\CModule::IncludeModule("sale");
$calculator = new \Bitrix\Sale\Discount\CumulativeCalculator($arFields["USER_ID"], $arFields["SITE_ID"]);
$sumConfiguration = array(
'type_sum_period'=> 'interval',
'sum_period_data' => array('order_start' => $dateStart, 'order_end' => $dateEnd)
);
$calculator->setSumConfiguration($sumConfiguration);
$ordersSum = $calculator->calculate();
//Если идет расчет суммы заказов в момент оплаты заказа, то вычитаем из расчета сумму этого заказа
if($arFields["ORDER"]["ORDER_ID"] > 0 && $arFields["EVENT_ORDER_PAID"] == 'Y')
$ordersSum = $ordersSum - $arFields["ORDER"]["ORDER_SUM"];
$arFields["CUSTOM_ORDERS_SUM"] = $ordersSum;
$result = new Bitrix\Main\EventResult($event->getEventType(), $arFields);
return $result;
}
Своя генерация кода купона партнера. В API параметр партнера назван PARTNRER_ID (как в исходной документации).
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "BeforeGenerateParnterCouponCode", "EventBeforeGenerateParnterCouponCode");
function EventBeforeGenerateParnterCouponCode(\Bitrix\Main\Event $event)
{
$arFields = $event->getParameters();
$arFields["CUSTOM_COUPON_CODE"] = 'CUSTOM_CODE_'.$arFields["PARTNRER_ID"];
$result = new Bitrix\Main\EventResult($event->getEventType(), $arFields);
return $result;
}
PARTNRER_ID - ID партнераCUSTOM_COUPON_CODE - свой код. Если не передан - код по настройкам модуляПосле выбора правила, до расчета бонусов за товар (и начисление, и оплата бонусами). Для SKU вызывается на основной товар и каждое ТП.
\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "BeforeCalculateBonus", "BeforeCalculateBonus");
function BeforeCalculateBonus(\Bitrix\Main\Event $event)
{
$arBonus = $event->getParameters();
//Пример отмены начисления бонусов за товар
$arBonus['BONUS'] = 0;
$result = new Bitrix\Main\EventResult($event->getEventType(), $arBonus);
return $result;
}
Изменяемые поля: BONUS, BONUS_TYPE (percent / bonus), ROUND (0-4), ROUND_TYPE (MATH / UP / DOWN), ROUND_METHOD (UNIT / POSITION), VIEW_IN_CATALOG (Y / N).
Информация в событии: PROFILES, PROFILE_RULE, ELEMENT_INFO.
Смотрите также: AddBonus, оглавление API.