• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/basketbase.php
  • Класс: BitrixSaleBasketBase
  • Вызов: BasketBase::applyDiscount
public function applyDiscount(array $basketRows)
{
	$result = new Result();

	if ($this->count() == 0 || empty($basketRows))
		return $result;

	/** @var BasketItemBase $basketItem */
	foreach ($this->collection as $basketItem)
	{
		if ($basketItem->isCustomPrice())
			continue;
		$basketCode = $basketItem->getBasketCode();
		if (!isset($basketRows[$basketCode]))
			continue;

		$fields = $basketRows[$basketCode];

		if (isset($fields['PRICE']) && isset($fields['DISCOUNT_PRICE']))
		{
			$fields['PRICE'] = (float)$fields['PRICE'];
			$fields['DISCOUNT_PRICE'] = (float)$fields['DISCOUNT_PRICE'];

			if ($fields['PRICE'] >= 0
				&& $basketItem->getPrice() != $fields['PRICE'])
			{
				$fields['PRICE'] = PriceMaths::roundPrecision($fields['PRICE']);
				$basketItem->setFieldNoDemand('PRICE', $fields['PRICE']);
			}

			if ($basketItem->getDiscountPrice() != $fields['DISCOUNT_PRICE'])
			{
				$fields['DISCOUNT_PRICE'] = PriceMaths::roundPrecision($fields['DISCOUNT_PRICE']);
				$basketItem->setFieldNoDemand('DISCOUNT_PRICE', $fields['DISCOUNT_PRICE']);
			}

			if (isset($fields['DISCOUNT_VALUE']))
				$basketItem->setFieldNoDemand('DISCOUNT_VALUE', $fields['DISCOUNT_VALUE']);
		}
	}
	unset($fields, $basketCode, $basketItem);

	return $result;
}