+7 (843) 212-62-17 - Казань
+7 (843) 212-62-17 - Казань

Обработчики событий подключайте в init.php или в файлах /local/php_interface/. Ниже - полный набор событий API с примерами из документации модуля.

BeforeAddBonus - до начисления

Позволяет изменить параметры до начисления бонусов.

\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"*/

AfterAddBonus - после начисления

Срабатывает после создания операции начисления. Параметры менять нельзя.

\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "AfterAddBonus", "AfterAddBonus");
function AfterAddBonus(\Bitrix\Main\Event $event)
{

	$arBonus = $event->getParameters();
}

$arBonus - информация об операции начисления.

AfterAddBonusWait - после операции ожидания

После создания операции ожидания (если есть задержка активации). Параметры менять нельзя.

\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "AfterAddBonusWait", "AfterAddBonusWait");
function AfterAddBonusWait(\Bitrix\Main\Event $event)
{

	$arBonus = $event->getParameters();
}

$arBonus - информация об операции начисления.

AfterUserAdd - после регистрации пользователя

\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).

BeforeMinusBonus - до списания

Позволяет изменить параметры до списания.

\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;

}

AfterMinusBonus - после списания

После операции списания. Параметры менять нельзя.

\Bitrix\Main\EventManager::getInstance()->addEventHandler("logictim.balls", "AfterMinusBonus", "AfterMinusBonus");
function AfterMinusBonus(\Bitrix\Main\Event $event)
{

	$arBonus = $event->getParameters();
}

$arBonus - информация об операции списания.

BeforeUserOrdersSum - при расчете суммы заказов

Меняет сумму заказов для правил начисления/списания. По умолчанию - сумма оплаченных заказов на сайте; через событие можно подставить сумму из 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;

}

BeforeGenerateParnterCouponCode - код реферального купона

Своя генерация кода купона партнера. В 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 - свой код. Если не передан - код по настройкам модуля

BeforeCalculateBonus - до расчета бонусов

После выбора правила, до расчета бонусов за товар (и начисление, и оплата бонусами). Для 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.