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

Событие при расчете суммы заказов пользователя

Событие позволяет изменить сумму заказов пользователя, учитываемую при расчете правил начисления и списания бонусов.

Когда это может понадобится:
Сумма заказов пользователя по умолчанию рассчитывается из суммы оплаченных заказов пользователя на сайте.
Бывает, что при обмене с 1С, на сайте не всегда имеются все заказы пользователя (отсутствуют заказы, оформленные офф-лайн).
В данном случае, из 1С можно передавать на сайт сумму заказов пользователя, сохраняя в произвольном поле, и использовать при расчете эту сумму.

Пример события (код вставлять в init.php):
\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;
	
}


Ниже пример кода для определения суммы оплаченных заказов за определенный период
\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;
	
}





Возврат к списку