Всем привет!
На сайте есть каталог товаров, каждый товар с торговым предложением. У клиента система скидок и разные типы цен: оптовая, розничная и акционная. Если количество товароа в корзине меньше оптового количества, указанного у этого товара, то используется розничный ценник, если больше либо равно -- оптовый, если указан акционный -- используется он.
В то же время используется система скидок, реализованная через правила работы с корзиной. Формат такой: если сумма заказа от такой-то суммы до такой-то суммы применить скидку столько то процентов, если товар из конкретного раздела.
Но, как говорится, есть нюанс: система скидок должна отрабатывать только если используется оптовый ценник. Соответственно нужно либо заблокировать применение правил работы с корзиной, либо настроить правила работы с корзиной таким образом, чтобы обрабатывалось использование тех или иных цен. Но я так и не нашел способа это сделать.
В правилах работы с корзиной есть вариант условия на тип цен, но правило работы с корзиной перестает применяться, если указать это условие.
Переключение цен реализовано через событие OnGetOptimalPrice:
| Код |
|---|
AddEventHandler("catalog", "OnGetOptimalPrice", "MyGetOptimalPrice");
function MyGetOptimalPrice($productID, $quantity = 1, $arUserGroups = array(), $renewal = "N", $arPrices, $siteID = false, $arDiscountCoupons = false)
{
// Здесь происходит получение товара, его оптового количества и всех его цен
// Из них выбирается необходимая цена
$result = array(
"RESULT_PRICE" => array(
"PRICE_TYPE_ID" => $catalog_group_id,
"BASE_PRICE" => $price,
"CURRENCY" => 'RUB',
),
);
return $result;
} |
Скидки в правилах работы с корзиной настроены таким образом:

Вопрос: как подружить между собой скидки и разные типы цен?