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