- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/persondedupedatasource.php
- Класс: Bitrix\Crm\Integrity\PersonDedupeDataSource
- Вызов: PersonDedupeDataSource::innerCalculateEntityCount
protected function innerCalculateEntityCount(DuplicateCriterion $criterion, array $options = null)
{
$entityTypeID = $this->getEntityTypeID();
$enablePermissionCheck = $this->isPermissionCheckEnabled();
$userID = $this->getUserID();
$query = new Main\Entity\Query(DuplicatePersonMatchCodeTable::getEntity());
$query->addSelect('QTY');
$query->registerRuntimeField('', new Main\Entity\ExpressionField('QTY', 'COUNT(*)'));
$query->addFilter('=ENTITY_TYPE_ID', $entityTypeID);
if($enablePermissionCheck)
{
$permissionSql = $this->preparePermissionSql();
if($permissionSql === false)
{
//Access denied;
return 0;
}
if(is_string($permissionSql) && $permissionSql !== '')
{
$query->addFilter('@ENTITY_ID', new Main\DB\SqlExpression($permissionSql));
}
}
$matches = $criterion->getMatches();
$lastName = isset($matches['LAST_NAME']) ? $matches['LAST_NAME'] : '';
if($lastName === '')
{
throw new Main\ArgumentException("Parameter 'LAST_NAME' is required.", 'matches');
}
$query->addFilter('=LAST_NAME', $lastName);
$query->addFilter('=NAME', isset($matches['NAME']) ? $matches['NAME'] : '');
$query->addFilter('=SECOND_NAME', isset($matches['SECOND_NAME']) ? $matches['SECOND_NAME'] : '');
$rootEntityID = 0;
if(is_array($options) && isset($options['ROOT_ENTITY_ID']))
{
$rootEntityID = (int)$options['ROOT_ENTITY_ID'];
}
if($rootEntityID > 0)
{
$query->addFilter('!ENTITY_ID', $rootEntityID);
$query->addFilter(
'!@ENTITY_ID',
DuplicateIndexMismatch::prepareQueryField($criterion, $entityTypeID, $rootEntityID, $userID)
);
}
$query = DedupeDataSource::registerRuntimeFieldsByParams($query, $this->getParams());
$limit = 0;
if(is_array($options) && isset($options['LIMIT']))
{
$limit = (int)$options['LIMIT'];
}
if($limit > 0)
{
$query->setLimit($limit);
}
$dbResult = $query->exec();
$fields = $dbResult->fetch();
return is_array($fields) && isset($fields['QTY']) ? intval($fields['QTY']) : 0;
}