<b>$basket->refreshData(['PRICE']);</b>
$discounts = Sale\Discount::buildFromBasket($basket, new Sale\Discount\Context\Fuser($fuserId));
$discounts->calculate();
$showPrices = $discounts->getShowPrices();
$arItems = [];
$obBasket = Sale\Basket::getList([
'filter' => [
'FUSER_ID' => $fuserId,
"ORDER_ID" => null,
'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
'CAN_BUY' => 'Y',
'DELAY' => 'N'
],
'select' => [
"ID", "NAME", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY",
"CURRENCY", "SUBSCRIBE", "PRODUCT_PROVIDER_CLASS", "PRODUCT_PRICE_ID"
]
]);
while($bItem = $obBasket->Fetch()){
$bItem['PRICE'] = Sale\PriceMaths::roundPrecision($showPrices['BASKET'][$bItem['ID']]['SHOW_PRICE']);
$bItem['BASE_PRICE'] = Sale\PriceMaths::roundPrecision($showPrices['BASKET'][$bItem['ID']]['SHOW_BASE_PRICE']);
$bItem['DISCOUNT_PRICE'] = Sale\PriceMaths::roundPrecision($showPrices['BASKET'][$bItem['ID']]['SHOW_DISCOUNT']);
$bItem['SUM'] = $bItem['PRICE'] * (float)$bItem['QUANTITY'];
$bItem['PRINT_SUM'] = \CCurrencyLang::CurrencyFormat($bItem['SUM'], $bItem['CURRENCY'], true);
$bItem['PRINT_BASE_PRICE'] = \CCurrencyLang::CurrencyFormat($bItem['BASE_PRICE'], $bItem['CURRENCY'], true);
$bItem['PRINT_PRICE'] = \CCurrencyLang::CurrencyFormat($bItem['PRICE'], $bItem['CURRENCY'], true);
$arItems[$bItem['ID']] = $bItem;
}
В функции происходит расчет скидок на товар добавленный в корзину. Но при выполнении
$basket->refreshData(['PRICE']); ранее сохраненная цена на товар сбрасывается на
минимальную из типа цен и скидки уже рассчитываются на эту цену. Как исправить эту проблему?
Когда добавляю товар в корзину я строго указываю какой тип цен использовать (см. ниже).
Функция добавления товара в корзину:
$item = $basket->createItem('catalog', $productId);
$propertyCollection = $item->getPropertyCollection();
if ($propertyCollection)
$propertyCollection->setProperty($arProps);
$PRICE = \CPrice::GetList(false, ['PRODUCT_ID' => $productId, 'CATALOG_GROUP_NAME' => $PRICE_CODE])->fetch();
$item->setFields([
'QUANTITY' => $quantity,
'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
'PRODUCT_PROVIDER_CLASS' => \Bitrix\Catalog\Product\Basket::getDefaultProviderName(),
'PRICE' => $PRICE['PRICE'],
"BASE_PRICE" => $PRICE['PRICE'],
"PRICE_TYPE_ID" => $PRICE["CATALOG_GROUP_ID"],
"PRODUCT_PRICE_ID" => $PRICE["ID"],
]);
$item->save();