• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/widget/data/company/datasource.php
  • Класс: Bitrix\Crm\Widget\Data\Company\DataSource
  • Вызов: DataSource::prepareEntityListFilter
public function prepareEntityListFilter(array $filterParams)
{
	$filter = self::internalizeFilter($filterParams);
	$period = $filter->getPeriod();
	$dataSourceName = isset($filterParams['DS']) ? (string)$filterParams['DS'] : '';

	//fix date -> datetime
	$periodEnd = Main\Type\DateTime::createFromTimestamp($period['END']->getTimestamp());
	$periodEnd->setTime(23, 59, 59);

	$result = array(
		'>=DEADLINE' => $period['START'],
		'<=DEADLINE' => $periodEnd,
		'=BINDING_OWNER_TYPE_ID' => \CCrmOwnerType::Company,
		'=COMPLETED' => 'Y'
	);

	$responsibleIDs = $filter->getResponsibleIDs();
	if(!empty($responsibleIDs))
	{
		$result['@RESPONSIBLE_ID'] = $responsibleIDs;
	}

	if (isset($filterParams['PN']))
	{
		// filter Calls, Meetings and Emails by TYPE_ID (not by PROVIDER_TYPE_ID) for compatibility.
		list($providerId, $providerTypeId) = static::parsePresetName($filterParams['PN']);
		if (
			$providerId === Activity\Provider\Call::getId()
			&& $providerTypeId === Activity\Provider\Call::ACTIVITY_PROVIDER_TYPE_CALL
		)
		{
			$result['=TYPE_ID'] = \CCrmActivityType::Call;
		}
		elseif ($providerId === Activity\Provider\Meeting::getId())
		{
			$result['=TYPE_ID'] = \CCrmActivityType::Meeting;
		}
		elseif ($providerId === Activity\Provider\Email::getId())
		{
			$result['=TYPE_ID'] = \CCrmActivityType::Email;
		}
		else
		{
			if ($providerId)
				$result['=PROVIDER_ID'] = $providerId;
			if ($providerTypeId)
				$result['=PROVIDER_TYPE_ID'] = $providerTypeId;
		}
	}

	if (isset($filterParams['ENTITY_ID']))
		$result['=BINDING_OWNER_ID'] = (int)$filterParams['ENTITY_ID'];

	$field = isset($filterParams['FIELD']) ? $filterParams['FIELD'] : '';
	switch ($field)
	{
		case 'NONE_QTY':
			$result['=RESULT_MARK'] = StatisticsMark::None;
			break;
		case 'POSITIVE_QTY':
			$result['=RESULT_MARK'] = StatisticsMark::Positive;
			break;
		case 'NEGATIVE_QTY':
			$result['=RESULT_MARK'] = StatisticsMark::Negative;
			break;
		case 'ANSWERED_QTY':
			$result['=RESULT_STATUS'] = StatisticsStatus::Answered;
			unset($result['=COMPLETED']);
			break;
		case 'UNANSWERED_QTY':
			$result['=RESULT_STATUS'] = StatisticsStatus::Unanswered;
			unset($result['=COMPLETED']);
			break;
		case 'INCOMING_QTY':
			$result['=RESULT_STREAM'] = StatisticsStream::Incoming;
			unset($result['=COMPLETED']);
			break;
		case 'OUTGOING_QTY':
			$result['=RESULT_STREAM'] = StatisticsStream::Outgoing;
			unset($result['=COMPLETED']);
			break;
		case 'REVERSING_QTY':
			$result['=RESULT_STREAM'] = StatisticsStream::Reversing;
			unset($result['=COMPLETED']);
			break;
		case 'MISSING_QTY':
			$result['=RESULT_STREAM'] = StatisticsStream::Missing;
			unset($result['=COMPLETED']);
			break;
		case 'SUM_TOTAL':
			$result['>RESULT_SUM'] = 0;
			break;
		case 'TOTAL':
			if ($dataSourceName === ActivityStatusStatistics::TYPE_NAME)
			{
				$result['>STATUS_ID'] = StatisticsStatus::Undefined;
			}
			elseif ($dataSourceName === ActivityStreamStatistics::TYPE_NAME)
			{
				$result['>RESULT_STREAM'] = StatisticsStream::Undefined;
			}
			break;
	}

	return $result;
}