• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/product2product.php
  • Класс: Bitrix\Sale\Product2ProductTable
  • Вызов: Product2ProductTable::addProductsFromOrder
static function addProductsFromOrder($orderId = 0)
{
	$orderId = (int)$orderId;

	if (OrderProcessing::hasAddedProducts($orderId))
		return;

	$connection = Application::getConnection();
	$type = $connection->getType();

	// Update existing
	if ($type == "mysql")
	{
		$sqlUpdate = "UPDATE b_sale_product2product p2p, b_sale_basket b, b_sale_basket b1
			SET  p2p.CNT = p2p.CNT + 1
			WHERE b.ORDER_ID = b1.ORDER_ID AND
				b.ID <> b1.ID AND
				b.ORDER_ID = $orderId AND
				p2p.PRODUCT_ID = b.PRODUCT_ID AND
				p2p.PARENT_PRODUCT_ID = b1.PRODUCT_ID";
	}
	elseif ($type == "mssql")
	{
		$sqlUpdate = "UPDATE b_sale_product2product
			SET CNT = CNT + 1
			FROM b_sale_product2product p2p, b_sale_basket b, b_sale_basket b1
			WHERE b.ORDER_ID = b1.ORDER_ID AND
				b.ID <> b1.ID AND
				b.ORDER_ID = $orderId AND
				p2p.PRODUCT_ID = b.PRODUCT_ID AND
				p2p.PARENT_PRODUCT_ID = b1.PRODUCT_ID";
	}
	else // Oracle
	{
		$sqlUpdate = "UPDATE b_sale_product2product
			SET CNT = CNT + 1
			WHERE ID IN (
				SELECT p2p.ID FROM b_sale_product2product p2p, b_sale_basket b, b_sale_basket b1
				WHERE b.ORDER_ID = b1.ORDER_ID AND
					b.ID <> b1.ID AND
					b.ORDER_ID = $orderId AND
					p2p.PRODUCT_ID = b.PRODUCT_ID AND
					p2p.PARENT_PRODUCT_ID = b1.PRODUCT_ID
				)";
	}

	$connection->query($sqlUpdate);

	// Insert new
	$sqlInsert = "INSERT INTO b_sale_product2product (PRODUCT_ID, PARENT_PRODUCT_ID, CNT)
		SELECT b.PRODUCT_ID, b1.PRODUCT_ID, 1
		FROM b_sale_basket b, b_sale_basket b1
		WHERE b.ORDER_ID = b1.ORDER_ID AND
			b.ORDER_ID = $orderId AND
			b.ID <> b1.ID AND
			NOT EXISTS (SELECT 1 FROM b_sale_product2product d WHERE d.PRODUCT_ID = b.PRODUCT_ID AND d.PARENT_PRODUCT_ID = b1.PRODUCT_ID)";

	$connection->query($sqlInsert);

	OrderProcessing::markProductsAdded($orderId);

	if (defined("BX_COMP_MANAGED_CACHE"))
	{
		$app = Application::getInstance();
		$app->getTaggedCache()->clearByTag('sale_product_buy');
	}
}