- Модуль: 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');
}
}