• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/blocks/orderbasket.php
  • Класс: BitrixSaleHelpersAdminBlocksOrderBasket
  • Вызов: OrderBasket::getPropsForBasketItem
protected function getPropsForBasketItem($item, array $preparedData = array())
{
	$params = array();

	/** @var BitrixSaleBasketItem $item */
	if (self::$catalogIncluded === null)
		self::$catalogIncluded = MainLoader::includeModule('catalog');

	$productId = $item->getProductId();

	if($item->getField("MODULE") == "catalog")
	{
		if(!empty($preparedData[$item->getProductId()]))
		{
			$params = $preparedData[$item->getProductId()];
		}
		else
		{
			$res = static::getProductsData(array($productId), $this->order->getSiteId(), $this->visibleColumns, $this->order->getUserId());
			$params = $res[$productId];
		}
	}

	if(intval($item->getField("MEASURE_CODE")) > 0)
		$params["MEASURE_CODE"] = intval($item->getField("MEASURE_CODE"));
	elseif(!isset($params["MEASURE_CODE"]))
		$params["MEASURE_CODE"] = 0;

	if($item->getField("MEASURE_NAME") <> '')
		$params["MEASURE_TEXT"] = $item->getField("MEASURE_NAME");
	elseif(!isset($params["MEASURE_TEXT"]))
		$params["MEASURE_TEXT"] = "";

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

	$params["PRODUCT_PROVIDER_CLASS"] = $item->getProvider();
	$id = $params["PRODUCT_ID"] ?? 0;
	$params = array_merge($params, $item->getFieldValues(), array("PRODUCT_ID" => $id));

	//If product became bundle, but in saved order it is a simple product.
	if($item->getBasketCode() == intval($item->getBasketCode()) && !$item->isBundleParent() && !empty($params['SET_ITEMS']))
	{
		unset($params['SET_ITEMS'], $params['OLD_PARENT_ID']);
		$params['IS_SET_PARENT'] = 'N';
	}

	$params["PROPS"] = array();

	/** @var BitrixSaleBasketPropertyItem $property */
	foreach($item->getPropertyCollection() as  $property)
	{
		$propKey = 'PROPERTY_'.$property->getField("CODE").'_VALUE';

		if(isset($params['PRODUCT_PROPS_VALUES'][$propKey]))
		{
			$params['PRODUCT_PROPS_VALUES'][$propKey] = $property->getField("VALUE");
		}

		$params["PROPS"][] = array(
			"VALUE" => $property->getField("VALUE"),
			"NAME" => $property->getField("NAME"),
			"CODE" => $property->getField("CODE"),
			"SORT" => $property->getField("SORT"),
			"ID" => $property->getField("ID")
		);
	}

	//Let's cache provider product data into form field
	if(Provider::isExistsTrustData($this->order->getSiteId(), 'sale', $item->getProductId()))
	{
		$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();
		$items = [];

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

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

				if(isset($offerToIdx[$fields['PRODUCT_ID']]))
				{
					$items[$idx] = $fields + $params["SET_ITEMS"][$offerToIdx[$fields['PRODUCT_ID']]];
				}
				else //Child have been deleted from bundle after order been created
				{
					$res = static::getProductsData(array($fields["PRODUCT_ID"]), $this->order->getSiteId(), $this->visibleColumns, $this->order->getUserId());

					if(!empty($res[$fields["PRODUCT_ID"]]))
					{
						$fields = array_merge($res[$fields["PRODUCT_ID"]], $fields);
					}

					$fields["OFFER_ID"] = $fields["PRODUCT_ID"];
					$fields["IS_SET_ITEM"] = "Y";
					$fields["IS_SET_PARENT"] = "N";
					$fields["OLD_PARENT_ID"] = $params["OLD_PARENT_ID"];
					$items[$idx] = $fields;
				}
			}

			sortByColumn($items, array("SORT" => SORT_DESC), '');
			$params["SET_ITEMS"] = $items;
		}

		$params["SET_ITEMS_DATA"] = serialize($params["SET_ITEMS"]);
	}

	return $params;
}