• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/controller/action/entity/saveorderaction.php
  • Класс: BitrixSaleControllerActionEntitySaveOrderAction
  • Вызов: SaveOrderAction::setUser
private function setUser(SaleOrder $order, array $fields): SaleResult
{
	$result = new SaleResult();

	$isNewUser = false;

	if ((int)$fields['USER_ID'] > 0)
	{
		$userId = (int)$fields['USER_ID'];

		if ($this->isLandingShop($order) && MainLoader::includeModule('crm'))
		{
			CrmServiceSaleOrderBuyerService::getInstance()->attachUserToBuyers($userId);
		}
	}
	else
	{
		$properties = [];

		/** @var SalePropertyValue $property */
		foreach ($order->getPropertyCollection() as $property)
		{
			$properties[$property->getPropertyId()] = $property->getValue();
		}

		$userProps = SaleProperty::getMeaningfulValues($order->getPersonTypeId(), $properties);

		$email = $userProps['EMAIL'] ?? '';
		$phone = $userProps['PHONE'] ?? '';

		$userId = $this->searchExistingUser($email, $phone);
		if (!$userId)
		{
			$registerNewUserResult = $this->registerNewUser($order, $userProps);
			if ($registerNewUserResult->isSuccess())
			{
				$registerNewUserData = $registerNewUserResult->getData();
				$userId = $registerNewUserData['userId'];

				$isNewUser = true;
			}
			else
			{
				$result->addErrors($registerNewUserResult->getErrors());
				return $result;
			}
		}
	}

	if (!$userId)
	{
		$result->addError(new MainError('User not found'));
		return $result;
	}

	$order->setFieldNoDemand('USER_ID', $userId);

	$result->setData([
		'ID' => $userId,
		'IS_NEW' => $isNewUser,
	]);

	return $result;
}