- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integration/report/handler/order/basegrid.php
- Класс: Bitrix\Crm\Integration\Report\Handler\Order\BaseGrid
- Вызов: BaseGrid::formatQueryFilter
private function formatQueryFilter(array $filter, array $runtime)
{
$result = array();
$orderFields = array_flip(\Bitrix\Crm\Order\Order::getAllFields());
$searchRestriction = \Bitrix\Crm\Restriction\RestrictionManager::getSearchLimitRestriction();
if(!$searchRestriction->isExceeded(\CCrmOwnerType::Order))
{
\Bitrix\Crm\Search\SearchEnvironment::convertEntityFilterValues(\CCrmOwnerType::Order, $filter);
if(isset($filter['SEARCH_CONTENT']))
{
$searchValue = $filter['SEARCH_CONTENT'];
unset($filter['SEARCH_CONTENT']);
if(is_string($searchValue))
{
$find = trim($searchValue);
if($find !== '')
{
$preparedFindFilter = \Bitrix\Crm\Search\SearchEnvironment::prepareEntityFilter(
\CCrmOwnerType::Order,
array(
'SEARCH_CONTENT' => \Bitrix\Crm\Search\SearchEnvironment::prepareSearchContent($find)
)
);
$filter = array_merge($filter, $preparedFindFilter);
}
}
}
}
$isFilteredByClient = false;
$propertyItterator = 0;
foreach($filter as $k => $v)
{
$k = str_replace(self::FILTER_FIELDS_PREFIX, '', $k);
$name = preg_replace('/^\W+/', '', $k);
if ($name === 'COMPANY_ID')
{
$result[] = [
'CLIENT.ENTITY_TYPE_ID' => \CCrmOwnerType::Company,
'CLIENT.ENTITY_ID' => $v,
];
$isFilteredByClient = true;
}
elseif ($name === 'ASSOCIATED_CONTACT_ID')
{
$result[] = [
'CLIENT.ENTITY_TYPE_ID' => \CCrmOwnerType::Company,
'CLIENT.ENTITY_ID' => $v,
];
$isFilteredByClient = true;
}
elseif ($name === 'SOURCE_ID')
{
$result['TRADING_PLATFORM.TRADING_PLATFORM_ID'] = $v;
}
elseif ($name === 'PAY_SYSTEM')
{
$result['PAYMENT.PAY_SYSTEM_ID'] = $v;
}
elseif ($name === 'DELIVERY_SERVICE')
{
$result['SHIPMENT.DELIVERY_ID'] = $v;
$result['SHIPMENT.SYSTEM'] = 'N';
}
elseif($name === 'ASSOCIATED_DEAL_ID')
{
$result['=ORDER_BINDING.OWNER_ID'] = $v;
$result['=ORDER_BINDING.OWNER_TYPE_ID'] = \CCrmOwnerType::Deal;
$runtime[] = new Reference('ORDER_BINDING',
\Bitrix\Crm\Binding\OrderEntityTable::getEntity(),
['=ref.ORDER_ID' => 'this.ID',],
['join_type' => 'LEFT',]
);
}
elseif($name === 'COUPON')
{
$result['=ORDER_COUPONS.COUPON'] = $v;
}
elseif($name === 'XML_ID')
{
$result['%XML_ID'] = $v;
}
elseif($name === 'SHIPMENT_TRACKING_NUMBER')
{
$result['%SHIPMENT.TRACKING_NUMBER'] = $v;
}
elseif($name === 'SHIPMENT_DELIVERY_DOC_DATE')
{
$docDateName = str_replace('SHIPMENT_DELIVERY_DOC_DATE', 'SHIPMENT.DELIVERY_DOC_DATE', $k);
$result[$docDateName] = $v;
}
elseif($name === 'TIME_PERIOD')
{
$timePeriodName = str_replace('TIME_PERIOD', 'DATE_INSERT', $k);
$result[$timePeriodName] = $v;
}
elseif ($name === 'USER')
{
$buyerFilter = \Bitrix\Main\UserUtils::getAdminSearchFilter([
'FIND' => $v
]);
foreach ($buyerFilter as $key => $userFilterItem)
{
$key = str_replace('INDEX', 'USER.INDEX', $key);
$result[$key] = $userFilterItem;
}
}
if (mb_strpos($name, 'PROPERTY_') === 0)
{
$propertyId = (int)str_replace('PROPERTY_', '', $name);
if ("PROPERTY_{$propertyId}" !== $name)
{
continue;
}
$propertyTableName = "PROPERTY_{$propertyItterator}";
$propertyValueCode = str_replace($name, "{$propertyTableName}.VALUE", $k);
$runtime[] =
new Reference($propertyTableName,
OrderPropsValueTable::getEntity(),
array(
'=ref.ORDER_ID' => 'this.ID',
),
array('join_type' => 'inner')
);
$result[] = [
"={$propertyTableName}.ORDER_PROPS_ID" => $propertyId,
$propertyValueCode => $v
];
$propertyItterator++;
}
elseif (isset($orderFields[$name]) || mb_strpos($name, 'UF_') === 0)
{
$result[$k] = $v;
}
}
if ($isFilteredByClient)
{
$runtime[] =
new Reference('CLIENT',
OrderContactCompanyTable::getEntity(),
array(
'=ref.ORDER_ID' => 'this.ID',
),
array('join_type' => 'LEFT')
);
}
if(isset($filter['ACTIVITY_COUNTER']))
{
$this->addActivityCounterFilter($filter, $result, $runtime);
}
return $result;
}