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