- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/providerbase.php
- Класс: BitrixSaleProviderBase
- Вызов: ProviderBase::reserveProduct
static function reserveProduct($provider, $productId, $quantity)
{
global $APPLICATION;
$result = new Result();
$fields = array();
if ($provider && array_key_exists("IBXSaleProductProvider", class_implements($provider)))
{
$hasProvider = true;
$data = array("PRODUCT_ID" => $productId);
if ($quantity > 0)
{
$data["UNDO_RESERVATION"] = "N";
$data["QUANTITY_ADD"] = $quantity;
}
else
{
$data["UNDO_RESERVATION"] = "Y";
$data["QUANTITY_ADD"] = abs($quantity);
}
$APPLICATION->ResetException();
if (($resultReserveData = $provider::ReserveProduct($data)))
{
if ($resultReserveData['RESULT'])
{
$fields['QUANTITY'] = $resultReserveData['QUANTITY_RESERVED'];
if ($quantity < 0)
{
$fields['QUANTITY'] = $quantity;
}
$fields['HAS_PROVIDER'] = $hasProvider;
$result->setData($fields);
$exception = $APPLICATION->GetException();
if ($exception)
{
$result->addWarning(new ResultWarning($exception->GetString(), $exception->GetID()));
}
return $result;
}
else
{
$exception = $APPLICATION->GetException();
if ($exception)
{
$result->addWarning(new ResultWarning($exception->GetString(), $exception->GetID()));
}
else
{
$result->addError(new ResultError(Loc::getMessage('SALE_PROVIDER_RESERVE_BASKET_ITEM_ERROR'), 'SALE_PROVIDER_RESERVE_BASKET_ITEM_ERROR')) ;
}
}
}
else
{
$result->addError(new ResultError(Loc::getMessage('SALE_PROVIDER_RESERVE_BASKET_ITEM_ERROR'), 'SALE_PROVIDER_RESERVE_BASKET_ITEM_ERROR')) ;
}
}
else
{
$fields['QUANTITY'] = $quantity;
$result->setData($fields);
}
return $result;
}