• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/reservation/basketreservationhistoryservice.php
  • Класс: BitrixSaleReservationBasketReservationHistoryService
  • Вызов: BasketReservationHistoryService::getAvailableCountForBasketItem
public function getAvailableCountForBasketItem(int $basketId, int $storeId): float
{
	$basketItem = BasketTable::getRow([
		'select' => [
			'PRODUCT_ID',
		],
		'filter' => [
			'=ID' => $basketId,
		],
	]);
	if (!$basketItem || !$basketItem['PRODUCT_ID'])
	{
		return 0.0;
	}

	$productId = (int)$basketItem['PRODUCT_ID'];
	$storeQuantityRow = StoreProductTable::getRow([
		'select' => [
			'AMOUNT',
		],
		'filter' => [
			'=STORE_ID' => $storeId,
			'=PRODUCT_ID' => $productId,
		],
	]);
	if (!$storeQuantityRow)
	{
		return 0.0;
	}

	$calculator = new AvailableQuantityCalculator();
	$calculator->setStoreQuantity($storeId, $productId, $storeQuantityRow['AMOUNT']);

	$reservationsRows = BasketReservationHistoryTable::getList([
		'select' => [
			'RESERVATION_ID',
			'QUANTITY',
			'BASKET_ID' => 'RESERVATION.BASKET_ID',
		],
		'filter' => [
			'=RESERVATION.STORE_ID' => $storeId,
			'=RESERVATION.BASKET.PRODUCT_ID' => $productId,
		],
		'order' => [
			'DATE_RESERVE' => 'ASC',
		],
	]);
	foreach ($reservationsRows as $row)
	{
		$calculator->addReservationHistory(
			$storeId,
			$productId,
			$row['BASKET_ID'],
			$row['QUANTITY']
		);
	}

	return $calculator->getQuantityForItem($productId, $basketId, $storeId);
}