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

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

Last updated