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