• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/entitybankdetail.php
  • Класс: Bitrix\Crm\EntityBankDetail
  • Вызов: EntityBankDetail::prepareEntityInfoBatch
static function prepareEntityInfoBatch($entityTypeId, &$entityInfos, $scope, $typeName, $options = null)
{
	if (!($entityTypeId === CCrmOwnerType::Company || $entityTypeId === CCrmOwnerType::Contact))
	{
		return;
	}

	if(empty($entityInfos))
	{
		return;
	}

	$countryId = self::getCountryIdByDuplicateCriterionScope($scope);
	if ($countryId <= 0)
	{
		return;
	}

	$connection = Main\Application::getConnection();
	$sqlHelper = $connection->getSqlHelper();
	$typeNameSql = $sqlHelper->forSql($typeName, 32);
	$rqEntityTypeId = CCrmOwnerType::Requisite;

	$Ids = array_keys($entityInfos);
	$IdsSql = implode(',', $Ids);
	$sql = "SELECT B2.ENTITY_ID, B1.{$typeNameSql}, B2.CNT".PHP_EOL.
		"FROM b_crm_bank_detail B1".PHP_EOL.
		"  INNER JOIN (".PHP_EOL.
		"    SELECT R0.ENTITY_ID AS ENTITY_ID, MIN(B0.ID) AS MIN_ID, COUNT(1) AS CNT".PHP_EOL.
		"    FROM b_crm_bank_detail B0".PHP_EOL.
		"      INNER JOIN b_crm_requisite R0 ON B0.ENTITY_TYPE_ID = {$rqEntityTypeId} AND B0.ENTITY_ID = R0.ID".PHP_EOL.
		"      INNER JOIN b_crm_preset P0 ON R0.PRESET_ID = P0.ID AND P0.COUNTRY_ID = {$countryId}".PHP_EOL.
		"    WHERE R0.ENTITY_ID IN ({$IdsSql}) AND R0.ENTITY_TYPE_ID = {$entityTypeId}".PHP_EOL.
		"      AND B0.{$typeNameSql} IS NOT NULL AND B0.{$typeNameSql} != ''".PHP_EOL.
		"    GROUP BY R0.ENTITY_TYPE_ID, R0.ENTITY_ID".PHP_EOL.
		"  ) B2 ON B1.ID = B2.MIN_ID".PHP_EOL;
	$result = $connection->query($sql);
	while($fields = $result->fetch())
	{
		$id = (int)$fields['ENTITY_ID'];
		if(isset($entityInfos[$id]))
		{
			$entityInfos[$id][$typeName] = array(
				'FIRST_VALUE' => $fields[$typeName],
				'TOTAL' => (int)$fields['CNT']
			);
		}
	}
}