- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/internals/catalog/provider.php
- Класс: BitrixSaleInternalsCatalogProvider
- Вызов: Provider::createMapShipmentItemStoreData
static function createMapShipmentItemStoreData(SaleShipmentItem $shipmentItem, $needUseReserve = true)
{
$resultList = array();
/** @var SaleBasketItem $basketItem */
$basketItem = $shipmentItem->getBasketItem();
if (!$basketItem->isReservableItem())
{
return false;
}
/** @var SaleReserveQuantityCollection $reserveQuantityCollection */
$reserveQuantityCollection = $basketItem->getReserveQuantityCollection();
if (!$reserveQuantityCollection)
{
return false;
}
$reserveQuantityStoreList = [];
$countBarcode = 0;
/** @var SaleShipmentItemStoreCollection $shipmentItemStoreCollection */
$shipmentItemStoreCollection = $shipmentItem->getShipmentItemStoreCollection();
if ($shipmentItemStoreCollection)
{
/** @var SaleShipmentItemStore $shipmentItemStore */
foreach ($shipmentItemStoreCollection as $shipmentItemStore)
{
$productId = $basketItem->getProductId();
$storeId = $shipmentItemStore->getStoreId();
if (!isset($reserveQuantityStoreList[$storeId]))
{
$reserveQuantityStoreList[$storeId] = $reserveQuantityCollection->getQuantityByStoreId($shipmentItemStore->getStoreId());
}
if (!isset($resultList[$storeId]))
{
$resultList[$storeId] = [
'PRODUCT_ID' => $productId,
'QUANTITY' => 0,
'RESERVED_QUANTITY' => 0,
'STORE_ID' => $storeId,
'IS_BARCODE_MULTI' => $basketItem->isBarcodeMulti(),
'BARCODE' => [],
];
}
$barcodeId = ($shipmentItemStore->getId() > 0)? $shipmentItemStore->getId() : 'n'.$countBarcode;
$countBarcode++;
$resultList[$storeId]['QUANTITY'] += $basketItem->isBarcodeMulti()? 1 : $shipmentItemStore->getQuantity();
$resultList[$storeId]['BARCODE'][$barcodeId] = $shipmentItemStore->getBarcode();
if ($needUseReserve)
{
if ($reserveQuantityStoreList[$storeId] > $resultList[$storeId]['QUANTITY'])
{
$resultList[$storeId]['RESERVED_QUANTITY'] = $resultList[$storeId]['QUANTITY'];
}
elseif ($reserveQuantityStoreList[$storeId] > 0)
{
$resultList[$storeId]['RESERVED_QUANTITY'] = $reserveQuantityStoreList[$storeId];
}
$reserveQuantityStoreList[$storeId] -= $resultList[$storeId]['RESERVED_QUANTITY'];
}
}
}
return $resultList;
}