• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/product/catalogprovider.php
  • Класс: BitrixCatalogProductCatalogProvider
  • Вызов: CatalogProvider::getAmountFromSource
static function getAmountFromSource(array $product, array $sourceList): float
	{
		if (empty($product) || empty($sourceList))
		{
			return 0;
		}

		$result = 0;
		$found = false;
		foreach ($sourceList as $source)
		{
			switch ($source)
			{
				case self::AMOUNT_SRC_QUANTITY:
					if (array_key_exists($source, $product))
					{
						$result = $product[$source];
						$found = true;
					}
					break;
				case self::AMOUNT_SRC_QUANTITY_LIST:
				case self::AMOUNT_SRC_RESERVED_LIST:
					if (
						!empty($product[$source])
						&& is_array($product[$source])
					)
					{
						$result = array_sum($product[$source]);
						$found = true;
					}
					break;
				case self::AMOUNT_SRC_PRICE_LIST:
					if (
						!empty($product[$source])
						&& is_array($product[$source])
					)
					{
						foreach ($product[$source] as $row)
						{
							if (!is_array($row) || !isset($row['QUANTITY']))
							{
								continue;
							}
							$result += (float)$row['QUANTITY'];
						}
						unset($row);
						$found = true;
					}
					break;
				case self::AMOUNT_SRC_STORE_QUANTITY_LIST:
				case self::AMOUNT_SRC_STORE_RESERVED_LIST:
					if (
						!empty($product[$source])
						&& is_array($product[$source])
					)
					{
						switch (self::getQuantityFormat($product[$source]))
						{
							case self::QUANTITY_FORMAT_STORE:
								$internalResult = self::calculateQuantityFromStores($product[$source]);
								break;
							case self::QUANTITY_FORMAT_SHIPMENT:
								$internalResult = self::calculateQuantityFromShipments($product[$source]);
								break;
							default:
								$internalResult = null;
								break;
						}
						if ($internalResult !== null)
						{
							$result += array_sum($internalResult);
							$found = true;
						}
						unset($internalResult);
					}
					break;
			}
			if ($found)
			{
				break;
			}
		}

		return (float)$result;
	}