- Модуль: 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;
}