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