• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/businessvalue.php
  • Класс: BitrixSaleBusinessValue
  • Вызов: BusinessValue::getPersonTypes
static function getPersonTypes($all = false, array $resetAllPersonTypes = null)
{
	static $allPersonTypes = array(), $personTypes = array();

	if ($resetAllPersonTypes !== null)
	{
		$allPersonTypes = $resetAllPersonTypes;
		$personTypes = array_filter(
			$allPersonTypes,
			function ($i)
			{
				return $i['DOMAIN'];
			}
		);
	}
	elseif (!$allPersonTypes)
	{
		$dbRes = InternalsPersonTypeTable::getList([
			'select'  => [
				'ID', 'NAME', 'LID', 'ACTIVE', 'ENTITY_REGISTRY_TYPE',
				'DOMAIN' => 'BIZVAL.DOMAIN',
				'PT_SITE' => 'PERSON_TYPE_SITE.SITE_ID'
			],
			'order'   => ['SORT', 'NAME'],
			'runtime' => [
				new BitrixMainEntityReferenceField(
					'BIZVAL',
					'BitrixSaleInternalsBusinessValuePersonDomainTable',
					['=this.ID' => 'ref.PERSON_TYPE_ID'],
					['join_type' => 'LEFT']
				),
			],
		]);

		$result = array();
		while ($row = $dbRes->fetch())
		{
			if (!isset($result[$row['ID']]))
			{
				$row['PT_SITE'] = array($row['PT_SITE']);
				$result[$row['ID']] = $row;
			}
			else
			{
				$result[$row['ID']]['PT_SITE'][] = $row['PT_SITE'];
			}
		}

		foreach ($result as $item)
		{
			$item['TITLE'] = $item['NAME'].' ('.implode(', ' , $item['PT_SITE']).')';

			$allPersonTypes[$item['ID']] = $item;

			if ($item['DOMAIN'])
				$personTypes[$item['ID']] = $item;
		}
	}

	return $all ? $allPersonTypes : $personTypes;
}