• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/basket/baserefreshstrategy.php
  • Класс: BitrixSaleBasketBaseRefreshStrategy
  • Вызов: BaseRefreshStrategy::updateBasketItem
protected function updateBasketItem(BasketItemBase $item, $data)
{
	$result = new Result();

	if (!empty($data))
	{
		$preparedData = $this->prepareData($item, $data);

		if (!$preparedData)
		{
			return $result;
		}

		if (!$item->isCustomPrice() && isset($preparedData['DISCOUNT_PRICE']) && isset($preparedData['BASE_PRICE']))
		{
			$preparedData['PRICE'] = $preparedData['BASE_PRICE'] - $preparedData['DISCOUNT_PRICE'];
		}

		if (
			empty($preparedData)
			|| (isset($preparedData['QUANTITY']) && $preparedData['QUANTITY'] <= 0)
			|| (isset($data['ACTIVE']) && $data['ACTIVE'] === 'N')
		)
		{
			$preparedData['CAN_BUY'] = 'N';
			unset($preparedData['QUANTITY']);
		}

		/** @var MainEvent $event */
		$event = new MainEvent('sale', EventActions::EVENT_ON_BASKET_ITEM_REFRESH_DATA, array(
			'ENTITY' => $item,
			'VALUES' => $data,
			'PREPARED_VALUES' => $preparedData
		));
		$event->send();

		if ($event->getResults())
		{
			/** @var MainEventResult $eventResult */
			foreach ($event->getResults() as $eventResult)
			{
				if ($eventResult->getType() == MainEventResult::ERROR)
				{
					$errorMsg = new ResultError(
						MainLocalizationLoc::getMessage('SALE_EVENT_ON_BASKET_ITEM_REFRESH_DATA'),
						'SALE_EVENT_ON_BASKET_ITEM_REFRESH_DATA'
					);
					if ($eventResultData = $eventResult->getParameters())
					{
						if (isset($eventResultData) && $eventResultData instanceof ResultError)
						{
							/** @var ResultError $errorMsg */
							$errorMsg = $eventResultData;
						}
					}

					$result->addError($errorMsg);
				}
			}
		}

		if ($this->getBasketRefreshGapTime() !== 0)
		{
			$item->setFieldNoDemand(self::REFRESH_FIELD, new DateTime());
		}
	}
	else
	{
		$preparedData['CAN_BUY'] = 'N';
	}

	/** @var Result $r */
	$r = $this->applyRefreshResult($item, $preparedData);
	if (!$r->isSuccess())
	{
		$result->addErrors($r->getErrors());
	}

	return $result;
}