...Человеческий поиск в разработке...
- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/integration/crm/connectors/client.php
- Класс: Bitrix\Sender\Integration\Crm\Connectors\Client
- Вызов: Client::addNoPurchasesFilter
protected function addNoPurchasesFilter($query, $filterValue, $productSource) { $sqlHelper = Application::getConnection()->getSqlHelper(); $dealQuery = \Bitrix\Crm\DealTable::query(); if (is_array($productSource)) { $semantics = []; if (in_array(self::PRODUCT_SOURCE_DEALS_PROCESS, $productSource)) { $semantics[] = \Bitrix\Crm\PhaseSemantics::PROCESS; } if (in_array(self::PRODUCT_SOURCE_DEALS_SUCCESS, $productSource)) { $semantics[] = \Bitrix\Crm\PhaseSemantics::SUCCESS; } if (in_array(self::PRODUCT_SOURCE_DEALS_FAILURE, $productSource)) { $semantics[] = \Bitrix\Crm\PhaseSemantics::FAILURE; } if ($semantics && count($semantics) < 3) { $dealQuery->whereIn('STAGE_SEMANTIC_ID', $semantics); } } $dealsFilter = []; foreach ($filterValue as $filterCode => $date) { $dealsFilter[str_replace('%PURCHASE_DATE%', 'DATE_CREATE', $filterCode)] = new SqlExpression($sqlHelper->convertToDbDateTime(new DateTime($date))); } $dealQuery->setFilter($dealsFilter); $orderQuery = null; if (Helper::isCrmSaleEnabled()) { $orderQuery = \Bitrix\Crm\Binding\OrderContactCompanyTable::query(); $orderQuery->addSelect('ENTITY_ID', 'EID'); if (is_array($productSource)) { if (in_array(self::PRODUCT_SOURCE_ORDERS_PAID, $productSource) && !in_array(self::PRODUCT_SOURCE_ORDERS_UNPAID, $productSource)) { $orderQuery->where('ORDER.PAYED', true); } if (!in_array(self::PRODUCT_SOURCE_ORDERS_PAID, $productSource) && in_array(self::PRODUCT_SOURCE_ORDERS_UNPAID, $productSource)) { $orderQuery->where('ORDER.PAYED', false); } } $orderQuery->whereNotNull('ENTITY_ID'); $ordersFilter = []; foreach ($filterValue as $filterCode => $date) { $ordersFilter[str_replace('%PURCHASE_DATE%', 'ORDER.DATE_INSERT', $filterCode)] = new SqlExpression($sqlHelper->convertToDbDateTime(new DateTime($date))); } $orderQuery->setFilter($ordersFilter); } if ($query->getEntity()->getName() === 'Contact') { $dealQuery->addSelect('CONTACT_ID', 'EID'); $dealQuery->whereNotNull('CONTACT_ID'); if ($orderQuery) { $orderQuery->where('ENTITY_TYPE_ID', \CCrmOwnerType::Contact); } } elseif ($query->getEntity()->getName() === 'Company') { $dealQuery->addSelect('COMPANY_ID', 'EID'); $dealQuery->whereNotNull('COMPANY_ID'); if ($orderQuery) { $orderQuery->where('ENTITY_TYPE_ID', \CCrmOwnerType::Company); } } $dealsAreRequired = empty($productSource) || array_intersect($productSource, [self::PRODUCT_SOURCE_DEALS_PROCESS, self::PRODUCT_SOURCE_DEALS_SUCCESS, self::PRODUCT_SOURCE_DEALS_FAILURE]); $ordersAreRequired = empty($productSource) || array_intersect($productSource, [self::PRODUCT_SOURCE_ORDERS_PAID, self::PRODUCT_SOURCE_ORDERS_UNPAID]); $idSubQuery = false; if ($orderQuery && $dealsAreRequired && $ordersAreRequired) { $idSubQuery = new SqlExpression($dealQuery->getQuery() . ' UNION ALL ' . $orderQuery->getQuery()); } elseif ($orderQuery && $ordersAreRequired) { $idSubQuery = $orderQuery; } elseif ($dealsAreRequired) { $idSubQuery = $dealQuery; } if ($idSubQuery) { $query->whereNotIn('ID', $idSubQuery); } }