- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/product2product.php
- Класс: Bitrix\Sale\Product2ProductTable
- Вызов: Product2ProductTable::deleteOldProducts
static function deleteOldProducts($liveTime = 10)
{
$connection = Application::getConnection();
$type = $connection->getType();
$helper = $connection->getSqlHelper();
$liveTo = $helper->addSecondsToDateTime($liveTime * 24 * 3600, "o.DATE_INSERT");
$now = $helper->getCurrentDateTimeFunction();
// Update existing
if ($type == "mysql")
{
$sqlUpdate = "UPDATE b_sale_product2product p2p, b_sale_basket b, b_sale_basket b1, b_sale_order o, b_sale_order_processing op
SET p2p.CNT = p2p.CNT - 1
WHERE b.ORDER_ID = b1.ORDER_ID AND
b.ID <> b1.ID AND
$now > $liveTo AND
o.ID = b.ORDER_ID AND
o.ID = op.ORDER_ID AND
op.PRODUCTS_REMOVED = 'N' 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, b_sale_order o, b_sale_order_processing op
WHERE b.ORDER_ID = b1.ORDER_ID AND
b.ID <> b1.ID AND
$now > $liveTo AND
o.ID = b.ORDER_ID AND
o.ID = op.ORDER_ID AND
op.PRODUCTS_REMOVED = 'N' 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, b_sale_order o, b_sale_order_processing op
WHERE b.ORDER_ID = b1.ORDER_ID AND
b.ID <> b1.ID AND
$now > $liveTo AND
o.ID = b.ORDER_ID AND
o.ID = op.ORDER_ID AND
op.PRODUCTS_REMOVED = 'N' AND
p2p.PRODUCT_ID = b.PRODUCT_ID AND
p2p.PARENT_PRODUCT_ID = b1.PRODUCT_ID
)";
}
$connection->query($sqlUpdate);
// Update Status
$updateRemStatusSql = "UPDATE b_sale_order_processing SET PRODUCTS_REMOVED = 'Y'";
$connection->query($updateRemStatusSql);
// Delete
$deleteSql = "DELETE FROM b_sale_product2product WHERE CNT <= 0";
$connection->query($deleteSql);
}