• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/reservation/basketreservationhistoryservice.php
  • Класс: BitrixSaleReservationBasketReservationHistoryService
  • Вызов: BasketReservationHistoryService::getAvailableCountForBasketItems
public function getAvailableCountForBasketItems(array $basketItemFilter): array
{
	$basketItems =
		BasketTable::getList([
			'select' => [
				'ID',
				'PRODUCT_ID',
			],
			'filter' => $basketItemFilter,
		])
		->fetchAll()
	;

	$basket2productIds = array_column($basketItems, 'PRODUCT_ID', 'ID');
	if (empty($basket2productIds))
	{
		return [];
	}

	$calculator = new AvailableQuantityCalculator();

	$rows = StoreProductTable::getList([
		'select' => [
			'PRODUCT_ID',
			'STORE_ID',
			'AMOUNT',
		],
		'filter' => [
			'=PRODUCT_ID' => $basket2productIds,
		],
	]);
	foreach ($rows as $row)
	{
		$calculator->setStoreQuantity($row['STORE_ID'], $row['PRODUCT_ID'], $row['AMOUNT']);
	}

	$reservationsRows = BasketReservationHistoryTable::getList([
		'select' => [
			'RESERVATION_ID',
			'QUANTITY',
			'STORE_ID' => 'RESERVATION.STORE_ID',
			'BASKET_ID' => 'RESERVATION.BASKET_ID',
			'PRODUCT_ID' => 'RESERVATION.BASKET.PRODUCT_ID',
		],
		'filter' => [
			'!RESERVATION.STORE_ID' => null,
			'=RESERVATION.BASKET.PRODUCT_ID' => $basket2productIds,
		],
		'order' => [
			'DATE_RESERVE' => 'ASC',
		],
	]);

	foreach ($reservationsRows as $row)
	{
		$calculator->addReservationHistory(
			$row['STORE_ID'],
			$row['PRODUCT_ID'],
			$row['BASKET_ID'],
			$row['QUANTITY']
		);
	}

	return $calculator->getQuantityForBatch($basket2productIds);
}