Правила корзины покупок с пользовательским условием?


Я сделал купон [код купона = БЕЗ КУПАНИЯ] если category равно swimming equipment и hobby равно swimming, будет скидка 50%.

И теперь у меня проблема с оформлением заказа в 3 этапа. Вот описание...

  1. Корзина для оформления заказа : чтобы подать заявку на купон
  2. Первый шаг : Доставка и выставление счетов Адрес
  3. Второй шаг : Выберите свое хобби (есть еще одно sales_flat_quote table, sales_flat_quote_hobby)
  4. Заключительный шаг : Оформить заказ->Обзор

Что я хотел, так это: когда купон применен, а хобби - плавание, третий шаг меняет цену на цену каждого продукта, и купон все еще отображается там.

Как перехватить купон после шага хобби?


Примерный пример шаг за шагом:

1. В корзину он уже добавлен

  • Обычная цена купальника составляет 100 долларов США (Категория снаряжения для плавания)
  • Кевларовые обычная цена составляет 50$ (Категория съемочного оборудования)
  • Купон Применяется без купона, Общая сумма составляет 100 долларов США (из-за условия купона)

2. На Этапе Доставки и Выставления Счетов

  • Адрес доставки и выставления счетов - Следующий

3. На Ступеньке Хобби

  • Футбольное хобби проверено (переключатель) и подтверждено

4. На шаге Обзора затем

  • Цена купальника составляет 50 долларов (Плавание Категория оборудования)
  • Цена Кевлара составляет 50 долларов США (Категория стрелкового снаряжения)
  • Применен купон на БЕСПЛАТНОЕ плавание, Общая сумма сейчас составляет 150 долларов (потому что хобби не плавание)

У меня много продуктов, я пытался добавить новые атрибуты, но это не связано с атрибутом, потому что он включен sales_flat_quote_hobby

Я пытался изменить Sales/Model/Quote/Subtotal.php, чтобы установить цены на все товары в корзине, но это кажется бесполезным.

Author: Stephan Muller, 2012-08-08

3 answers

Уже нашел ответ сам:

Возможно создать индивидуальное условие купона.

coupon example

Переписать Mage_SalesRule_Model_Rule_Condition_Продукт

    public function validate(Varien_Object $object){
        if ($this->getAttribute() == 'quote_item_with_hobby') {

            $quote = Mage::getSingleton('checkout/cart')->getQuote();
            $hobby= $quote->getHobbyByItemId($object->getId());

            if ($hobby){
                if ($this->getOperator() == '=='){
                    if (strtolower($this->getValue()) == $hobby->getHobby()) return true;
                    else return false;
                }
                else if ($this->getOperator() == '!='){
                    if (strtolower($this->getValue()) == $hobby->getHobby()) return false;
                    else return true;
                }

            }
            return true;
        }

        return parent::validate($object);
    }

Эта функция будет вызываться на каждом шаге загрузки. затем проверяется, вернет ли значение true, то купон будет применен, если вернет значение false, то купон не будет применен.

Спасибо Всем, Кто Принимал Участие. я ценю это.

 6
Author: Josua Marcel Chrisano, 2012-08-27 07:51:32

Вы должны реализовать свой пользовательский коллектор для сбора итогов. Это может быть основано на Mage_SalesRule_Model_Quote_Discount.
Как создавать пользовательские коллекторы: см. ответ на stackoverflow, или вы можете проверить в этой статье.

 2
Author: Roman Snitko, 2017-05-23 12:24:37

Да, это была бы моя идея.

Вы вводите новое условие правила продажи, которое дает скидку 50 %.

Правила продаж вызываются для каждого продукта. затем вам нужно проверить, является ли атрибутом плавание и установлено ли хобби. Если это так, вы можете скопировать остальное из %-salesrule

Вы найдете код для просмотра в Mage_SalesRule_Model_Validator::process()

Пример самореализующегося условия можно найти здесь: https://github.com/magento-hackathon/DiscountForATweet/blob/master/app/code/community/Hackathon/DiscountForATweet/Model/Condition/Tweet.php

 2
Author: Fabian Blechschmidt, 2012-08-21 14:30:37