• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/order/ordercreator.php
  • Класс: Bitrix\Crm\Order\OrderCreator
  • Вызов: OrderCreator::build
public function build(?int $orderId = null): ?Order
{
	$settings = new SettingsContainer([
		'createDefaultPaymentIfNeed' => false,
		'createDefaultShipmentIfNeed' => false,
		'clearReservesIfEmpty' => false,
		'createUserIfNeed' => SettingsContainer::SET_ANONYMOUS_USER,
	]);
	$builder = new OrderBuilderCrm($settings);

	$entityFields = $this->getEntityFields();
	$userId = (int)($entityFields['ASSIGNED_BY_ID'] ?? 0);
	$currencyId = (string)($entityFields['CURRENCY_ID'] ?? '');

	try
	{
		$fields = [
			'ID' => $orderId,
			'SITE_ID' => Context::getCurrent()->getSite(),
			'USER_ID' => $userId,
			'RESPONSIBLE_ID' => $userId,
			'OWNER_ID' => $this->ownerId,
			'OWNER_TYPE_ID' => $this->ownerTypeId,
		];

		if (!empty($currencyId))
		{
			$fields['CURRENCY'] = $currencyId;
		}

		// if order exist - don't changes part of the fields.
		if ($orderId)
		{
			$fields['CLIENT'] = ClientInfo::createFromOwner(CCrmOwnerType::Order, $orderId)->toArray(false);

			unset(
				$fields['USER_ID'],
				$fields['CURRENCY']
			);
		}
		else
		{
			$fields['TRADING_PLATFORM'] = $this->getDealTradingPlatformId();
			$fields['CLIENT'] = ClientInfo::createFromOwner($this->ownerTypeId, $this->ownerId)->toArray(false);
		}

		$builder->build($fields);

		/**
		 * @var Order $order
		 */
		$order = $builder->getOrder();
		if ($order)
		{
			$order->getContactCompanyCollection()->disableAutoCreationMode();
		}

		if (
			$orderId > 0
			&& !empty($currencyId)
			&& $currencyId !== $order->getCurrency()
		)
		{
			$order->changeCurrency($currencyId);
		}

		return $order;
	}
	catch (BuildingException $e)
	{
		// pass
	}

	return null;
}