Регистрируем обработчик
$bxEventManager = \Bitrix\Main\EventManager::getInstance();
$bxEventManager->addEventHandler(
"sale",
"OnSaleOrderBeforeSaved",
array(
Gricuk\Sale\Order::class,
"changeStatusOnOrderCreate"
)
);
Сам обработчик. У меня в примере логика на смена статуса заказа для определенных служб. Ее можно переписать на что угодно. Основное это
$event->addResult
namespace Gricuk\Sale;
class Order
{
public static function changeStatusOnOrderCreate(\Bitrix\Main\Event $event)
{
/** @var \Bitrix\Sale\Order $order */
$order = $event->getParameter("ENTITY");
$status = $order->getField("STATUS_ID");
if ($status == "N") {
/** @var $paymentCollection \Bitrix\Sale\PaymentCollection */
$paymentCollection = $order->getPaymentCollection();
foreach ($paymentCollection as $payment) {
/** @var $payment \Bitrix\Sale\Payment */
/** @var $paySystem \Bitrix\Sale\PaySystem\Service */
$paySystem = $payment->getPaySystem();
if (!is_null($paySystem) && !$paySystem->isCash()) {
$order->setField("STATUS_ID", "NA");
$event->addResult(
new Main\EventResult(
Main\EventResult::SUCCESS, $order
)
);
break;
}
}
}
}
}
Пример 100% рабочий. Взят с прода.