- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/internals/shipmentrules.php
- Класс: BitrixSaleInternalsShipmentRules
- Вызов: ShipmentRules::createReserveRule
static function createReserveRule(SaleReserveQuantity $reserve, PoolQuantity $pool, int $productId)
{
$basketItem = $reserve->getCollection()->getBasketItem();
$poolReservationList = $pool->getQuantitiesWithStore(PoolQuantity::POOL_RESERVE_TYPE);
if (
empty($poolReservationList)
|| !isset($poolReservationList[$productId])
)
{
return false;
}
$rule = [
'PRODUCT_ID' => $productId,
'BASKET_ITEM' => $basketItem,
'PROVIDER_NAME' => $basketItem->getProvider(),
'RESERVE_ITEM' => $reserve,
'STORE' => []
];
$quantityByStore = [];
if ($reserve->getQuantity() > 0)
{
$quantity = $reserve->getFields()->getOriginalValues()['QUANTITY'] ?? 0;
$quantityByStore = [
$reserve->getStoreId() => $reserve->getQuantity() - $quantity
];
}
elseif ($reserve->getQuantity() == 0)
{
$quantity = $reserve->getFields()->getOriginalValues()['QUANTITY'];
$quantityByStore = [$reserve->getStoreId() => -$quantity];
}
if ($quantityByStore)
{
$rule['ACTION'][PoolQuantity::POOL_RESERVE_TYPE] = [
'QUANTITY_BY_STORE' => $quantityByStore,
'QUANTITY' => array_sum($quantityByStore),
];
}
$pool->setByStore(PoolQuantity::POOL_RESERVE_TYPE, $productId, $reserve->getStoreId(), 0);
return $rule;
}