• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/volume/base.php
  • Класс: Bitrix\Crm\Volume\Base
  • Вызов: Base::prepareDateActionList
protected function prepareDateActionList($entityClass, $dateFieldAlias, $actionAliases)
{
	$indicatorId = static::getIndicatorId();

	$queueList = array();

	$actionCommands = array(
		'MEASURE_ENTITY',
		'MEASURE_FILE',
		'MEASURE_ACTIVITY',
		'MEASURE_EVENT',
	);

	/**
	 * @var ORM\Data\DataManager $entityClass
	 */
	$query = $entityClass::query();

	$dateMin = new ORM\Fields\ExpressionField('DATE_MIN', "DATE_FORMAT(MIN(%s), '%%Y-%%m-%%d')", $dateFieldAlias);
	$query->registerRuntimeField($dateMin)->addSelect('DATE_MIN');

	$monthCount = new ORM\Fields\ExpressionField('MONTHS', 'TIMESTAMPDIFF(MONTH, MIN(%s), MAX(%s))', array($dateFieldAlias, $dateFieldAlias));
	$query->registerRuntimeField($monthCount)->addSelect('MONTHS');

	$res = $query->exec();
	if ($row = $res->fetch())
	{
		list($dateSplitPeriod, $dateSplitPeriodUnits) = $this->getDateSplitPeriod();

		$dateMin =  new Main\Type\DateTime($row['DATE_MIN'], 'Y-m-d');
		$months =  $row['MONTHS'];

		while ($months >= 0)
		{
			$period = $dateMin->format('Y.m');
			$dateMin->add("$dateSplitPeriod $dateSplitPeriodUnits");
			$period .= '-';
			$period .= $dateMin->format('Y.m');
			$months -= $dateSplitPeriod;

			foreach ($actionCommands as $command)
			{
				if (isset($actionAliases[$command]))
				{
					$queueList[] = array(
						'indicatorId' => $indicatorId,
						'action' => $actionAliases[$command],
						'period' => $period,
					);
				}
			}
		}
	}

	return $queueList;
}