Перейти к основному содержимому

События связанные с заказом

[OnBeforeOrderApiCreate] Событие перед созданием заказа в МС

Событие вызывается перед созданием заказа в МС по API. Необходимо, если нужно модифицировать отправляемый запрос в МС на создание заказа.

//Пример кода нужно вставить в файл init.php

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moysklad',
'OnBeforeOrderApiCreate',
'OnBeforeOrderApiCreateHandler'
);

function OnBeforeOrderApiCreateHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();

$orderId = $eventParams['orderId']; //ID заказа в БУС
$orderChangeStack = $eventParams['orderChangesStack']; // массив, который отправляется в МС как запрос на создание заказа

if($orderId > 0){
if($order = \Bitrix\Sale\Order::load($orderId)){
#WORK_AREA#
//здесь работаем с заказом БУС и если нужно меняем массив $orderChangeStack
}
}

// \Rbs\Moysklad\Logger::debugMsg($orderChangeStack, 'OnBeforeOrderApiCreateHandler.txt'); // записываем логи в папку /bitrix/modules/rbs.moysklad/logs/

//Отправляем \Bitrix\Main\EventResult::SUCCESS только в случае, если нужно поменять данные перед отправкой
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $orderChangeStack);
}

Данным событием можно, например, поменять склад заказа в МС в зависимости от службы доставки. Пример #WORK_AREA# для смены склада от службы доставки:

if ($shipmentCollection = $order->getShipmentCollection()) {
//проходимся по отгрузкам
foreach($shipmentCollection as $shipment){
if(!$shipment->isSystem()){
$deliveryId = (int)$shipment->getField('DELIVERY_ID');
switch($deliveryId){
case 1: //если ID службы доставки = 1
$orderChangeStack['store'] = \Rbs\Moysklad\ApiNew::get('/entity/store/59a4c826-3c54-11ea-0a80-025d0009d1f1', [], 86400 * 365);
break;
case 2: //если ID службы доставки = 2
$orderChangeStack['store'] = \Rbs\Moysklad\ApiNew::get('/entity/store/b36e8e98-713e-11eb-0a80-024f00003b1c', [], 86400 * 365);
break;
}
//ВАЖНО! ID склада можно узнать в самом МС в адресной строке. ID вводится после строки /entity/store/#ID#
break;
}
}
}

[OnAfterOrderApiCreate] Событие после успешного создания заказа в МС

Событие вызывается после успешного создания заказа в МС по API. Необходимо для действий заказом после создания в МС.

//Пример кода нужно вставить в файл init.php

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moysklad',
'OnAfterOrderApiCreate',
'OnAfterOrderApiCreateHandler'
);

function OnAfterOrderApiCreateHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();

$orderId = $eventParams['orderId']; //ID заказа в БУС
$orderMs= $eventParams['orderMs']; // объект созданного заказа в МС

if($orderId > 0){
if($order = \Bitrix\Sale\Order::load($orderId)){
#WORK_AREA#
}
}

// \Rbs\Moysklad\Logger::debugMsg($orderMs, 'OnAfterOrderApiCreateHandler.txt'); // записываем логи в папку /bitrix/modules/rbs.moysklad/logs/

//возвращать ничего не нужно, т.к. это ни на что не влияет.
}

[OnBeforeSaveOrderChanges] Событие перед изменение заказа из БУС в МС

Событие вызывается каждый раз, когда модуль отправляет данные заказа в МС при обновлении заказа в БУС. Можно применять для модификации отправляемых данных в МС.

//Пример кода нужно вставить в файл init.php

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moysklad',
'OnBeforeSaveOrderChanges',
'OnBeforeSaveOrderChangesHandler'
);

function OnBeforeSaveOrderChangesHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();

$orderId = $eventParams['orderId']; //ID заказа в БУС
$orderChangeStack = $eventParams['orderChangesStack']; // массив, который отправляется в МС как запрос на изменение заказа

if($orderId > 0){
if($order = \Bitrix\Sale\Order::load($orderId)){
#WORK_AREA#
//здесь работаем с заказом БУС и если нужно меняем массив $orderChangeStack
}
}

// \Rbs\Moysklad\Logger::debugMsg($orderChangeStack, 'OnBeforeSaveOrderChangesHandler.txt'); // записываем логи в папку /bitrix/modules/rbs.moysklad/logs/

//Отправляем \Bitrix\Main\EventResult::SUCCESS только в случае, если нужно поменять данные перед отправкой
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $orderChangeStack);
}

[OnBeforeImportBxOrder] Событие перед началом импорта заказа в БУС из МС (есть возможность остановить импорт)

//Пример кода нужно вставить в файл init.php

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moysklad',
'OnBeforeImportBxOrder',
'OnBeforeImportBxOrderHandler'
);

function OnBeforeImportBxOrderHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();

$msOrder= $eventParams['msOrder']; //объект заказа МС

//Отправляем \Bitrix\Main\EventResult::ERROR только в случае, если нужно остановить импорт заказа
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR);
}

[OnBeforeCreateBxOrder] Событие перед созданием заказа в БУС из МС (не путать с похожим событием веб-хука)

Событие отличается от события [OnCreateWebhookOrder] тем, что вызывается перед тем, как модуль создаст создаст заказ в Битриксе и позволяет редактировать его перед созданием.

//Пример кода нужно вставить в файл init.php

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moysklad',
'OnBeforeCreateBxOrder',
'OnBeforeCreateBxOrderHandler'
);

function OnBeforeCreateBxOrderHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();

$bxOrder = $eventParams['bxOrder']; //объект созданного заказа в БУС
$msOrder= $eventParams['msOrder']; //объект заказа МС

//можете редактировать объект $bxOrder тем, самым изменяя заказ перед его созданием
}