- Модуль: 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']
);
}
}
}