• Модуль: salescenter
  • Путь к файлу: ~/bitrix/modules/salescenter/lib/integration/crmmanager.php
  • Класс: BitrixSalesCenterIntegrationCrmManager
  • Вызов: CrmManager::getClientAddressList
public function getClientAddressList(int $contactId)
{
	if (!Loader::includeModule('crm'))
	{
		return [];
	}

	$entityTypeId = CCrmOwnerType::Contact;
	$requisite = EntityRequisite::getSingleInstance()->getList([
		'select' => ['ID'],
		'filter' => [
			'=ENTITY_TYPE_ID' => $entityTypeId,
			'=ENTITY_ID' => $contactId,
		],
	])->fetch();

	if (!$requisite)
	{
		return [];
	}

	$result = [];

	$addresses = AddressTable::getList([
		'filter' => [
			'ENTITY_ID' => (int)$requisite['ID'],
			'ENTITY_TYPE_ID' => CCrmOwnerType::Requisite,
			'>LOC_ADDR_ID' => 0,
		],
	])->fetchAll();

	$defaultAddressTypeByCategory =
		method_exists(EntityAddressType::class, 'getDefaultIdByEntityId')
		? EntityAddressType::getDefaultIdByEntityId($entityTypeId, $contactId)
		: EntityAddressType::Undefined
	;
	$defaultAddressTypeId =
		EntityAddressType::isDefined($defaultAddressTypeByCategory)
			? $defaultAddressTypeByCategory
			: EntityAddressType::getDefaultIdByZone(EntityAddress::getZoneId())
	;

	$sortingMap = [
		EntityAddressType::Delivery => 10,
		$defaultAddressTypeId => 20,
	];

	foreach ($addresses as $address)
	{
		$result[$address['TYPE_ID']] = [
			'VALUE' => (int)$address['LOC_ADDR_ID'],
			'SORT' => $sortingMap[$address['TYPE_ID']] ?? 100,
		];
	}

	uasort($result, function ($a, $b) {
		return $a['SORT'] < $b['SORT'] ? -1 : 1;
	});

	return array_column($result, 'VALUE');
}