CommunicationStatistics::getActivitiesCount

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CommunicationStatistics
  4. getActivitiesCount
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/activity/communicationstatistics.php
  • Класс: Bitrix\Crm\Activity\CommunicationStatistics
  • Вызов: CommunicationStatistics::getActivitiesCount
static function getActivitiesCount($ownerTypeId, array $ownerIds, $activity)
{
	if (count($ownerIds) <= 0)
		return array();

	$date = static::getDeadline($activity);

	$startTime = new DateTime($date->format(DateTime::getFormat()));
	$endTime = new DateTime($date->format(DateTime::getFormat()));
	$endTime->setTime(23, 59, 59);
	$provider = \CCrmActivity::GetActivityProvider($activity);

	$filter = array(
		'=COMPLETED' => 'Y',
		'>=DEADLINE' => $startTime,
		'<=DEADLINE' => $endTime,
		'=BINDINGS.OWNER_TYPE_ID' => $ownerTypeId,
		'@BINDINGS.OWNER_ID' => $ownerIds,
	);

	$typeId = \CCrmActivity::GetActivityType($activity);
	if ($typeId !== \CCrmActivityType::Provider)
		$filter['=TYPE_ID'] = $typeId;
	else
	{
		$filter['=PROVIDER_ID'] = $provider::getId();
		$filter['=PROVIDER_TYPE_ID'] = $provider::getTypeId($activity);
	}

	\CTimeZone::Disable();

	$query = new Query(Crm\ActivityTable::getEntity());
	$query->setFilter($filter);

	$query->registerRuntimeField('', new ExpressionField('CNT', "COUNT(*)"));
	$query->registerRuntimeField('',
		new ReferenceField('BINDINGS',
			Crm\ActivityBindingTable::getEntity(),
			array('=this.ID' => 'ref.ACTIVITY_ID'),
			array('join_type' => 'INNER')
		)
	);

	$query->addSelect('CNT');
	$query->addSelect('BINDINGS.OWNER_ID', 'B_OWNER_ID');
	$query->addGroup('BINDINGS.OWNER_ID');

	$activitiesList = $query->exec();
	\CTimeZone::Enable();

	$result = array();
	if ($activitiesList)
	{
		while($activity = $activitiesList->fetch())
		{
			if (!isset($result[$activity['B_OWNER_ID']]))
				$result[$activity['B_OWNER_ID']] = 0;

			$result[$activity['B_OWNER_ID']] += $activity['CNT'];
		}
	}

	return $result;
}

Добавить комментарий