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