День добрый.
мне нужно получить цены из корзины на товары со скидками.
решил воспользоваться событием OnSaleBasketSaved
[CODE]
public function OnSaleBasketBeforeSaved_v_32(\Bitrix\Main\Event $event)
{
global $USER;
if(!is_object($USER)){
$USER = new CUser();
}
$userId=$USER->GetID();
if ($userId=="81035" ){//Пока выводим только для меня
$basket = $event->getParameter("ENTITY");
$discounts = \Bitrix\Sale\Discount::buildFromBasket($basket, new \Bitrix\Sale\Discount\Context\Fuser($basket->getFUserId(true)));
$discounts->calculate();
$result = $discounts->getApplyResult(true);
$basketItems = $basket->getBasketItems();
$resultitem=[];
foreach ($basketItems as $basketItem ) {
$basketCode = $basketItem->getBasketCode();
if (isset($result["PRICES"]['BASKET'][$basketCode]))
{
$sum = $result["PRICES"]['BASKET'][$basketCode]["PRICE"]*$basketItem->getQuantity();
} else {
$sum = $basketItem->getFinalPrice();
}
$resultitem[$basketItem->getId()]=$sum;
}
file_put_contents($_SERVER["DOCUMENT_ROOT"]."/event_32.txt", "\n** ".date("d.m.Y H:i:s")." ****". __FILE__ ." ". __LINE__ ."*****result*****\n".print_r($resultitem, true), FILE_APPEND | LOCK_EX);
}
}
[/CODE]
в $result вижу что есть скидка
[CODE]
Array
(
[BASKET_ROUND] => Array
(
[2074986] => Array
(
[APPLY] => Y
[ROUND_RULE] => Array
(
[PRICE] => 0.0000
[ROUND_TYPE] => 1
[ROUND_PRECISION] => 1.0000
[CATALOG_GROUP_ID] => 1
)
)
)
[DISCOUNT_LIST] => Array
(
[392] => Array
(
[ID] => 392
[NAME] => Сделай заказ на 3000 рублей и получи скидку 500 рублей.
[MODULE_ID] => sale
[DISCOUNT_ID] => 392
[USE_COUPONS] => N
[ACTIONS_DESCR] => Array
(
[BASKET] => скидка 500 на общую сумму группы товаров
)
[ACTIONS_DESCR_DATA] => Array
(
[BASKET] => Array
(
[0] => Array
(
[TYPE] => 2
[VALUE] => 500
[VALUE_TYPE] => S
[VALUE_ACTION] => D
[VALUE_UNIT] => RUB
)
)
)
[APPLY] => Y
[EDIT_PAGE_URL] => /bitrix/admin/sale_discount_edit.php?lang=ru&ID=254
)
)
[COUPON_LIST] => Array
(
)
[RESULT] => Array
(
[BASKET] => Array
(
[2074986] => Array
(
[0] => Array
(
[DISCOUNT_ID] => 392
[COUPON_ID] =>
[APPLY] => Y
[DESCR] => Array
(
[0] => скидка 500 на общую сумму группы товаров
)
)
)
)
[DELIVERY] => Array
(
)
)
)
[/CODE]
но нет суммы $result["PRICES"]['BASKET'] для товара
При этом если сделать расчет на отдельной странице, а не на событии все в наличии
[CODE]
[PRICES] => Array
(
[BASKET] => Array
(
[2074986] => Array
(
[BASE_PRICE] => 1799.0000
[PRICE] => 1579.4
[DISCOUNT] => 219.6
)
[2074988] => Array
(
[BASE_PRICE] => 249.0000
[PRICE] => 218.6
[DISCOUNT] => 30.4
)
)
[DELIVERY] => Array
(
[BASE_PRICE] =>
[PRICE] => 0
[DISCOUNT] => 0
)
)
[/CODE]
мне нужно получить цены из корзины на товары со скидками.
решил воспользоваться событием OnSaleBasketSaved
[CODE]
public function OnSaleBasketBeforeSaved_v_32(\Bitrix\Main\Event $event)
{
global $USER;
if(!is_object($USER)){
$USER = new CUser();
}
$userId=$USER->GetID();
if ($userId=="81035" ){//Пока выводим только для меня
$basket = $event->getParameter("ENTITY");
$discounts = \Bitrix\Sale\Discount::buildFromBasket($basket, new \Bitrix\Sale\Discount\Context\Fuser($basket->getFUserId(true)));
$discounts->calculate();
$result = $discounts->getApplyResult(true);
$basketItems = $basket->getBasketItems();
$resultitem=[];
foreach ($basketItems as $basketItem ) {
$basketCode = $basketItem->getBasketCode();
if (isset($result["PRICES"]['BASKET'][$basketCode]))
{
$sum = $result["PRICES"]['BASKET'][$basketCode]["PRICE"]*$basketItem->getQuantity();
} else {
$sum = $basketItem->getFinalPrice();
}
$resultitem[$basketItem->getId()]=$sum;
}
file_put_contents($_SERVER["DOCUMENT_ROOT"]."/event_32.txt", "\n** ".date("d.m.Y H:i:s")." ****". __FILE__ ." ". __LINE__ ."*****result*****\n".print_r($resultitem, true), FILE_APPEND | LOCK_EX);
}
}
[/CODE]
в $result вижу что есть скидка
[CODE]
Array
(
[BASKET_ROUND] => Array
(
[2074986] => Array
(
[APPLY] => Y
[ROUND_RULE] => Array
(
[PRICE] => 0.0000
[ROUND_TYPE] => 1
[ROUND_PRECISION] => 1.0000
[CATALOG_GROUP_ID] => 1
)
)
)
[DISCOUNT_LIST] => Array
(
[392] => Array
(
[ID] => 392
[NAME] => Сделай заказ на 3000 рублей и получи скидку 500 рублей.
[MODULE_ID] => sale
[DISCOUNT_ID] => 392
[USE_COUPONS] => N
[ACTIONS_DESCR] => Array
(
[BASKET] => скидка 500 на общую сумму группы товаров
)
[ACTIONS_DESCR_DATA] => Array
(
[BASKET] => Array
(
[0] => Array
(
[TYPE] => 2
[VALUE] => 500
[VALUE_TYPE] => S
[VALUE_ACTION] => D
[VALUE_UNIT] => RUB
)
)
)
[APPLY] => Y
[EDIT_PAGE_URL] => /bitrix/admin/sale_discount_edit.php?lang=ru&ID=254
)
)
[COUPON_LIST] => Array
(
)
[RESULT] => Array
(
[BASKET] => Array
(
[2074986] => Array
(
[0] => Array
(
[DISCOUNT_ID] => 392
[COUPON_ID] =>
[APPLY] => Y
[DESCR] => Array
(
[0] => скидка 500 на общую сумму группы товаров
)
)
)
)
[DELIVERY] => Array
(
)
)
)
[/CODE]
но нет суммы $result["PRICES"]['BASKET'] для товара
При этом если сделать расчет на отдельной странице, а не на событии все в наличии
[CODE]
[PRICES] => Array
(
[BASKET] => Array
(
[2074986] => Array
(
[BASE_PRICE] => 1799.0000
[PRICE] => 1579.4
[DISCOUNT] => 219.6
)
[2074988] => Array
(
[BASE_PRICE] => 249.0000
[PRICE] => 218.6
[DISCOUNT] => 30.4
)
)
[DELIVERY] => Array
(
[BASE_PRICE] =>
[PRICE] => 0
[DISCOUNT] => 0
)
)
[/CODE]