• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Service/Sale/BasketService.php
  • Класс: Bitrix\Crm\Service\Sale\BasketService
  • Вызов: BasketService::getRowsIdsToBasketIdsByFilter
private function getRowsIdsToBasketIdsByFilter(array $filter): array
{
	$rows = ProductRowTable::getList([
		'select' => [
			'ID',
			'OWNER_ID',
			'OWNER_TYPE',
			'PRODUCT_ID',
			'PRICE',
			'QUANTITY',
			'XML_ID',
		],
		'filter' => $filter,
		'order' => [
			'ID' => 'ASC',
		],
	]);
	if ($rows->getSelectedRowsCount() === 0)
	{
		return [];
	}

	$productRelations = new ProductRelationsBuilder();
	$orderFilters = [];

	foreach ($rows as $row)
	{
		$productRelations->addCrmProductRow(
			(int)$row['ID'],
			(int)$row['PRODUCT_ID'],
			(float)$row['PRICE'],
			(float)$row['QUANTITY'],
			(string)$row['XML_ID']
		);

		$key = $row['OWNER_TYPE'] . $row['OWNER_ID'];
		if (empty($orderFilters[$key]))
		{
			$orderFilters[$key] = [
				'=OWNER_TYPE_ID' => CCrmOwnerTypeAbbr::ResolveTypeID($row['OWNER_TYPE']),
				'=OWNER_ID' => (int)$row['OWNER_ID'],
			];
		}
	}

	if (empty($orderFilters))
	{
		return [];
	}
	$rows = OrderEntityTable::getList([
		'select' => [
			'ORDER_ID',
		],
		'filter' => [
			'LOGIC' => 'OR',
			...array_values($orderFilters),
		],
	]);

	$orderIds = array_column($rows->fetchAll(), 'ORDER_ID');
	if (empty($orderIds))
	{
		return [];
	}

	$rows = BasketTable::getList([
		'select' => [
			'ID',
			'PRODUCT_ID',
			'QUANTITY',
			'PRICE',
			'XML_ID',
		],
		'filter' => [
			'=ORDER_ID' => $orderIds,
		],
		'order' => [
			'ID' => 'ASC',
		],
	]);
	if ($rows->getSelectedRowsCount() === 0)
	{
		return [];
	}

	foreach ($rows as $row)
	{
		$productRelations->addSaleBasketItem(
			(int)$row['ID'],
			(int)$row['PRODUCT_ID'],
			(float)$row['PRICE'],
			(float)$row['QUANTITY'],
			(string)$row['XML_ID']
		);
	}
	return $productRelations->getRelations();
}