cancel
Showing results for 
Search instead for 
Did you mean: 

Помогите с правилами скидок..

Помогите с правилами скидок..

Здравствуйте!
Прошу помощи в настройке правил корзины. нужно изолировать правила друг от друга.

Пример: 
в корзине 5 товаров.  общей суммой в 12 000р

На товар 1 и 2 действует скидка 10% 
На Все товары действует правило  если Итог больше и равно 10 000р, то скидка 5%.


Проблема в том,  что  5% от суммы заказа накладывается и на  товары 1 и 2 у которых уже 10% скидки, в итоге на них получается скидка около 14%. 

Как сделать так. чтобы на товар 1 и 2 действовала скидка 10%, а на товар 3 4 5  действовала скидка от суммы заказа 5%, но не действовала на товары 1 и 2. Тоесть товары 1 и 2 имеют свою скидку но учавствуют  срабатывании правила от суммы заказа.

6 REPLIES

Re: Помогите с правилами скидок..

Экспериментируйте с настройкой прерывания применения ценовых правил (см. Stop Further Rules Processing) и порядком их применения.

http://smartceo.ru
Методология организации интернет-торговли, технические решения, консалтинг.

Re: Помогите с правилами скидок..

Пробовали. проблема в том, что нельзя изолировать правила друг от друга..

Если поставить галочку Stop Further Processing, то после первого сработавшего правила (из двух в примере, например, 10 % на 2 книги из 5ти)  второе правило, 5% от суммы в корзине не сработает. (и наоборот если поменять приоритеты)

Re: Помогите с правилами скидок..

Вроде не реально сделать стандартными средствами. Нет условия "к товару не применена другая скидка". Если сможете эти товары как-то по другому отсеять, то поиграйтесь с закладкой "Действия", там есть "Применить правило только для товаров в корзине, удовлетворяющим следующим условиям (оставьте пустым для всех товаров)".

 


ET Web Solutions
extensions, custom work, support

Re: Помогите с правилами скидок..

Ну вот никак ) В данном примере мы отсеиваем те товары, у которых своя скидка 10% (тут все ок), а второе правило действует на всю корзину и отделить товары на которые скидка отдельная, никак не выходит. Скидки суммируются. Думали может не знаем о каких то условиях. Стандартными средствами никак не получается. Может быть кто-то может посоветовать уже готовый сторонний модуль на замену стандартного, в котором можно более гибко настраивать правила скидок? 

Re: Помогите с правилами скидок..

Мне тоже интересно как можно не применять скидки в корзине на товары, у которых есть своя персональная скидка. 
И как это можно программно поправить.. 

Re: Помогите с правилами скидок..

Есть решение, как это реализовать. Но надо всё же немного кода написать.
Есть метод process в классе Mage_SalesRule_Model_Validator он рассчитывает скидку и с нем есть вот такая строка https://github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/core/Mage/SalesRule/Model/Valid...

Соответственно можно подписаться на событие salesrule_validator_process и вызвать свой обработчик:

 

<salesrule_validator_process>
<observers>
<my_salesrule_validator_process>
<class>my_module/observer</class>
<method>salesruleValidatorProcess</method>
</my_salesrule_validator_process>
</observers>
</salesrule_validator_process>

 

и в методе написать что-то вроде

public function salesruleValidatorProcess($event)
{
$result = $event->getResult();
$discountAmount = $result->getDiscountAmount();
$item = $event->getItem();
$qty = $item->getQty();

$baseProductTotal = $qty * $item->getProduct()->getPrice();
$baseItemTotal = $qty * $item->getPrice();

$productDiscountPercent = 1 - $baseItemTotal / $baseProductTotal;
$itemDiscountPercent = $discountAmount / $baseItemTotal;

if ($productDiscountPercent == 0) {
return;
}

if ($itemDiscountPercent > $productDiscountPercent) {
$newDiscountPercent = ($itemDiscountPercent - $productDiscountPercent) / (1 - $productDiscountPercent);
$discountAmount = $newDiscountPercent * $baseItemTotal;
$baseDiscountAmount = $discountAmount;
$result->setDiscountAmount($discountAmount);
$result->setBaseDiscountAmount($baseDiscountAmount);
$item->setDiscountPercent($newDiscountPercent);
} else {
$result->setDiscountAmount(0);
$result->setBaseDiscountAmount(0);
$item->setDiscountPercent(0);
}
}

 

Наверно можно изящней, но главное принцип Smiley Happy