• Модуль: crmmobile
  • Путь к файлу: ~/bitrix/modules/crmmobile/lib/Controller/DocumentGenerator/Document.php
  • Класс: BitrixCrmMobileControllerDocumentGeneratorDocument
  • Вызов: Document::getAction
public function getAction(BitrixDocumentGeneratorDocument $document)
{
	$serviceContainer = Container::getInstance();
	$router = $serviceContainer->getRouter();
	$permissions = $serviceContainer->getUserPermissions();

	/** @var array|null $result */
	$result = $this->proxyAction('getAction', [ $document ]);

	if (is_array($result))
	{
		$provider = $document->getProvider();
		// todo Remove code duplication with bitrix:crm.document.view component
		if ($provider instanceof CrmEntityDataProvider)
		{
			$result['entityId'] = (int)$provider->getSource();
			$result['entityTypeId'] = (int)$provider->getCrmOwnerType();
			$result['entityDetailUrl'] = $router->getItemDetailUrl($result['entityTypeId'], $result['entityId']);

			$serviceContainer->getLocalization()->loadMessages();
			$myCompanyProvider = $provider->getMyCompanyProvider();
			$stringOrNull = fn($value) => isset($value) ? (string)$value : null;

			if ($myCompanyProvider)
			{
				[$requisiteData, ] = $myCompanyProvider->getClientRequisitesAndBankDetail();

				$myCompanyId = BitrixDocumentGeneratorDataProviderManager::getInstance()->getValueFromList($provider->getMyCompanyId());
				$link = null;
				if (is_numeric($myCompanyId) && (int)$myCompanyId > 0)
				{
					$link = $router->getItemDetailUrl(CCrmOwnerType::Company, (int)$myCompanyId);
				}

				$result['myCompanyRequisites'] = [
					'title' => FormatRequisite::formatOrganizationName($requisiteData)
						?? $stringOrNull($myCompanyProvider->getValue('TITLE'))
						?: Loc::getMessage('CRM_COMMON_EMPTY_VALUE')
					,
					'link' => $link,
					'subTitle' => FormatRequisite::formatShortRequisiteString($requisiteData)
						?? Loc::getMessage('CRM_COMMON_EMPTY_VALUE')
					,
					'entityTypeId' => CCrmOwnerType::Company,
					'entityId' => (int)$myCompanyId,
					'entityName' => $myCompanyProvider->getValue('TITLE'),
				];
			}
			[$clientRequisiteData, ] = $provider->getClientRequisitesAndBankDetail();
			$companyProvider = $provider->getValue('COMPANY');
			if ($companyProvider instanceof DataProviderCompany)
			{
				$result['clientRequisites'] = [
					'title' => FormatRequisite::formatOrganizationName($clientRequisiteData)
						?? $stringOrNull($companyProvider->getValue('NAME'))
						?: Loc::getMessage('CRM_COMMON_EMPTY_VALUE')
					,
					'link' => $router->getItemDetailUrl(CCrmOwnerType::Company, (int)$companyProvider->getSource()),
					'subTitle' => FormatRequisite::formatShortRequisiteString($clientRequisiteData) ?? Loc::getMessage('CRM_COMMON_EMPTY_VALUE'),
					'entityTypeId' => CCrmOwnerType::Company,
					'entityId' => (int)$companyProvider->getSource(),
					'entityName' => $companyProvider->getValue('TITLE'),
				];
			}
			else
			{
				$contactProvider = $provider->getValue('CONTACT');
				if ($contactProvider instanceof DataProviderContact)
				{
					$result['clientRequisites'] = [
						'title' => $clientRequisiteData['RQ_COMPANY_NAME']
							?? $stringOrNull($contactProvider->getValue('FORMATTED_NAME'))
							?: Loc::getMessage('CRM_COMMON_EMPTY_VALUE')
						,
						'link' => $router->getItemDetailUrl(CCrmOwnerType::Contact, (int)$contactProvider->getSource()),
						'subTitle' => FormatRequisite::formatShortRequisiteString($clientRequisiteData),
						'entityTypeId' => CCrmOwnerType::Contact,
						'entityId' => (int)$contactProvider->getSource(),
						'entityName' => $contactProvider->getValue('FORMATTED_NAME'),
					];
				}
			}

			$result['isSigningEnabled'] =
				($provider instanceof DataProviderDeal)
				&& $permissions->checkAddPermissions(CCrmOwnerType::SmartDocument)
				&& BitrixCrmSettingsCrm::isDocumentSigningEnabled()
				&& BitrixSignConfigStorage::instance()->isAvailable()
			;
			if ($result['isSigningEnabled'])
			{
				$signIntegration = ServiceLocator::getInstance()->get('crm.integration.sign');
				$result['isSigningEnabledInCurrentTariff'] = $signIntegration->isEnabledInCurrentTariff();
				$result['signingInfoHelperSliderCode'] = 'limit_crm_sign_integration';
			}

			if ($result['entityId'] > 0 && $document->FILE_ID > 0)
			{
				$channelSelectorComponentParams = [
					'id' => 'document-channel-selector',
					'entityTypeId' => $result['entityTypeId'],
					'entityId' => $result['entityId'],
					'body' => $document->getTitle(),
					'configureContext' => 'crm.document.view',
					'link' => $document->getPublicUrl(true),
					'isLinkObtainable' => true,
					'isConfigurable' => true,
					'skipTemplate' => true,
				];
				$emailFileDto = null;
				if ($this->isUsingDiskAsDefaultStorage())
				{
					$emailDiskFileId = $document->getEmailDiskFile(true);
					if ($emailDiskFileId > 0)
					{
						$diskFile = BitrixDiskFile::getById($emailDiskFileId);
						$emailFileDto = BitrixMobileUIFile::load($diskFile->getFileId());
						$channelSelectorComponentParams['storageTypeId'] = BitrixCrmIntegrationStorageType::Disk;
						$channelSelectorComponentParams['files'] = [$emailDiskFileId];
					}
				}
				global $APPLICATION;
				$result['channelSelector'] = $APPLICATION->IncludeComponent(
					'bitrix:crm.channel.selector',
					'',
					$channelSelectorComponentParams,
				);
				if ($result['channelSelector'] && $emailFileDto)
				{
					$result['channelSelector']['emailAttachment'] = $emailFileDto;
				}
			}
		}
	}

	return $result;
}