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