Client::addNoPurchasesFilter

  1. Bitrix24 API (v. 23.675.0)
  2. sender
  3. Client
  4. addNoPurchasesFilter
  • Модуль: 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);
	}
}

Добавить комментарий