• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/compatible/ordercompatibility.php
  • Класс: BitrixSaleCompatibleOrderCompatibility
  • Вызов: OrderCompatibility::create
static function create(array $fields)
{
	$adminSection = (defined('ADMIN_SECTION') && ADMIN_SECTION === true);

	$orderCompatibility = new static();

	$lid = $fields['LID'];
	$userId = $fields['USER_ID'];
	$currency = $fields['CURRENCY'];

	$registry = SaleRegistry::getInstance(static::getRegistryType());
	/** @var SaleOrder $orderClassName */
	$orderClassName = $registry->getOrderClassName();

	if (isset($fields['ID']) && intval($fields['ID']) > 0)
	{
		if (!$order = $orderClassName::load($fields['ID']))
		{
			throw new SaleUserMessageException('Order not found');
		}
	}
	else
	{
		if (!$order = $orderClassName::create($lid, $userId, $currency))
		{
			throw new SaleUserMessageException('Order not create');
		}
	}

	if (isset($fields['PERSON_TYPE_ID']) && intval($fields['PERSON_TYPE_ID']) > 0)
	{
		$order->setPersonTypeId($fields['PERSON_TYPE_ID']);
	}

	$orderFields = static::replaceFields($fields, static::getOrderReplaceFields());

	$orderFields = $orderCompatibility->parseRawFields(static::ENTITY_ORDER, $orderFields);

	$orderFields = static::clearFields($orderFields);
	foreach (static::getFieldsFromOtherEntities() as $wrongField)
	{
		if (array_key_exists($wrongField, $fields))
			unset($orderFields[$wrongField]);
	}

	$orderFields = static::convertDateFields($orderFields, static::getOrderDateFields());

	unset($orderFields['MARKED']);
	unset($orderFields['CANCELED']);

	if (array_key_exists('PRICE', $orderFields))
	{
		$orderCompatibility->externalPrice = $orderFields['PRICE'];
	}

	if ($order->getId() > 0)
	{
		if ($adminSection)
		{
			unset($orderFields['PRICE']);
		}

		unset($orderFields['PRICE_DELIVERY']);
		unset($orderFields['DISCOUNT_VALUE']);
		unset($orderFields['TAX_VALUE']);
		$order->setField('DATE_UPDATE', new MainTypeDateTime());
	}
	else
	{
		if (!$adminSection)
			unset($orderFields['SUM_PAID']);

		$order->setField('DATE_INSERT', new MainTypeDateTime());
		$order->setField('DATE_UPDATE', new MainTypeDateTime());
	}

	unset($orderFields['TAX_PRICE']);

	if (array_key_exists('STATUS_ID', $orderFields) && $order->getId() > 0)
	{
		$order->setField('STATUS_ID', $orderFields['STATUS_ID']);
		unset($orderFields['STATUS_ID']);
	}

	if (isset($orderFields['USE_VAT']) && $orderFields['USE_VAT'] === true)
	{
		$orderFields['USE_VAT'] = 'Y';
	}

	$order->setFieldsNoDemand($orderFields);

	$orderCompatibility->order = $order;

	$orderCompatibility->requestFields = $fields;

	$order->getDiscount();

	return $orderCompatibility;
}