- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/organizationdedupedatasource.php
- Класс: Bitrix\Crm\Integrity\OrganizationDedupeDataSource
- Вызов: OrganizationDedupeDataSource::calculateEntityCount
public function calculateEntityCount(DuplicateCriterion $criterion, array $options = null)
{
$entityTypeID = $this->getEntityTypeID();
$enablePermissionCheck = $this->isPermissionCheckEnabled();
$userID = $this->getUserID();
$query = new Main\Entity\Query(DuplicateOrganizationMatchCodeTable::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();
$title = isset($matches['TITLE']) ? $matches['TITLE'] : '';
if($title === '')
{
throw new Main\ArgumentException("Parameter 'TITLE' is required.", 'matches');
}
$query->addFilter('=TITLE', $title);
$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;
}