- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/volume/contact.php
- Класс: Bitrix\Crm\Volume\Contact
- Вызов: Contact::measureFiles
public function measureFiles()
{
self::loadTablesInformation();
$query = $this->prepareQuery();
if ($this->prepareFilter($query))
{
$source = array();
$groupByFields = array(
'DATE_CREATE_SHORT' => 'DATE_CREATE_SHORT',
);
$query
->registerRuntimeField(new ORM\Fields\ExpressionField('PHOTO_FILE_ID', 'cast(%s as UNSIGNED)', 'PHOTO'))
->registerRuntimeField(new ORM\Fields\Relations\Reference(
'PHOTO_FILE',
Main\FileTable::class,
ORM\Query\Join::on('this.PHOTO_FILE_ID', 'ref.ID')->whereNotNull('this.PHOTO'),
array('join_type' => 'INNER')
));
$query
->registerRuntimeField(new ORM\Fields\ExpressionField('FILE_SIZE', 'SUM(%s)', 'PHOTO_FILE.FILE_SIZE'))
->registerRuntimeField(new ORM\Fields\ExpressionField('FILE_COUNT', 'COUNT(%s)', 'PHOTO_FILE.FILE_SIZE'))
->addSelect('FILE_SIZE')
->addSelect('FILE_COUNT')
->registerRuntimeField(new ORM\Fields\ExpressionField('DISK_SIZE', '0'))
->registerRuntimeField(new ORM\Fields\ExpressionField('DISK_COUNT', '0'))
->addSelect('DISK_SIZE')
->addSelect('DISK_COUNT')
;
foreach ($groupByFields as $alias => $field)
{
$query->addSelect($field, $alias);
$query->addGroup($alias);
}
$source[] = $query->getQuery();
$entityUserFieldList = $this->getUserTypeFieldList(Crm\ContactTable::class);
/** @var array $userField */
foreach ($entityUserFieldList as $userField)
{
$sql = $this->prepareUserFieldQuery(Crm\ContactTable::class, $userField, $groupByFields);
if ($sql !== '')
{
$source[] = $sql;
}
}
$diskConnector = static::getDiskConnector(Crm\ContactTable::class);
if ($diskConnector !== null)
{
$sql = $this->prepareDiskAttachedQuery(Crm\ContactTable::class, $diskConnector, $groupByFields);
if ($sql !== '')
{
$source[] = $sql;
}
}
$liveFeedConnector = static::getLiveFeedConnector(Crm\ContactTable::class);
if ($liveFeedConnector !== null)
{
$sql = $this->prepareLiveFeedQuery(Crm\ContactTable::class, $liveFeedConnector, $groupByFields);
if ($sql !== '')
{
$source[] = $sql;
}
}
if (count($source) > 0)
{
$querySql = "
SELECT
'".static::getIndicatorId()."' as INDICATOR_TYPE,
'".$this->getOwner()."' as OWNER_ID,
'-' as STAGE_SEMANTIC_ID,
DATE_CREATE_SHORT as DATE_CREATE,
SUM(FILE_SIZE) as FILE_SIZE,
SUM(FILE_COUNT) as FILE_COUNT,
SUM(DISK_SIZE) as DISK_SIZE,
SUM(DISK_COUNT) as DISK_COUNT
FROM
(
(".implode(' ) UNION ( ', $source).")
) src
GROUP BY
DATE_CREATE
";
Crm\VolumeTable::updateFromSelect(
$querySql,
array(
'FILE_SIZE' => 'destination.FILE_SIZE + source.FILE_SIZE',
'FILE_COUNT' => 'destination.FILE_COUNT + source.FILE_COUNT',
'DISK_SIZE' => 'destination.DISK_SIZE + source.DISK_SIZE',
'DISK_COUNT' => 'destination.DISK_COUNT + source.DISK_COUNT',
),
array(
'INDICATOR_TYPE',
'OWNER_ID',
'DATE_CREATE',
'STAGE_SEMANTIC_ID',
)
);
}
}
return $this;
}