• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/volume/invoice.php
  • Класс: Bitrix\Crm\Volume\Invoice
  • Вызов: Invoice::measureFiles
public function measureFiles()
{
	self::loadTablesInformation();

	$query = $this->prepareQuery();

	if ($this->prepareFilter($query))
	{
		$source = array();

		$groupByFields = array(
			'DATE_CREATE' => 'DATE_CREATE_SHORT',
			'STAGE_SEMANTIC_ID' => 'STAGE_SEMANTIC_ID',
		);

		$entityUserFieldList = $this->getUserTypeFieldList(Crm\InvoiceTable::class);
		/** @var array $userField */
		foreach ($entityUserFieldList as $userField)
		{
			$sql = $this->prepareUserFieldQuery(Crm\InvoiceTable::class, $userField, $groupByFields);

			if ($sql !== '')
			{
				$source[] = $sql;
			}
		}

		$diskConnector = static::getDiskConnector(Crm\InvoiceTable::class);
		if ($diskConnector !== null)
		{
			$sql = $this->prepareDiskAttachedQuery(Crm\InvoiceTable::class, $diskConnector, $groupByFields);
			if ($sql !== '')
			{
				$source[] = $sql;
			}
		}

		$liveFeedConnector = static::getLiveFeedConnector(Crm\InvoiceTable::class);
		if ($liveFeedConnector !== null)
		{
			$sql = $this->prepareLiveFeedQuery(Crm\InvoiceTable::class, $liveFeedConnector, $groupByFields);
			if ($sql !== '')
			{
				$source[] = $sql;
			}
		}

		if (count($source) > 0)
		{
			$querySql = "
				SELECT 
					'".static::getIndicatorId()."' as INDICATOR_TYPE,
					'".$this->getOwner()."' as OWNER_ID,
					DATE_CREATE,
					STAGE_SEMANTIC_ID, 
					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 
					STAGE_SEMANTIC_ID, 
					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;
}