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