• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/providerbase.php
  • Класс: BitrixSaleProviderBase
  • Вызов: ProviderBase::getAvailableQuantityAndPrice
static function getAvailableQuantityAndPrice($providerClass, array $products, array $context)
{
	$result = new Result();
	$availableQuantityList = array();
	$priceData = array();
	$providerName = null;

	foreach ($products as $productId => $productData)
	{
		/** @var BasketItem $basketItem */
		$basketItem = $productData['BASKET_ITEM'];
		if (!$basketItem)
		{
			throw new ObjectNotFoundException('Entity "BasketItem" not found');
		}

		$callbackFunction = null;
		if (!empty($productData['CALLBACK_FUNC']))
		{
			$callbackFunction = $productData['CALLBACK_FUNC'];
		}

		$isCustomItem = !($providerClass || $callbackFunction);

		if ($isCustomItem)
		{
			$providerData = $basketItem->getFieldValues();
			$providerData['AVAILABLE_QUANTITY'] = $basketItem->getQuantity();
		}
		else
		{
			$r = static::getProviderDataByProductData($providerClass, $productData, $context);
			if (!$r->isSuccess())
			{
				$result->addErrors($r->getErrors());
			}
			elseif ($r->hasWarnings())
			{
				$result->addWarnings($r->getWarnings());
			}
			$providerData = $r->getData();
		}

		if (!empty($providerData))
		{
			if (isset($providerData['AVAILABLE_QUANTITY']))
			{
				$availableQuantityList[$productId] ??= 0;
				$availableQuantityList[$productId] += (float)$providerData['AVAILABLE_QUANTITY'];
			}
			else
			{
				$result->addWarning(new ResultWarning(Loc::getMessage('SALE_PROVIDER_BASKET_ITEM_WRONG_AVAILABLE_QUANTITY', array(
					'#PRODUCT_ID#' => $productId
				)), 'PROVIDER_BASKET_ITEM_WRONG_AVAILABLE_QUANTITY'));

			}

			if (!$isCustomItem)
			{
				$priceFields = static::getPriceFields();

				foreach ($priceFields as $fieldName)
				{
					if (array_key_exists($fieldName, $providerData))
					{
						$priceData[$productId][$basketItem->getBasketCode()][$fieldName] = $providerData[$fieldName];
					}

				}
			}
		}
	}

	$result->setData(
		array(
			'PRODUCT_DATA_LIST' => array(
				'PRICE_LIST' => $priceData,
				'AVAILABLE_QUANTITY_LIST' => $availableQuantityList
			)
		)
	);

	return $result;
}