Евгений Жуков, доброго дня.
Разраб у нас написал обработчик для выполнения задачи нашей исходной. У неавторизованных отрабатывает корректно, т.к. у неавторизованных пользователей отображается только открытая скидка (которую мы грузим вручную в карточку товара), а для авторизованных есть ещё скидка по клубной цене, т.е. у нас на сайте есть 2 параметра, отвечающие за скидки - это
акционная цена (поле в карточке товара -
тип цены) и есть ещё
клубная цена (настраивается через
правило работы с корзиной).
Написанный обработчик отрабатывает корректно, если пользователь не авторизован, т.к. у него задействован только 1 параметр - акционная цена (тип цены). Конфликт возникает тогда, когда пользователь авторизуется на сайте и появляется параметр клубная цена (правило корзины). И получается, что в корзине скидка задваивается, т.е. применяется и клубная цена, и акционная. Для нас это неприемлемо.
Сможете ли вы подсказать какое-то решение в данной ситуации? У нас разработчик не может найти решение.
Инфо:1) цена со скидкой в корзине
2) итоговая цена с задвоением скидки (клубной и акционной)
3) базовая цена.
Часть кода обработчика, где изменяется тип цены:
Код |
---|
function update_cart_loans($revert = false) {
global $_REQUEST;
$dbBasketItems = CSaleBasket::GetList(array(), array("LID" => SITE_ID, "FUSER_ID" => CSaleBasket::GetBasketUserID(), "ORDER_ID" => "NULL"), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "BASE_PRICE", "DISCOUNT_PRICE", "NOTES"));
while ($arItems = $dbBasketItems->Fetch()) {
// Получим актуальные цены
$arPrice = \CCatalogProduct::getOptimalPrice($arItems["PRODUCT_ID"], $arItems["QUANTITY"]);
$ar_res = CPrice::GetBasePrice($arItems["PRODUCT_ID"]);
$discount = \CCatalogDiscount::GetDiscountByProduct($arItems["PRODUCT_ID"]);
if ($arItems["NOTES"] == "Акционная цена" && !$revert)
{
$arFields = [
"PRICE" => $ar_res["PRICE"],
"BASE_PRICE" => $ar_res["PRICE"],
"DISCOUNT_PRICE" => $ar_res["PRICE"],
"NOTES" => "Розничная цена",
];
\CSaleBasket::Update($arItems["ID"], $arFields);
} else if ($revert)
{
global $USER;
if (!empty($discount))
{
$arFields = [
"PRICE" => $ar_res["PRICE"],
"BASE_PRICE" => $ar_res["PRICE"],
"DISCOUNT_PRICE" => $ar_res["PRICE"],
"NOTES" => "Розничная цена",
];
}
else
{
$arFields = [
"PRICE" => $arPrice["RESULT_PRICE"]["DISCOUNT_PRICE"],
"BASE_PRICE" => $arPrice["RESULT_PRICE"]["BASE_PRICE"],
"DISCOUNT_PRICE" => $arPrice["RESULT_PRICE"]["DISCOUNT"],
"NOTES" => "Акционная цена",
];
}
\CSaleBasket::Update($arItems["ID"], $arFields);
}
}
}
|