- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/volume/emailattachment.php
- Класс: Bitrix\Crm\Volume\EmailAttachment
- Вызов: EmailAttachment::measureEntity
public function measureEntity()
{
self::loadTablesInformation();
$activity = new Volume\Activity();
$activity->setFilter($this->getFilter());
$activityQuery = $activity->prepareQuery();
$activity->prepareFilter($activityQuery);
// only email attachments
$activityQuery->where('TYPE_ID', '=', \CCrmActivityType::Email);
$activityCount = new ORM\Fields\ExpressionField('ACTIVITY_COUNT', 'COUNT(DISTINCT %s)', 'ID');
$activityBindingCount = new ORM\Fields\ExpressionField('BINDINGS_COUNT', 'COUNT(%s)', 'BINDINGS.ID');
$activityQuery
->registerRuntimeField($activityCount)
->registerRuntimeField($activityBindingCount)
->addSelect('ACTIVITY_COUNT')
->addSelect('BINDINGS_COUNT');
$entityGroupField = array(
'DATE_CREATE' => 'DATE_CREATED_SHORT',
'STAGE_SEMANTIC_ID' => 'STAGE_SEMANTIC_ID',
);
foreach ($entityGroupField as $alias => $field)
{
$activityQuery->addSelect($field, $alias);
$activityQuery->addGroup($field);
}
$querySql = $activityQuery->getQuery();
if ($querySql != '')
{
$avgActivityTableRowLength = (double)self::$tablesInformation[Crm\ActivityTable::getTableName()]['AVG_SIZE'];
$avgBindingTableRowLength = (double)self::$tablesInformation[Crm\ActivityBindingTable::getTableName()]['AVG_SIZE'];
$querySql = "
SELECT
'".static::getIndicatorId()."' as INDICATOR_TYPE,
'".$this->getOwner()."' as OWNER_ID,
DATE_CREATE,
STAGE_SEMANTIC_ID,
(
ACTIVITY_COUNT * {$avgActivityTableRowLength} +
BINDINGS_COUNT * {$avgBindingTableRowLength} ) as ACTIVITY_SIZE,
ACTIVITY_COUNT
FROM
(
{$querySql}
) src
";
$connection = \Bitrix\Main\Application::getConnection();
$this->checkTemporally();
$data = array(
'INDICATOR_TYPE' => '',
'OWNER_ID' => '',
'DATE_CREATE' => new \Bitrix\Main\Type\Date(),
'STAGE_SEMANTIC_ID' => '',
'ENTITY_SIZE' => '',
'ENTITY_COUNT' => '',
);
$insert = $connection->getSqlHelper()->prepareInsert(Crm\VolumeTmpTable::getTableName(), $data);
$sqlIns = 'INSERT INTO '.$connection->getSqlHelper()->quote(Crm\VolumeTmpTable::getTableName()). '('. $insert[0]. ') ';
$querySql = $sqlIns. $querySql;
$connection->queryExecute($querySql);
$this->copyTemporallyData();
}
return $this;
}