• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/blocks/orderbasket.php
  • Класс: BitrixSaleHelpersAdminBlocksOrderBasket
  • Вызов: OrderBasket::prepareData
public function prepareData(array $inParams = array())
{
	if($this->data === null)
	{
		$inParams['ADDED_PRODUCTS'] ??= null;
		$isArrayAddedProducts = is_array($inParams['ADDED_PRODUCTS']);

		$result = array(
			"ITEMS" => array(),
			"WEIGHT" => 0
		);

		$basket = $this->order->getBasket();
		$discounts = !empty($inParams["DISCOUNTS"]) ? $inParams["DISCOUNTS"] : OrderEdit::getDiscountsApplyResult($this->order, true);

		if(!$basket)
		{
			$result["WEIGHT_FOR_HUMAN"] = roundEx(floatval(0), SALE_WEIGHT_PRECISION);
			$this->data = $result;
			return $result;
		}

		$result["WEIGHT"] = $basket->getWeight();
		$result["WEIGHT_FOR_HUMAN"] = roundEx(floatval($result["WEIGHT"]/$this->weightKoef), SALE_WEIGHT_PRECISION);
		$items = $basket->getBasketItems();

		if (self::$catalogIncluded === null)
			self::$catalogIncluded = MainLoader::includeModule('catalog');

		if(!empty($inParams["ADDED_PRODUCTS"]))
			$result["ADDED_PRODUCTS"] = array();

		$catalogProductIds = array();

		/** @var BitrixSaleBasketItem $item */
		foreach($items as $item)
			if($item->getField('MODULE') == 'catalog')
				$catalogProductIds[] = $item->getProductId();

		$catalogPreparedData = static::getProductsData($catalogProductIds, $this->order->getSiteId(), $this->visibleColumns, $this->order->getUserId());
		$providerData = Provider::getProductData($basket, array("PRICE"));

		/** @var BitrixSaleBasketItem $item */
		foreach($items as $item)
		{
			$params = array();
			$productId = $item->getProductId();

			$params["BASKET_CODE"] = $basketCode = $item->getBasketCode();
			$params["QUANTITY"] = SaleBasketItem::formatQuantity($item->getField('QUANTITY'));
			$params["NOTES"] = $item->getField("NOTES");
			$params["MODULE"] = $item->getField("MODULE");
			$params['TYPE'] = (int)$item->getField('TYPE');

			if($params["MODULE"] == 'catalog')
			{
				if(!empty($catalogPreparedData[$productId]['OFFERS_IBLOCK_ID']))
					$params["OFFERS_IBLOCK_ID"] = $catalogPreparedData[$productId]['OFFERS_IBLOCK_ID'];

				if(!empty($catalogPreparedData[$productId]['IBLOCK_ID']))
					$params["IBLOCK_ID"] = $catalogPreparedData[$productId]['IBLOCK_ID'];

				if(!empty($catalogPreparedData[$productId]['PRODUCT_ID']))
					$params["PRODUCT_ID"] = $catalogPreparedData[$productId]['PRODUCT_ID'];
			}

			if(!isset($params["OFFER_ID"]))
				$params["OFFER_ID"] = $productId;

			if(isset($discounts["RESULT"]["BASKET"][$basketCode]) && is_array($discounts["RESULT"]["BASKET"][$basketCode]))
				foreach($discounts["RESULT"]["BASKET"][$basketCode] as $discount)
					$params["DISCOUNTS"][$discount["DISCOUNT_ID"]] = $discount;

			if(isset($discounts["PRICES"]["BASKET"][$basketCode]))
				$params["PRICE"] = $discounts["PRICES"]["BASKET"][$basketCode]["PRICE"];
			else
				$params["PRICE"] = $item->getPrice();

			//alias for backward compatibility.
			$params["PRICE_BASE"] = $params["BASE_PRICE"] = $item->getField("BASE_PRICE");
			$params["CUSTOM_PRICE"] = $item->isCustomPrice() ? "Y" : "N";

			if (
				!$isArrayAddedProducts
				||
				(
					!empty($inParams["ADDED_PRODUCTS"])
					&& in_array($productId, $inParams["ADDED_PRODUCTS"])
				)
			)
			{
				$params = $params + self::getPropsForBasketItem($item, $catalogPreparedData);

				if ($isArrayAddedProducts && in_array($productId, $inParams["ADDED_PRODUCTS"]))
				{
					$result["ADDED_PRODUCTS"][] = $basketCode;
				}
			}

			//Let's cache provider product data into form field
			if(!Provider::isExistsTrustData($this->order->getSiteId(), 'sale', $item->getProductId()))
			{
				$basketItem = $basket->getItemByBasketCode($basketCode);
				if($basketItem)
				{
					if (!empty($providerData[$basketCode]))
					{
						BitrixSaleHelpersAdminOrderEdit::setProviderTrustData($item, $this->order, $providerData[$basketCode]);
						$params["PROVIDER_DATA"] = serialize($providerData[$basketCode]);
					}
				}
			}
			else
			{
				$providerData = Provider::getTrustData($this->order->getSiteId(), 'sale', $item->getProductId());

				if(is_array($providerData) && !empty($providerData))
				{
					$params["PROVIDER_DATA"] = serialize($providerData);
				}
			}

			if (!empty($params["SET_ITEMS"]) && is_array($params["SET_ITEMS"]))
			{
				$offerToIdx = array();

				foreach($params["SET_ITEMS"] as $idx => $childFields)
					$offerToIdx[$childFields["OFFER_ID"]] = $idx;

				$setItems = [];

				if($children = $item->getBundleCollection())
				{
					/** @var SaleBasketItemBase $child */
					foreach($children->getBasketItems() as $idx => $child)
					{
						$fields = $child->getFieldValues();

						if(isset($offerToIdx[$fields['PRODUCT_ID']]))
						{
							$fields = $fields + $params["SET_ITEMS"][$offerToIdx[$fields['PRODUCT_ID']]];
						}
						else
						{
							$fields["OFFER_ID"] = $fields["PRODUCT_ID"];
						}

						$fields["IS_ENABLED"] = ($fields['CAN_BUY'] === 'N') ? 'N' : 'Y';

						$setItems[$idx] = $fields;
					}

					$params["SET_ITEMS"] = $setItems;
				}

				$params["SET_ITEMS_DATA"] = serialize($params["SET_ITEMS"]);
			}
			elseif($item->isBundleParent())
			{
				$params["SET_ITEMS"] = array();

				if($children = $item->getBundleCollection())
				{
					/** @var BitrixSaleBasketItem $child */
					foreach($children->getBasketItems() as $child)
					{
						$childFields = $child->getFieldValues();
						$childFields["OFFER_ID"] = $child->getProductId();
						$childFields["IS_SET_ITEM"] = "Y";
						$childFields["IS_SET_PARENT"] = "N";
						$childFields["IS_ENABLED"] = ($childFields['CAN_BUY'] === 'N') ? 'N' : 'Y';
						$params["SET_ITEMS"][] = $childFields;
					}
				}

				if(!empty($params["SET_ITEMS"]))
				{
					$params["IS_SET_PARENT"] = "Y";
				}
			}

			$params["IS_ENABLED"] = (($params['CAN_BUY'] ?? null) === 'N') ? 'N' : 'Y';

			$result["ITEMS"][$basketCode] = $params;
		}

		$result = array_merge(
			$result, $this->getPrices($discounts)
		);

		$result["ITEMS_ORDER"] = array_keys($result["ITEMS"]);

		if (empty($inParams["SKIP_SKU_INFO"]))
		{
			$result = $this->getOffersSkuParams($result, $this->visibleColumns);
		}

		$this->data = $result;
	}

	return $this->data;
}