• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/webform/requisite.php
  • Класс: Bitrix\Crm\WebForm\Requisite
  • Вызов: Requisite::load
public function load(int $entityTypeId, int $entityId, ?int $requisitePresetId = null): Result
{
	$result = new Result();

	$splitMode = $this->splitAccountFields;
	$this->splitAccountFields = false;
	$preset =
		$requisitePresetId !== null && $requisitePresetId >= 0
			? $this->getPreset($requisitePresetId)
			: $this->getDefaultPreset($entityTypeId)
	;
	$this->splitAccountFields = $splitMode;

	if (!$preset)
	{
		$result->addError(new Error("Default preset not found for entity type `{$entityTypeId}`."));
		return $result;
	}

	$values = [];
	$keys = array_map(
		function (array $field): string
		{
			return $field['name'];
		},
		array_filter(
			$preset['fields'],
			function (array $field): bool
			{
				return !in_array($field['type'], ['address', 'account']);
			}
		)
	);

	$keys[] = 'ID';
	$requisiteValues = (EntityRequisite::getSingleInstance()->getList([
		'select' => $keys,
		'filter' => [
			'=ENTITY_TYPE_ID' => $entityTypeId,
			'=ENTITY_ID' => $entityId,
			'=PRESET_ID' => $preset['id'],
		],
		'limit' => 1,
	])->fetch() ?: []);

	foreach ($requisiteValues as $fieldName => $value)
	{
		if (mb_strpos($fieldName, 'RQ_') !== 0)
		{
			$requisiteValues['RQ_'. $fieldName] = $value;
			unset($requisiteValues[$fieldName]);
		}
	}
	$values = $values + $requisiteValues;

	if (!$values)
	{
		return $result;
	}

	$id = (int) ($values['ID'] ?: $values['RQ_ID']);
	unset($values['ID']);
	unset($values['RQ_ID']);

	foreach ($this->getAddressTypes($preset['countryId']) as $address)
	{
		$keys = array_map(
			function (array $field)
			{
				return $field['name'];
			},
			$address['fields']
		);

		//$address['ANCHOR_TYPE_ID'] = $entityTypeId;
		//$address['ANCHOR_ID'] = $entityId;
		$row = (new EntityAddress())->getList([
			'filter' => [
				'=TYPE_ID' => $address['id'],
				'=ANCHOR_TYPE_ID' => $entityTypeId,
				'=ANCHOR_ID' => $entityId,
			],
			'order' => [
				'ADDRESS_1' => 'DESC',
				'LOC_ADDR_ID' => 'DESC',
			],
		])->fetch();

		$val = [];
		foreach ($keys as $key)
		{
			$v = $row[$key] ?? '';
			if ($v === null || $v === '')
			{
				continue;
			}

			if ($key === 'LOC_ADDR_ID' && !$v)
			{
				continue;
			}

			$val[$key] = $v;
		}

		if ($val)
		{
			$values[$address['name']] = $val;
		}
	}

	$keys = array_map(
		function (array $item)
		{
			return $item['name'];
		},
		$this->getBankingFields($preset['countryId'])
	);
	$bankFieldsValues = (EntityBankDetail::getSingleInstance()->getList([
		'select' => $keys,
		'filter' => [
			'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
			'=ENTITY_ID' => $id,
		],
		'order' => ['ID' => 'DESC'],
		'limit' => 1,
	])->fetch() ?: []);
	$values = $values + $bankFieldsValues;

	foreach ($values as $key => $value)
	{
		if ($value === '' || $value === null)
		{
			unset($values[$key]);
		}
	}

	$values['requisiteId'] = $id;
	$values['presetId'] = (int)$preset['id'];

	$result->setData($values);
	return $result;
}