• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicaterequisitecriterion.php
  • Класс: Bitrix\Crm\Integrity\DuplicateRequisiteCriterion
  • Вызов: DuplicateRequisiteCriterion::prepareSortParams
static function prepareSortParams($entityTypeID, array $entityIDs, $countryId = 0, $fieldName = '')
{
	if(empty($entityIDs))
	{
		return array();
	}

	if(!is_int($countryId))
	{
		$countryId = 0;
	}

	if(!is_string($fieldName))
	{
		$fieldName = '';
	}

	$query = new Main\Entity\Query(DuplicateRequisiteMatchCodeTable::getEntity());

	$query->addSelect('ENTITY_ID');
	$query->addSelect('RQ_COUNTRY_ID');
	$query->addSelect('RQ_FIELD_NAME');
	$query->addSelect('VALUE');

	$subQuery = new Main\Entity\Query(DuplicateRequisiteMatchCodeTable::getEntity());
	$subQuery->registerRuntimeField('', new Main\Entity\ExpressionField('MIN_ID', 'MIN(ID)'));
	$subQuery->addSelect('MIN_ID');

	$subQuery->addFilter('=ENTITY_TYPE_ID', $entityTypeID);
	$subQuery->addFilter('@ENTITY_ID', $entityIDs);

	if($countryId > 0)
	{
		$subQuery->addFilter('=RQ_COUNTRY_ID', $countryId);
	}

	if($fieldName !== '')
	{
		$subQuery->addFilter('=RQ_FIELD_NAME', $fieldName);
	}

	$subQuery->addGroup('ENTITY_ID');
	$subQuery->addGroup('RQ_COUNTRY_ID');
	$subQuery->addGroup('RQ_FIELD_NAME');

	$query->registerRuntimeField('',
		new Main\Entity\ReferenceField('M',
			Main\Entity\Base::getInstanceByQuery($subQuery),
			array('=this.ID' => 'ref.MIN_ID'),
			array('join_type' => 'INNER')
		)
	);

	$result = array();

	$dbResult = $query->exec();
	while($fields = $dbResult->fetch())
	{
		$entityID = intval($fields['ENTITY_ID']);
		if(!isset($result[$entityID]))
		{
			$result[$entityID] = array();
		}

		$rqCountryId = isset($fields['RQ_COUNTRY_ID']) ? (int)$fields['RQ_COUNTRY_ID'] : 0;
		$rqFieldName = isset($fields['RQ_FIELD_NAME']) ? $fields['RQ_FIELD_NAME'] : '';
		$value = isset($fields['VALUE']) ? $fields['VALUE'] : '';
		$scope = EntityRequisite::formatDuplicateCriterionScope($rqCountryId);
		$result[$entityID][$rqFieldName][$scope] = $value;
	}
	return $result;
}