• Модуль: 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');
}