• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/catalog/provider.php
  • Класс: BitrixSaleInternalsCatalogProvider
  • Вызов: Provider::getAvailableQuantityAndPriceByBasketItem
static function getAvailableQuantityAndPriceByBasketItem(SaleBasketItemBase $basketItem, array $context = array())
{
	$result = new SaleResult();

	/** @var SaleBasket $basket */
	$basket = $basketItem->getCollection();

	$order = $basket->getOrder();

	if (empty($context) && !$order)
	{
		$context = $basket->getContext();
	}

	if (empty($context) && $order)
	{
		$context = self::prepareContext($order, $context);
	}

	$r = self::checkContext($context);
	if (!$r->isSuccess())
	{
		return $r;
	}

	$resultData = array();

	$creator = SaleInternalsProviderCreator::create($context);

	/** @var SaleBasketItem $basketItem */
	$creator->addBasketItem($basketItem);

	$r = $creator->getAvailableQuantityAndPrice();
	if ($r->isSuccess())
	{
		$providerName = $basketItem->getProviderName();

		if (strval($providerName) == '')
		{
			$providerName = $basketItem->getCallbackFunction();
		}

		$providerName = self::clearProviderName($providerName);

		$checkProviderName = $providerName;
		$data = $r->getData();
		if (array_key_exists('PRODUCT_DATA_LIST', $data) && isset($data['PRODUCT_DATA_LIST'][$checkProviderName]))
		{
			$productData = $data['PRODUCT_DATA_LIST'][$checkProviderName];

			if (isset($productData['PRICE_LIST'][$basketItem->getProductId()][$basketItem->getBasketCode()]))
			{
				$resultData['PRICE_DATA'] = $productData['PRICE_LIST'][$basketItem->getProductId()][$basketItem->getBasketCode()];
			}

			if (isset($productData['AVAILABLE_QUANTITY_LIST'][$basketItem->getProductId()]))
			{
				$resultData['AVAILABLE_QUANTITY'] = $productData['AVAILABLE_QUANTITY_LIST'][$basketItem->getProductId()];
			}
		}
	}
	else
	{
		$result->addErrors($r->getErrors());
	}

	if (isset($resultData))
	{
		$result->setData(
			$resultData
		);
	}

	return $result;
}