• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/report/handler/lead.php
  • Класс: Bitrix\Crm\Integration\Report\Handler\Lead
  • Вызов: Lead::addToQueryFilterCase
private function addToQueryFilterCase(Query $query, $filterParameters = null)
{
	if ($filterParameters === null)
	{
		$filterParameters = $this->getFilterParameters();
	}

	if (!$this->isConversionCalculateMode())
	{
		$query->where('FULL_HISTORY.IS_SUPPOSED', 'N');
	}

	foreach ($filterParameters as $key => $value)
	{
		if ($key === 'TIME_PERIOD')
		{
			if ($value['from'] !== "" && $value['to'] !== "")
			{
				$query->where('FULL_HISTORY.LAST_UPDATE_DATE', '<=', $this->getConvertedToServerTime($value['to']))
					->where('FULL_HISTORY.CLOSE_DATE', '>=', $this->getConvertedToServerTime($value['from']));
				continue;
			}
		}

		if ($key === 'FIND')
		{
			if ($value !== '')
			{
				$query->whereMatch('SEARCH_CONTENT', $value);
			}
			continue;
		}

		switch 	($value['type'])
		{
			case 'date':
				if ($value['from'] !== "")
				{
					$query->where($key, '>=', $this->getConvertedToServerTime($value['from']));
				}

				if ($value['to'] !== "")
				{
					$query->where($key, '<=', $this->getConvertedToServerTime($value['to']));
				}
				break;
			case 'diapason':
				if ($value['from'] !== "")
				{
					$query->where($key, '>=', $value['from']);
				}

				if ($value['to'] !== "")
				{
					$query->where($key, '<=', $value['to']);
				}
				break;
			case 'text':
				$query->whereLike($key, '%'.$value['value'].'%');
				break;
			case 'none':
			case 'list':
			case 'checkbox':
			case 'custom_entity':
			case 'dest_selector':
			case 'entity_selector':
				$query->addFilter($key, $value['value']);
				break;
		}

		if ($key === 'STAGE_SEMANTIC_ID')
		{
			$subQuery = LeadStatusHistoryWithSupposedTable::query();
			$subQuery->addSelect('*');
			if (!empty($filterParameters['TIME_PERIOD']))
			{
				$subQuery->where('LAST_UPDATE_DATE', '<=', $this->getConvertedToServerTime($filterParameters['TIME_PERIOD']['to']))
					->where('CLOSE_DATE', '>=', $this->getConvertedToServerTime($filterParameters['TIME_PERIOD']['from']));
			}

			$subQuery->addFilter('STATUS_SEMANTIC_ID', $value['value']);

			$query->whereExists($subQuery);
		}
	}
}