- Модуль: 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;
}