403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/catalog/lib/product/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/catalog/lib/product/quantitycontrol.php
<?php

namespace Bitrix\Catalog\Product;

class QuantityControl
{
	private static $values = [];

	public const QUANTITY = 'quantity';
	public const AVAILABLE_QUANTITY = 'available_quantity';
	public const RESERVED_QUANTITY = 'reserved_quantity';
	public const RESERVER_STORE_QUANTITY = 'reserved_store_quantity';

	/** @deprecated */
	public const QUANTITY_CONTROL_QUANTITY = self::QUANTITY;
	/** @deprecated */
	public const QUANTITY_CONTROL_AVAILABLE_QUANTITY = self::AVAILABLE_QUANTITY;
	/** @deprecated */
	public const QUANTITY_CONTROL_RESERVED_QUANTITY = self::RESERVED_QUANTITY;

	/**
	 * @param string|int|null $productId
	 *
	 * @return void
	 */
	public static function resetAllQuantity($productId = null): void
	{
		static::resetValue(static::QUANTITY, $productId);
		static::resetValue(static::AVAILABLE_QUANTITY, $productId);
		static::resetValue(static::RESERVED_QUANTITY, $productId);
		static::resetValue(static::RESERVER_STORE_QUANTITY, $productId);
	}

	/**
	 * @param string|int $productId
	 * @param int|float|string|null $value
	 *
	 * @return void
	 */
	public static function setQuantity($productId, $value): void
	{
		self::setValue(
			static::QUANTITY,
			$productId,
			CatalogProvider::getDefaultStoreId(),
			$value
		);
	}

	/**
	 * @param string|int $productId
	 * @param int|float|string|null $value
	 *
	 * @return void
	 */
	public static function addQuantity($productId, $value): void
	{
		static::setValue(
			static::QUANTITY,
			$productId,
			CatalogProvider::getDefaultStoreId(),
			(float)$value + (float)static::getQuantity($productId)
		);
	}

	/**
	 * @param string|int $productId
	 *
	 * @return null|float
	 */
	public static function getQuantity($productId): ?float
	{
		return self::getValue(
			static::QUANTITY,
			CatalogProvider::getDefaultStoreId(),
			$productId
		);
	}

	/**
	 * @param string|int $productId
	 *
	 * @return void
	 */
	public static function resetQuantity($productId): void
	{
		self::resetValue(static::QUANTITY, $productId);
	}

	/**
	 * @param string|int $productId
	 * @param int|float|string|null $value
	 *
	 * @return void
	 */
	public static function setReservedQuantity($productId, $value): void
	{
		self::setValue(
			static::RESERVED_QUANTITY,
			$productId,
			CatalogProvider::getDefaultStoreId(),
			$value
		);
	}

	/**
	 * @param string|int $productId
	 * @param int|float|string|null $value
	 *
	 * @return void
	 */
	public static function addReservedQuantity($productId, $value): void
	{
		self::setValue(
			static::RESERVED_QUANTITY,
			$productId,
			CatalogProvider::getDefaultStoreId(),
			(float)$value + (float)static::getReservedQuantity($productId)
		);
	}

	/**
	 * @param string|int $productId
	 *
	 * @return null|float
	 */
	public static function getReservedQuantity($productId): ?float
	{
		return self::getValue(
			static::RESERVED_QUANTITY,
			CatalogProvider::getDefaultStoreId(),
			$productId
		);
	}

	/**
	 * @param string|int $productId
	 *
	 * @return void
	 */
	public static function resetReservedQuantity($productId): void
	{
		self::resetValue(static::RESERVED_QUANTITY, $productId);
	}

	/**
	 * @param string|int $productId
	 *
	 * @return void
	 */
	public static function setReservedQuantityFromStores($productId): void
	{
		self::setValue(
			static::RESERVED_QUANTITY,
			$productId,
			CatalogProvider::getDefaultStoreId(),
			self::getSummaryValue(
				static::RESERVER_STORE_QUANTITY,
				$productId
			)
		);
	}

	/**
	 * @param string|int $productId
	 * @param int|float|string|null $value
	 *
	 * @return void
	 */
	public static function setAvailableQuantity($productId, $value): void
	{
		self::setValue(
			static::AVAILABLE_QUANTITY,
			$productId,
			CatalogProvider::getDefaultStoreId(),
			$value
		);
	}

	/**
	 * @param string|int $productId
	 * @param int|float|string|null $value
	 *
	 * @return void
	 */
	public static function addAvailableQuantity($productId, $value): void
	{
		self::setValue(
			static::AVAILABLE_QUANTITY,
			$productId,
			CatalogProvider::getDefaultStoreId(),
			(float)$value + (float)static::getAvailableQuantity($productId)
		);
	}

	/**
	 * @param string|int $productId
	 *
	 * @return null|float
	 */
	public static function getAvailableQuantity($productId): ?float
	{
		return self::getValue(
			static::AVAILABLE_QUANTITY,
			$productId,
			CatalogProvider::getDefaultStoreId()
		);
	}

	/**
	 * @param string|int|null $productId
	 */
	public static function resetAvailableQuantity($productId)
	{
		self::resetValue(static::AVAILABLE_QUANTITY, $productId);
	}

	/**
	 * @param string|int $productId
	 * @param int $storeId
	 * @param int|float|string|null $value
	 * @param bool $summary
	 *
	 * @return void
	 */
	public static function setReservedStoreQuantity($productId, int $storeId, $value, bool $summary = false): void
	{
		self::setValue(
			static::RESERVER_STORE_QUANTITY,
			$productId,
			$storeId,
			$value
		);

		if ($summary)
		{
			static::setReservedQuantity(
				$productId,
				self::getSummaryValue(
					static::RESERVER_STORE_QUANTITY,
					$productId
				)
			);
		}
	}

	/**
	 * @param string|int $productId
	 * @param int $storeId
	 * @param int|float|string|null $value
	 * @param bool $summary
	 *
	 * @return void
	 */
	public static function addReservedStoreQuantity($productId, int $storeId, $value, bool $summary = false): void
	{
		self::setValue(
			static::RESERVER_STORE_QUANTITY,
			$productId,
			$storeId,
			(float)$value
				+ (float)static::getReservedStoreQuantity(
					$productId,
					$storeId,
				)
		);

		if ($summary)
		{
			static::addReservedQuantity($productId, $value);
		}
	}

	/**
	 * @param string|int $productId
	 * @param int $storeId
	 *
	 * @return null|float
	 */
	public static function getReservedStoreQuantity($productId, int $storeId): ?float
	{
		return self::getValue(
			static::RESERVER_STORE_QUANTITY,
			$productId,
			$storeId
		);
	}

	/**
	 * @param string|int|null $productId
	 */
	public static function resetReservedStoreQuantity($productId)
	{
		self::resetValue(static::RESERVER_STORE_QUANTITY, $productId);
	}

	/**
	 * @param string $type
	 * @param string|int $productId
	 * @param int $storeId
	 * @param int|float|string|null $value
	 */
	private static function setValue(string $type, $productId, int $storeId, $value): void
	{
		if (!isset(self::$values[$type]))
		{
			self::$values[$type] = [];
		}
		if (isset(self::$values[$type][$productId]))
		{
			self::$values[$type][$productId] = [];
		}
		self::$values[$type][$productId][$storeId] = (float)$value;
	}

	/**
	 * @param string $type
	 * @param string|int $productId
	 * @param int $storeId
	 *
	 * @return null|float
	 */
	private static function getValue(string $type, $productId, int $storeId): ?float
	{
		$value = null;
		if (isset(self::$values[$type][$productId][$storeId]))
		{
			$value = self::$values[$type][$productId][$storeId];
		}

		return $value;
	}

	/**
	 * @param string $type
	 * @param string|int|null $productId
	 *
	 * @return void
	 */
	private static function resetValue(string $type, $productId = null): void
	{
		if ($productId == null)
		{
			unset(self::$values[$type]);
		}
		else
		{
			unset(self::$values[$type][$productId]);
		}
	}

	private static function getSummaryValue(string $type, $productId): ?float
	{
		$result = null;
		if (
			isset(self::$values[$type][$productId])
			&& is_array(self::$values[$type][$productId])
		)
		{
			$result = (float)array_sum(self::$values[$type][$productId]);
		}

		return $result;
	}

	/**
	 * @param string|int $productId
	 * @param array $values
	 *
	 * @return void
	 */
	public static function setValues($productId, array $values): void
	{
		static::resetAllQuantity($productId);

		if (isset($values[static::QUANTITY]))
		{
			self::setValue(
				static::QUANTITY,
				$productId,
				CatalogProvider::getDefaultStoreId(),
				$values[static::QUANTITY]
			);
		}

		if (isset($values[static::AVAILABLE_QUANTITY]))
		{
			self::setValue(
				static::AVAILABLE_QUANTITY,
				$productId,
				CatalogProvider::getDefaultStoreId(),
				$values[static::AVAILABLE_QUANTITY]
			);
		}

		if (isset($values[static::RESERVED_QUANTITY]))
		{
			self::setValue(
				static::RESERVED_QUANTITY,
				$productId,
				CatalogProvider::getDefaultStoreId(),
				$values[static::RESERVED_QUANTITY]
			);
		}

		if (
			isset($values[static::RESERVER_STORE_QUANTITY])
			&& is_array($values[static::RESERVER_STORE_QUANTITY])
		)
		{
			foreach ($values[static::RESERVER_STORE_QUANTITY] as $storeId => $storeValue)
			{
				self::setValue(
					static::RESERVER_STORE_QUANTITY,
					$productId,
					$storeId,
					$storeValue
				);
			}
		}
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit