- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/compatible/eventcompatibility.php
- Класс: BitrixSaleCompatibleEventCompatibility
- Вызов: EventCompatibility::onOrderBeforeSaved
static function onOrderBeforeSaved(MainEvent $event)
{
global $APPLICATION;
if (static::$disableEvent === true)
{
return new MainEventResult( MainEventResult::SUCCESS, null, 'sale');
}
$parameters = $event->getParameters();
/** @var SaleOrder $order */
$order = $parameters['ENTITY'];
if (!$order instanceof SaleOrder)
{
return new MainEventResult(
MainEventResult::ERROR,
new SaleResultError(MainLocalizationLoc::getMessage('SALE_EVENT_COMPATIBILITY_WRONG_ORDER'), 'SALE_EVENT_COMPATIBILITY_ORDER_BEFORE_SAVED_WRONG_ORDER'),
'sale'
);
}
$id = $order->getId();
$fields = null;
$orderFields = null;
/** @var SaleResult $resultOrderFields */
$resultOrderFields = OrderCompatibility::getOrderFields($order);
if ($resultOrderFields->isSuccess())
{
if ($orderFieldsResultData = $resultOrderFields->getData())
{
if (!empty($orderFieldsResultData['ORDER_FIELDS']) && is_array($orderFieldsResultData['ORDER_FIELDS']))
{
$orderFields = $orderFieldsResultData['ORDER_FIELDS'];
}
}
}
$currentOrderFields = $orderFields;
if ($order->isNew())
{
static::setDisableEvent(true);
foreach(GetModuleEvents("sale", static::EVENT_COMPATIBILITY_ON_BEFORE_ORDER_ADD, true) as $oldEvent)
{
if (ExecuteModuleEventEx($oldEvent, array(&$orderFields)) === false)
{
if ($ex = $APPLICATION->GetException())
{
return new MainEventResult(
MainEventResult::ERROR,
new SaleResultError($ex->GetString(), $ex->GetID()),
'sale'
);
}
}
}
static::setDisableEvent(false);
$allowFields = OrderCompatibility::getAvailableFields();
foreach ($orderFields as $orderFieldName => $orderFieldValue)
{
if (in_array($orderFieldName, $allowFields)
&& (array_key_exists($orderFieldName, $currentOrderFields) && $orderFieldValue != $currentOrderFields[$orderFieldName]))
{
/** @var SaleResult $r */
$order->setFieldNoDemand($orderFieldName, $orderFieldValue);
}
}
}
else
{
static::setDisableEvent(true);
foreach(GetModuleEvents("sale", static::EVENT_COMPATIBILITY_ON_BEFORE_ORDER_UPDATE, true) as $oldEvent)
{
if (ExecuteModuleEventEx($oldEvent, array($id, $orderFields)) === false)
{
$error = null;
if ($ex = $APPLICATION->GetException())
{
$error = new SaleResultError($ex->GetString(), $ex->GetID());
}
return new MainEventResult(
MainEventResult::ERROR,
$error,
'sale'
);
}
}
static::setDisableEvent(false);
}
return new MainEventResult( MainEventResult::SUCCESS, null, 'sale');
}