• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/orderdiscountbase.php
  • Класс: BitrixSaleOrderDiscountBase
  • Вызов: OrderDiscountBase::updateRoundBlock
static function updateRoundBlock($order, array $block)
{
	$result = new Result();

	$order = (int)$order;
	if ($order <= 0)
	{
		$result->addError(new MainError(
			Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_BAD_ORDER_ID'),
			self::ERROR_ID
		));
		return $result;
	}

	$deleteList = array();
	$iterator = static::getRoundResultIterator([
		'select' => ['ID'],
		'filter' => ['=ORDER_ID' => $order]
	]);
	while ($row = $iterator->fetch())
	{
		$row['ID'] = (int)$row['ID'];
		$deleteList[$row['ID']] = $row['ID'];
	}
	unset($row, $iterator);

	if (!empty($block))
	{
		foreach ($block as $row)
		{
			$id = null;
			if (isset($row['RULE_ID']) && $row['RULE_ID'] > 0)
				$id = $row['RULE_ID'];
			if ($id === null)
			{
				$result->addError(new MainError(
					Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_ROUND_ROW_ID_IS_ABSENT'),
					self::ERROR_ID
				));
				continue;
			}
			if (!isset($deleteList[$id]))
			{
				$result->addError(new MainError(
					Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_BAD_ROUND_ROW_ID'),
					self::ERROR_ID
				));
				continue;
			}
			unset($deleteList[$id]);

			unset($row['RULE_ID']);
			$resultInternal = static::updateRoundResultInternal($id, $row);
			if (!$resultInternal->isSuccess())
				$result->addErrors($resultInternal->getErrors());
		}
		unset($resultInternal, $row);
	}

	if (!$result->isSuccess())
		return $result;

	if (!empty($deleteList))
		self::deleteRowsByIndex(static::getRoundTableNameInternal(), 'ID', $deleteList);

	return $result;
}