• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/catalog/provider.php
  • Класс: BitrixSaleInternalsCatalogProvider
  • Вызов: Provider::getNeedQuantityByShipmentItem
static function getNeedQuantityByShipmentItem(SaleShipmentItem $shipmentItem) : array
{
	$basketItem = $shipmentItem->getBasketItem();

	$productId = $basketItem->getProductId();

	$providerName = $basketItem->getProviderName();
	$providerName = self::clearProviderName($providerName);

	$quantity = $shipmentItem->getQuantity();
	if ($quantity == 0)
	{
		return [
			$providerName => [
				$productId => [
					SaleConfiguration::getDefaultStoreId() => -$shipmentItem->getReservedQuantity(),
				],
			],
		];
	}
	else
	{
		$quantityByStore = [];

		/** @var SaleShipmentItemStoreCollection $shipmentItemStoreCollection */
		$shipmentItemStoreCollection = $shipmentItem->getShipmentItemStoreCollection();
		if ($shipmentItemStoreCollection)
		{
			/** @var SaleShipmentItemStore $shipmentItemStore */
			foreach ($shipmentItemStoreCollection as $shipmentItemStore)
			{
				if (!isset($quantityByStore[$shipmentItemStore->getStoreId()]))
				{
					$quantityByStore[$shipmentItemStore->getStoreId()] = 0;
				}

				$quantityByStore[$shipmentItemStore->getStoreId()] += $shipmentItemStore->getQuantity();

				$quantity -= $shipmentItemStore->getQuantity();
			}
		}

		if ($quantity)
		{
			$storeId = SaleConfiguration::getDefaultStoreId();

			if (!isset($quantityByStore[$storeId]))
			{
				$quantityByStore[$storeId] = 0;
			}

			$quantityByStore[$storeId] += $quantity;
		}

		return [
			$providerName => [
				$productId => $quantityByStore,
			],
		];
	}
}