• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/catalog/contractor/provider.php
  • Класс: Bitrix\Crm\Integration\Catalog\Contractor\Provider
  • Вызов: Provider::getEditorEntityData
static function getEditorEntityData(int $documentId): array
{
	$companyId = 0;
	$contactBindings = [];

	if ($documentId > 0)
	{
		$storeDocumentContractors = static::getTableName()::query()
			->setSelect(['ENTITY_TYPE_ID', 'ENTITY_ID'])
			->where(static::getDocumentPrimaryField(), $documentId)
			->exec()
		;

		while ($storeDocumentContractor = $storeDocumentContractors->fetch())
		{
			if ((int)$storeDocumentContractor['ENTITY_TYPE_ID'] === CCrmOwnerType::Company)
			{
				$companyId = (int)$storeDocumentContractor['ENTITY_ID'];
			}
			if ((int)$storeDocumentContractor['ENTITY_TYPE_ID'] === CCrmOwnerType::Contact)
			{
				$contactBindings[] = [
					'CONTACT_ID' => (int)$storeDocumentContractor['ENTITY_ID'],
				];
			}
		}
	}

	$clientInfo = [];
	if ($companyId > 0)
	{
		$isEntityReadPermitted = \CCrmCompany::CheckReadPermission($companyId, self::getPermissions());
		$companyInfo = \CCrmEntitySelectorHelper::PrepareEntityInfo(
			CCrmOwnerType::CompanyName,
			$companyId,
			[
				'ENTITY_EDITOR_FORMAT' => true,
				'IS_HIDDEN' => !$isEntityReadPermitted,
				'USER_PERMISSIONS' => self::getPermissions(),
				'REQUIRE_REQUISITE_DATA' => true,
				'REQUIRE_EDIT_REQUISITE_DATA' => true,
				'REQUIRE_MULTIFIELDS' => true,
				'NORMALIZE_MULTIFIELDS' => true,
				'NAME_TEMPLATE' => PersonNameFormatter::getFormat(),
			]
		);

		$clientInfo['COMPANY_DATA'] = [$companyInfo];
	}

	$contactIDs = EntityBinding::prepareEntityIDs(CCrmOwnerType::Contact, $contactBindings);
	$clientInfo['CONTACT_DATA'] = [];
	$iteration= 0;

	foreach($contactIDs as $contactID)
	{
		$isEntityReadPermitted = \CCrmContact::CheckReadPermission($contactID, self::getPermissions());
		$clientInfo['CONTACT_DATA'][] = \CCrmEntitySelectorHelper::PrepareEntityInfo(
			CCrmOwnerType::ContactName,
			$contactID,
			[
				'ENTITY_EDITOR_FORMAT' => true,
				'IS_HIDDEN' => !$isEntityReadPermitted,
				'USER_PERMISSIONS' => self::getPermissions(),
				'REQUIRE_REQUISITE_DATA' => true,
				'REQUIRE_EDIT_REQUISITE_DATA' => ($iteration === 0),
				'REQUIRE_MULTIFIELDS' => true,
				'NORMALIZE_MULTIFIELDS' => true,
				'REQUIRE_BINDINGS' => true,
				'NAME_TEMPLATE' => PersonNameFormatter::getFormat(),
			]
		);
		$iteration++;
	}

	$result = [
		'CLIENT_INFO' => $clientInfo,
		'LAST_COMPANY_INFOS' => SearchAction::prepareSearchResultsJson(
			Entity::getRecentlyUsedItems(
				'crm.store.document.details',
				'company',
				[
					'EXPAND_ENTITY_TYPE_ID' => CCrmOwnerType::Company,
					'EXPAND_CATEGORY_ID' => self::getCategoryIdByEntityType(CCrmOwnerType::Company),
				]
			)
		),
		'LAST_CONTACT_INFOS' => SearchAction::prepareSearchResultsJson(
			Entity::getRecentlyUsedItems(
				'crm.store.document.details',
				'contact',
				[
					'EXPAND_ENTITY_TYPE_ID' => CCrmOwnerType::Contact,
					'EXPAND_CATEGORY_ID' => self::getCategoryIdByEntityType(CCrmOwnerType::Contact),
				]
			)
		),
	];

	\CCrmComponentHelper::prepareMultifieldData(
		CCrmOwnerType::Company,
		[$companyId],
		[
			'PHONE',
			'EMAIL',
			'IM',
		],
		$result
	);

	\CCrmComponentHelper::prepareMultifieldData(
		CCrmOwnerType::Contact,
		$contactIDs,
		[
			'PHONE',
			'EMAIL',
			'IM',
		],
		$result
	);

	return $result;
}