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/cvetdv.ru/bitrix/modules/sale/lib/internals/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/sale/lib/internals/providerbuilder.php
<?php

namespace Bitrix\Sale\Internals;

use Bitrix\Main;
use Bitrix\Sale;

/**
 * Class ProviderBuilder
 * @package Bitrix\Sale\Internals
 */
class ProviderBuilder extends ProviderBuilderBase
{
	/**
	 * @param Sale\BasketItemBase $basketItem
	 */
	public function addProductByBasketItem(Sale\BasketItemBase $basketItem)
	{
		$fields = array(
			'ITEM_CODE' => $basketItem->getProductId(),
			'BASKET_ID' => $basketItem->getId(),
			'BASKET_CODE' => $basketItem->getBasketCode(),
			'PRODUCT_ID' => $basketItem->getProductId(),
			'QUANTITY' => $basketItem->getNotPurchasedQuantity(),
			'RESERVED_QUANTITY' => $basketItem->getReservedQuantity(),
			'IS_BARCODE_MULTI' => $basketItem->isBarcodeMulti(),
			'BUNDLE_CHILD' => false,
			'SUBSCRIBE' => $basketItem->getField('SUBSCRIBE') === 'Y',
		);

		if ($basketItem instanceof Sale\BasketItem)
		{
			$fields['BUNDLE_CHILD'] = $basketItem->isBundleChild();
		}

		$this->addItem($basketItem->getProductId(), $fields);
	}

	/**
	 * @param Sale\ShipmentItem $shipmentItem
	 */
	public function addProductByShipmentItem(Sale\ShipmentItem $shipmentItem)
	{
		$basketItem = $shipmentItem->getBasketItem();
		$productId = $basketItem->getProductId();

		$fields = [
			'ITEM_CODE' => $productId,
			'BASKET_CODE' => $basketItem->getBasketCode(),
			'PRODUCT_ID' => $productId,
			'QUANTITY' => $shipmentItem->getQuantity(),
			'IS_BARCODE_MULTI' => $basketItem->isBarcodeMulti(),
			'BUNDLE_CHILD' => $basketItem->isBundleChild(),
			'SHIPMENT_ITEM_DATA' => [
				$shipmentItem->getInternalIndex() => $shipmentItem->getQuantity(),
			],
			'SHIPMENT_ITEM' => $shipmentItem,
		];

		if (Sale\Configuration::useStoreControl())
		{
			$storeData = Sale\Internals\Catalog\Provider::createMapShipmentItemStoreData($shipmentItem);

			$reservedQuantity = 0;
			$needReserveByStore = [];

			if ($storeData)
			{
				foreach ($storeData as $item)
				{
					$reservedQuantity += $item['RESERVED_QUANTITY'];

					$needReserveByStore[$item['STORE_ID']] = $item['RESERVED_QUANTITY'] > 0;
				}
			}

			$fields['STORE_DATA'] = array(
				$shipmentItem->getInternalIndex() => $storeData,
			);

			$fields['NEED_RESERVE_BY_STORE'] = [
				$shipmentItem->getInternalIndex() => $needReserveByStore,
			];
		}
		else
		{
			$reservedQuantity = $basketItem->getReservedQuantity();
		}

		$fields['RESERVED_QUANTITY'] = $reservedQuantity;
		$fields['NEED_RESERVE'] = [
			$shipmentItem->getInternalIndex() => $reservedQuantity > 0,
		];

		$this->addItem($productId, $fields);
	}

	/**
	 * @param array $productData
	 * @throws Main\ObjectNotFoundException
	 */
	public function addProductData(array $productData)
	{
		if ($productData['QUANTITY'] == 0)
		{
			return;
		}

		/** @var Sale\ShipmentItem $shipmentItem */
		$shipmentItem = $productData['SHIPMENT_ITEM'] ?? null;
		$basketItem = $productData['BASKET_ITEM'];
		$productId = $productData['PRODUCT_ID'] ?? $basketItem->getProductId();

		$fields = [
			'ITEM_CODE' => $productId,
			'BASKET_CODE' => $basketItem->getBasketCode(),
			'PRODUCT_ID' => $productId,
			'QUANTITY' => $productData['QUANTITY'],
			'BUNDLE_PARENT' => $basketItem->isBundleParent(),
			'BUNDLE_CHILD' => $basketItem->isBundleChild(),
			'IS_BARCODE_MULTI' => $basketItem->isBarcodeMulti(),
			'RESERVED_QUANTITY' => $productData['RESERVED_QUANTITY'] ?? 0.0,
		];

		if ($shipmentItem)
		{
			$fields['SHIPMENT_ITEM'] = $shipmentItem;
			$fields['SHIPMENT_ITEM_DATA'] = [$shipmentItem->getInternalIndex() => $shipmentItem->getQuantity()];
			$fields['NEED_RESERVE'] = [$shipmentItem->getInternalIndex() => $productData["NEED_RESERVE"] ?? null];
		}

		if (Sale\Configuration::useStoreControl())
		{
			if ($shipmentItem)
			{
				$storeData = Sale\Internals\Catalog\Provider::createMapShipmentItemStoreData($shipmentItem);

				if (!empty($storeData))
				{
					$fields['STORE_DATA'] = [
						$shipmentItem->getInternalIndex() => $storeData,
					];
				}
			}
		}

		if (isset($productData['NEED_RESERVE_BY_STORE']))
		{
			$fields['NEED_RESERVE_BY_STORE'] = $productData['NEED_RESERVE_BY_STORE'];
		}

		if (isset($productData['QUANTITY_BY_STORE']))
		{
			$fields['QUANTITY_BY_STORE'] = $productData['QUANTITY_BY_STORE'];
		}

		if (isset($productData['RESERVED_QUANTITY_BY_STORE']))
		{
			$fields['RESERVED_QUANTITY_BY_STORE'] = $productData['RESERVED_QUANTITY_BY_STORE'];
		}

		$this->addItem($productId, $fields);
	}

	/**
	 * @param PoolQuantity $pool
	 * @param array $productTryShipList
	 *
	 * @return Sale\Result
	 * @throws Main\ObjectNotFoundException
	 */
	public function setItemsResultAfterTryShip(PoolQuantity $pool, array $productTryShipList)
	{
		$products = $this->getItems();

		if (empty($products))
		{
			return new Sale\Result();
		}

		foreach ($products as $productId => $productData)
		{
			if (!isset($productTryShipList[$productId]))
			{
				continue;
			}

			if (empty($productData['SHIPMENT_ITEM_DATA_LIST']))
			{
				continue;
			}

			if (empty($productData['SHIPMENT_ITEM_LIST']))
			{
				continue;
			}

			/**
			 * @var int $shipmentItemIndex
			 * @var Sale\ShipmentItem $shipmentItem
			 */
			foreach ($productData['SHIPMENT_ITEM_DATA_LIST'] as $shipmentItemIndex => $shipmentItemQuantity)
			{
				$shipmentItem = $productData['SHIPMENT_ITEM_LIST'][$shipmentItemIndex] ?? null;
				if ($shipmentItem === null)
				{
					continue;
				}

				$shipment = $shipmentItem->getCollection()->getShipment();

				$coefficient = -1;
				if ($shipment->needShip() === Sale\Internals\Catalog\Provider::SALE_TRANSFER_PROVIDER_SHIPMENT_NEED_NOT_SHIP)
				{
					$coefficient = 1;
				}

				$shipmentItemQuantity = $shipmentItem->getQuantity();

				/** @var Sale\ShipmentItemStoreCollection $shipmentItemStoreCollection */
				$shipmentItemStoreCollection = $shipmentItem->getShipmentItemStoreCollection();
				if ($shipmentItemStoreCollection)
				{
					/** @var Sale\ShipmentItemStore $shipmentItemStore */
					foreach ($shipmentItemStoreCollection as $shipmentItemStore)
					{
						$quantity = $coefficient * $shipmentItemStore->getQuantity();
						$pool->addByStore(PoolQuantity::POOL_QUANTITY_TYPE, $productId, $shipmentItemStore->getStoreId(), $quantity);

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

				if ($shipmentItemQuantity > 0)
				{
					$pool->add(PoolQuantity::POOL_QUANTITY_TYPE, $productId, $shipmentItemQuantity);
				}

				$foundItem = false;
				$poolItems = Sale\Internals\ItemsPool::get($shipment->getOrder()->getInternalId(), $productId);
				if (!empty($poolItems))
				{
					/** @var Sale\ShipmentItem $poolItem */
					foreach ($poolItems as $poolItem)
					{
						if (
							$poolItem instanceof Sale\ShipmentItem
							&& $poolItem->getInternalIndex() == $shipmentItem->getInternalIndex()
						)
						{
							$foundItem = true;
							break;
						}
					}
				}

				if (!$foundItem)
				{
					Sale\Internals\ItemsPool::add($shipment->getOrder()->getInternalId(), $productId, $shipmentItem);
				}
			}
		}

		return new Sale\Result();
	}

	/**
	 * @return string
	 */
	public function getTransferClassName()
	{
		return '\Bitrix\Sale\Internals\TransferProvider';
	}

}

Youez - 2016 - github.com/yon3zu
LinuXploit