• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/update/discountexecutionmodeindex.php
  • Класс: Bitrix\Sale\Update\DiscountExecutionModeIndex
  • Вызов: DiscountExecutionModeIndex::execute
public function execute(array &$result)
{
	$status = $this->loadCurrentStatus();
	if (empty($status['count']) || $status['count'] < 0)
	{
		return self::STOP_EXECUTING;
	}

	$newStatus = array(
		'count' => $status['count'],
		'steps' => $status['steps'],
	);
	$connection = Application::getConnection();
	$discountRows = DiscountTable::getList(
		array(
			'select' => array('*'),
			'filter' => array(
				'>ID' => $status['lastId'],
				'EXECUTE_MODE' => self::TMP_EXECUTE_MODE,
			),
			'order' => array('ID' => 'ASC'),
			'offset' => 0,
			'limit' => self::PORTION,
		)
	);

	foreach ($discountRows as $discountRow)
	{
		$mode = Analyzer::getInstance()->canCalculateSeparately($discountRow) ?
			DiscountTable::EXECUTE_MODE_SEPARATELY : DiscountTable::EXECUTE_MODE_GENERAL;

		$connection->queryExecute("UPDATE b_sale_discount SET EXECUTE_MODE = {$mode} WHERE ID = {$discountRow['ID']}");

		$newStatus['lastId'] = $discountRow['ID'];
		$newStatus['steps']++;
	}

	if (!empty($newStatus['lastId']))
	{
		Option::set('sale', 'discountexecutionmodeindex', serialize($newStatus));
		$result = array(
			'count' => $newStatus['count'],
			'steps' => $newStatus['steps'],
		);

		return self::CONTINUE_EXECUTING;
	}

	$canCalculateSeparately = Analyzer::getInstance()->canCalculateSeparatelyAllDiscount();
	Option::set('sale', 'discount_separately_calculation', $canCalculateSeparately? 'Y' : 'N');
	Option::delete('sale', array('name' => 'discountexecutionmodeindex'));

	return self::STOP_EXECUTING;
}