• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/documentgenerator/dataprovider/crmentitydataprovider.php
  • Класс: Bitrix\Crm\Integration\DocumentGenerator\DataProvider\CrmEntityDataProvider
  • Вызов: CrmEntityDataProvider::extractRequisiteAndBankDetailDataFromProvider
protected function extractRequisiteAndBankDetailDataFromProvider(
	CrmEntityDataProvider $provider,
	string $prefix = ''
): array
{
	$requisiteData = [];
	$bankDetailData = [];
	$optionValues = $this->getOptions()['VALUES'] ?? [];
	$dataProviderManager = DataProviderManager::getInstance();
	$requisiteId = $dataProviderManager->getDataProviderValue($provider, 'REQUISITE');
	if (is_array($requisiteId))
	{
		$requisiteId = $dataProviderManager->getValueFromList($requisiteId);
	}
	if (!is_scalar($requisiteId) || (int)$requisiteId <= 0)
	{
		$requisiteId = null;
	}
	$requisite = null;
	$requisiteFieldDescription = $provider->getFields()['REQUISITE'] ?? null;
	if (is_array($requisiteFieldDescription))
	{
		$requisite = $dataProviderManager->createDataProvider(
			$requisiteFieldDescription,
			$requisiteId,
			$provider
		);
	}
	if ($requisite)
	{
		$requisiteData = $dataProviderManager->getArray($requisite, [
			'rawValue' => true,
		]);
	}
	else
	{
		$requisite = new Requisite(0);
	}
	foreach ($requisite->getFields() as $placeholder => $fieldDescription)
	{
		$templatePlaceholder = $dataProviderManager->valueToPlaceholder(
			($prefix ? $prefix . '.' : '')
			. 'REQUISITE'
			. '.' . $placeholder
		);
		if (isset($optionValues[$templatePlaceholder]))
		{
			$requisiteData[$placeholder] = $optionValues[$templatePlaceholder];
			continue;
		}
		if (($fieldDescription['TYPE'] ?? '') === static::FIELD_TYPE_NAME)
		{
			$requisiteData[$placeholder] = $requisite->getRawNameValue($placeholder);
		}
	}

	$bankDetailId = $dataProviderManager->getDataProviderValue($provider, 'BANK_DETAIL');
	if (is_array($bankDetailId))
	{
		$bankDetailId = $dataProviderManager->getValueFromList($bankDetailId);
	}
	if (!is_scalar($bankDetailId) || (int)$bankDetailId <= 0)
	{
		$bankDetailId = null;
	}
	$bankDetail = null;
	$bankDetailFieldDescription = $provider->getFields()['BANK_DETAIL'] ?? null;
	if (is_array($bankDetailFieldDescription))
	{
		$bankDetail = $dataProviderManager->createDataProvider(
			$provider->getFields()['BANK_DETAIL'],
			$bankDetailId,
			$provider
		);
	}
	if ($bankDetail)
	{
		$bankDetailData = $dataProviderManager->getArray($bankDetail, [
			'rawValue' => true,
		]);
	}
	else
	{
		$bankDetail = new BankDetail(0);
	}
	foreach ($bankDetail->getFields() as $placeholder => $fieldDescription)
	{
		$templatePlaceholder = $dataProviderManager->valueToPlaceholder(
			($prefix ? $prefix . '.' : '')
			. 'BANK_DETAIL'
			. '.' . $placeholder
		);
		if (isset($optionValues[$templatePlaceholder]))
		{
			$bankDetailData[$placeholder] = $optionValues[$templatePlaceholder];
		}
	}

	return [
		$requisiteData,
		$bankDetailData,
	];
}