• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/component/entitydetails/basecomponent.php
  • Класс: Bitrix\Crm\Component\EntityDetails\BaseComponent
  • Вызов: BaseComponent::createClient
static function createClient(int $entityTypeID, array $entityData, array $options = []): Result
{
	$result = new Result();
	$resultData = [];

	Container::getInstance()->getLocalization()->loadMessages();
	$currentUserId = null;
	$currentUserPermissions = $options['userPermissions'] ?? null;
	if ($currentUserPermissions instanceof \CCrmPerms)
	{
		$currentUserId = $currentUserPermissions->GetUserID();
	}
	$userPermissions = Container::getInstance()->getUserPermissions($currentUserId);

	$checkPermissions = $options['checkPermissions'] ?? true;

	$title = trim($entityData['title'] ?? '');
	if (empty($title))
	{
		return $result->addError(new Main\Error('field title is empty'));
	}
	$isMyCompany = isset($entityData['isMyCompany']) && $entityData['isMyCompany'] === true;
	if (
		$checkPermissions
		&& (
			(
				!$isMyCompany
				&& !$userPermissions->checkAddPermissions($entityTypeID)
			)
			|| (
				$isMyCompany
				&& !$userPermissions->getMyCompanyPermissions()->canAdd()
			)
		)
	)
	{
		return $result->addError(new Main\Error(Main\Localization\Loc::getMessage('CRM_COMMON_ERROR_ACCESS_DENIED')));
	}

	if ($entityTypeID === \CCrmOwnerType::Company)
	{
		$fields = [
			'TITLE' => $title,
			'CATEGORY_ID' => isset($entityData['categoryId']) ? (int)$entityData['categoryId'] : 0,
		];
		$fields['OPENED'] = \Bitrix\Crm\Settings\CompanySettings::getCurrent()->getOpenedFlag() ? 'Y' : 'N';
		if ($isMyCompany)
		{
			$fields['IS_MY_COMPANY'] = 'Y';
		}
	}
	elseif($entityTypeID === \CCrmOwnerType::Contact)
	{
		$fields = [];
		if($title === \CCrmContact::GetDefaultName())
		{
			$fields['NAME'] = $title;
		}
		else
		{
			Crm\Format\PersonNameFormatter::tryParseName(
				$title,
				Crm\Format\PersonNameFormatter::getFormatID(),
				$fields
			);
		}
		$fields['CATEGORY_ID'] = isset($entityData['categoryId']) ? (int)$entityData['categoryId'] : 0;
		$fields['OPENED'] = \Bitrix\Crm\Settings\ContactSettings::getCurrent()->getOpenedFlag() ? 'Y' : 'N';
	}
	else
	{
		$entityTypeName = \CCrmOwnerType::ResolveName($entityTypeID);
		throw new Main\NotSupportedException("Entity type: '{$entityTypeName}' is not supported in current context");
	}

	$multifieldData = (isset($entityData['multifields']) && is_array($entityData['multifields']))
		? $entityData['multifields']
		: []
	;

	if (!empty($multifieldData))
	{
		$multifields = BaseComponent::prepareMultifieldsForSave($entityTypeID, 0, $multifieldData);
		if (!empty($multifields))
		{
			$fields['FM'] = $multifields;
		}
	}

	$entity = Crm\Entity\EntityManager::resolveByTypeID($entityTypeID);
	if (!$entity)
	{
		$entityTypeName = \CCrmOwnerType::ResolveName($entityTypeID);
		throw new Main\NotSupportedException("Entity type: '{$entityTypeName}' is not supported in current context");
	}
	$entityID = $entity->create($fields);
	if ($entityID > 0)
	{
		$resultData['id'] = (int)$entityID;
		$requisites = (isset($entityData['requisites']) && is_array($entityData['requisites']))
			? $entityData['requisites']
			: []
		;
		if (!empty($requisites))
		{
			$entityRequisites = [];
			$entityBankDetails = [];
			EntityRequisite::intertalizeFormData(
				$requisites,
				$entityTypeID,
				$entityRequisites,
				$entityBankDetails
			);
			if (!empty($entityRequisites) || !empty($entityBankDetails))
			{
				$saveRequisitesResult = EntityRequisite::saveFormData(
					$entityTypeID,
					$entityID,
					$entityRequisites,
					$entityBankDetails
				);
				if ($saveRequisitesResult->isSuccess())
				{
					$resultData = array_merge($resultData, $saveRequisitesResult->getData());
				}
				// error from requisites processing are not passed further
			}
		}

		if (isset($options['startWorkFlows']) && $options['startWorkFlows'])
		{
			\CCrmBizProcHelper::AutoStartWorkflows(
				$entityTypeID,
				$entityID,
				\CCrmBizProcEventType::Create,
				$arErrors
			);
		}
	}

	return $result->setData($resultData);
}