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