• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/product/catalogprovider.php
  • Класс: BitrixCatalogProductCatalogProvider
  • Вызов: CatalogProvider::checkProductsQuantity
private function checkProductsQuantity(array $products): SaleResult
	{
		$result = new SaleResult();

		$resultList = array();
		$availableQuantityList = array();
		$r = $this->getAvailableQuantity($products);
		if ($r->isSuccess())
		{
			$resultData = $r->getData();
			if (!empty($resultData['AVAILABLE_QUANTITY_LIST']))
			{
				$availableQuantityList = $resultData['AVAILABLE_QUANTITY_LIST'];
			}

		}
		else
		{
			return $r;
		}

		$enabledReservation = static::isReservationEnabled();

		foreach ($products as $productId => $productData)
		{
			if (empty($productData['CATALOG']))
			{
				$resultList[$productId] = false;
				$result->addError(
					new SaleResultError(
						MainLocalizationLoc::getMessage(
							"SALE_PROVIDER_PRODUCT_NOT_AVAILABLE",
							array_merge(
								self::getProductCatalogInfo($productId),
								array("#PRODUCT_ID#" => $productId)
							)
						), "SALE_PROVIDER_PRODUCT_NOT_AVAILABLE"
					)
				);

				continue;
			}

			$resultList[$productId] = true;
			$catalogData = $productData['CATALOG'];


			if ($catalogData["CHECK_QUANTITY"])
			{
				$productQuantity = self::getTotalAmountFromQuantityList($productData);

				$availableQuantity = 0;

				if (isset($availableQuantityList[$productId]))
				{
					$availableQuantity = $availableQuantityList[$productId];
				}

				$availableQuantity += (float)$catalogData['QUANTITY_RESERVED'];

				if ($enabledReservation && $productQuantity > $availableQuantity)
				{
					$resultList[$productId] = false;
					$result->addError(
						new SaleResultError(
							MainLocalizationLoc::getMessage(
								"DDCT_DEDUCTION_QUANTITY_ERROR",
								array_merge(
									self::getProductCatalogInfo($productId),
									array("#PRODUCT_ID#" => $productId)
								)
							), "DDCT_DEDUCTION_QUANTITY_ERROR"
						)
					);
				}
			}
		}

		if (!empty($resultList))
		{
			$result->setData(
				array(
					'PRODUCTS_LIST_REQUIRED_QUANTITY' => $resultList
				)
			);
		}

		return $result;
	}