[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 тем, самым изменяя заказ перед его созданием
}