- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/internals/providercreator.php
- Класс: BitrixSaleInternalsProviderCreator
- Вызов: ProviderCreator::createItemForReserveByShipmentItem
public function createItemForReserveByShipmentItem(SaleShipmentItem $shipmentItem) : array
{
$basketItem = $shipmentItem->getBasketItem();
$result = [
'PROVIDER_NAME' => $basketItem->getProviderName(),
'BASKET_ITEM' => $basketItem,
'SHIPMENT_ITEM' => $shipmentItem,
'QUANTITY' => 0,
'RESERVED_QUANTITY' => 0,
];
if (!$basketItem->isReservableItem())
{
return $result;
}
$shipmentItemQuantity = $shipmentItem->getQuantity();
if ($shipmentItemQuantity == 0)
{
$storeId = SaleConfiguration::getDefaultStoreId();
$result['QUANTITY_BY_STORE'][$storeId] = $shipmentItemQuantity - $shipmentItem->getReservedQuantity();
$result['QUANTITY'] += $result['QUANTITY_BY_STORE'][$storeId];
$result['RESERVED_QUANTITY_BY_STORE'][$storeId] = $shipmentItem->getReservedQuantity();
$result['RESERVED_QUANTITY'] += $result['RESERVED_QUANTITY_BY_STORE'][$storeId];
}
else
{
$quantityStoreList = [];
/** @var SaleShipmentItemStoreCollection $shipmentItemStoreCollection */
$shipmentItemStoreCollection = $shipmentItem->getShipmentItemStoreCollection();
if ($shipmentItemStoreCollection)
{
/** @var SaleShipmentItemStore $itemStore */
foreach ($shipmentItemStoreCollection as $itemStore)
{
$storeId = $itemStore->getStoreId();
if (!isset($quantityStoreList[$storeId]))
{
$quantityStoreList[$storeId] = 0;
}
$quantityStoreList[$storeId] += $itemStore->getQuantity();
$shipmentItemQuantity -= $itemStore->getQuantity();
}
}
if ($shipmentItemQuantity > 0)
{
$storeId = SaleConfiguration::getDefaultStoreId();
if (!isset($quantityStoreList[$storeId]))
{
$quantityStoreList[$storeId] = 0;
}
$quantityStoreList[$storeId] += $shipmentItemQuantity;
}
$result['QUANTITY_BY_STORE'] = [];
$result['RESERVED_QUANTITY_BY_STORE'] = [];
$shipmentItemReservedQuantity = $shipmentItem->getReservedQuantity();
foreach ($quantityStoreList as $storeId => $quantity)
{
$reserveQuantity = 0;
/** @var SaleReserveQuantityCollection $reserveQuantityCollection */
$reserveQuantityCollection = $basketItem->getReserveQuantityCollection();
if ($reserveQuantityCollection && $shipmentItemReservedQuantity > 0)
{
$reserveQuantity = $reserveQuantityCollection->getQuantityByStoreId($storeId);
if ($reserveQuantity > $shipmentItemReservedQuantity)
{
$reserveQuantity = $shipmentItemReservedQuantity;
}
$shipmentItemReservedQuantity -= $reserveQuantity;
}
$result['QUANTITY_BY_STORE'][$storeId] = $quantity - $reserveQuantity;
$result['QUANTITY'] += $result['QUANTITY_BY_STORE'][$storeId];
$result['RESERVED_QUANTITY_BY_STORE'][$storeId] = $reserveQuantity;
$result['RESERVED_QUANTITY'] += $result['RESERVED_QUANTITY_BY_STORE'][$storeId];
}
}
return $result;
}