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