• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/businessvalue.php
  • Класс: BitrixSaleHelpersAdminBusinessValueControl
  • Вызов: BusinessValueControl::getPersonGroupCodes
static function getPersonGroupCodes(array $consumers, array $filter)
{
	$personGroupCodes = [];

	$consumerCodePersonMapping = BusinessValue::getConsumerCodePersonMapping();

	$consumer = $consumers[$filter['CONSUMER_KEY']];

	if (
		(empty($filter['PROVIDER_KEY']) && empty($filter['CODE_KEY']))
		|| !empty($filter['CONSUMER_KEY'])
	)
	{
		$consumers = [
			$filter['CONSUMER_KEY'] => $consumer,
		];
	}

	foreach (self::$personTypes as $personTypeId => $personType)
	{
		foreach ($consumers as $consumerKey => $consumer)
		{
			if (is_array($consumer) && isset($consumer['CODES']) && is_array($consumer['CODES']))
			{
				$consumerCodes = $consumer['CODES'];
				foreach ($consumerCodes as $codeKey => $code)
				{
					$needCodeKey = !isset($filter['CODE_KEY']) || (string)$filter['CODE_KEY'] === (string)$codeKey;
					$needPersonTypeId = !isset($code['PERSON_TYPE_ID']) || (int)$code['PERSON_TYPE_ID'] === (int)$personTypeId;
					$needDomains =
						!isset($code['DOMAINS'])
						|| !is_array($code['DOMAINS'])
						|| in_array($personType['DOMAIN'], $code['DOMAINS'], true)
					;

					if (
						is_array($code)
						&& $needCodeKey
						&& $needPersonTypeId
						&& $needDomains
					)
					{
						$code['CONSUMER_KEY'] = $consumerKey;

						if (!empty($filter['PROVIDER_KEY']))
						{
							if (isset($consumerCodePersonMapping[$consumerKey][$codeKey][$personTypeId]))
							{
								$mapping = $consumerCodePersonMapping[$consumerKey][$codeKey][$personTypeId];

								if ($mapping['PROVIDER_KEY'  ] == $filter['PROVIDER_KEY'  ] &&
									$mapping['PROVIDER_VALUE'] == $filter['PROVIDER_VALUE'])
								{
									$personGroupCodes[$personTypeId][$consumer['NAME'] ?? $consumerKey][$codeKey] = $code; // CONSUMER
								}
							}
						}
						elseif (!empty($filter['CODE_KEY']))
						{
							$personGroupCodes[$personTypeId][$consumer['NAME'] ?? $consumerKey][$codeKey] = $code; // CONSUMER
						}
						else
						{
							$codeGroup = $code['GROUP'] ?? '';
							$personGroupCodes[$personTypeId][$codeGroup][$codeKey] = $code; // GROUP
						}
					}
				}
			}
		}

		if (isset($personGroupCodes[$personTypeId]) && empty($filter['PROVIDER_KEY']) && empty($filter['CODE_KEY'])) // GROUP
		{
			self::sortRenameGroups($personGroupCodes[$personTypeId], self::$groups);
		}
	}

	return $personGroupCodes;
}