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