Отменять скидки на товар в зависимости от доставки - простая задача без решения.
Всем привет.
Столкнулся с проблемой, что скидки на товар в Minishop не связаны со скидками доставки.
А задача такая, чтобы давать скидки на товар при самовывозе, и не давать при доставке.
Что имеем: разные скидки на товар в зависимости от категории или производителя — все отлично.
Скидка сохраняется при самовывозе — тоже все ок.
Но при выборе доставки все скидки нужно обнулить… И это вот никак не получается сделать.
Более того, пока что я не смог найти дополнений платных и бесплатных, которые помогли бы это сделать…
Был ли у кого опыт?
Может все таки есть дополнение?
Есть решение писать самому по событию, но по какому?
В справочнике минишоп все очень кратко, упоминается событие msOnBeforeSaveOrder — но никакой информации более подробно нет.
Столкнулся с проблемой, что скидки на товар в Minishop не связаны со скидками доставки.
А задача такая, чтобы давать скидки на товар при самовывозе, и не давать при доставке.
Что имеем: разные скидки на товар в зависимости от категории или производителя — все отлично.
Скидка сохраняется при самовывозе — тоже все ок.
Но при выборе доставки все скидки нужно обнулить… И это вот никак не получается сделать.
Более того, пока что я не смог найти дополнений платных и бесплатных, которые помогли бы это сделать…
Был ли у кого опыт?
Может все таки есть дополнение?
Есть решение писать самому по событию, но по какому?
В справочнике минишоп все очень кратко, упоминается событие msOnBeforeSaveOrder — но никакой информации более подробно нет.
Комментарии: 5
Создай свой класс обработки доставки и там убирай уже скидки у товара, если его выбрали
В справочнике минишоп все очень кратко, упоминается событие msOnBeforeSaveOrder — но никакой информации более подробно нет.А какая информация еще нужна например?
Давайте рассуждать. Чтобы было легче идём сюда. Событие msOnBeforeSaveOrder как-то связано с сохранением заказа, учитывая задачу, пользователя надо бы оповестить о том, что выбрав доставку он теряет скидки и хорошо бы показать сколько он в итоге должен заплатить. На этапе сохранения заказа это сделать невозможно. Однако, если присмотреться к списку событий внимательно, то можно заметить, что порядок событий в нём точно такой же в каком они происходят при совершении покупки. И тогда становится очевидным, что перед сохранением заказа происходит ещё много событий. Какое же из них выбрать? Я думаю то, которое как-то связано со стоимостью заказа, ведь в конечном итоге меняется именно она. Я бы начал с msOnBeforeGetOrderCost, в него передается экземпляр класса корзина и экземпляр класса заказ. Из второго объекта получаем способ доставки, если это не самовывоз делаем так
if($order->get('delivery') != 1){
$tmp = $cart->get();
foreach($tmp as $k => $v){
$product = $modx->getObject('modResource', array('class_key' => 'msProduct', 'id' => $v['id']));
$tmp[$k][$v]['price'] = $product->get('price');
}
} else{
// скидки надо возвращать, если выбран самовывоз
}
$cart->set($tmp);
Код выше это, конечно, не окончательное решение, а просто для направления мысли.
Спасибо! Это в нужную сторону.
Посмотрите тут, что-то подобное уже обсуждалось.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.