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