Magento: setCouponCode, похоже, не применяет купон к модели котировки - PullRequest
0 голосов
/ 17 июня 2011

мы используем Magento в основном для транзакций и полностью переписали интерфейс через пользовательское приложение. У меня возникают проблемы с применением кода купона (правила цены корзины покупок) к объекту квоты. Код купона, похоже, отклонен - ​​setCouponCode не возвращает никакой ошибки, но getCouponCode возвращает пустую строку.

Я подтвердил, что код купона действителен, совершив транзакцию через административный сервер. Вот фрагмент кода ниже.

Может ли кто-нибудь помочь мне получить объект модели котировки для принятия и применения кода купона?

функция add_coupon ($ shoppingCartId, $ couponcode) {

    try {
            $quoteObj = Mage::getModel('sales/quote')->load($shoppingCartId);
            $quoteObj->getShippingAddress()->setCollectShippingRates(true);
            $quoteObj->getShippingAddress()->setCouponCode($coupon)
                    ->setTotalsCollectedFlag(true)
                    ->collectTotals()
                    ->save();
    } catch (Exception $e) {
            return array("status"=>"failed", "message"=>"Error applying coupon.");
    }
    if ($coupon) {
            if (!$coupon == $quoteObj->getCouponCode()) {
                    return array("status"=>"failed", "message"=>"Coupon code is not valid.");
            }
    }
    return array("status"=>"success");

}

Ответы [ 3 ]

4 голосов
/ 06 декабря 2011

Я столкнулся с той же проблемой и обнаружил, что мне нужно вызвать setCouponCode () перед добавлением любых элементов в мою цитату.

В вашем случае это будет выглядеть так:

$quoteObj = Mage::getModel('sales/quote')->setCouponCode($coupon)->load($shoppingCartId);
2 голосов
/ 17 июня 2011

Вся логика, необходимая для работы с купонами, находится в модуле SalesRule.

Существует модель Mage_SalesRule_Model_Coupon, которая является объектом купона, и у нее есть модель ресурса Mage_SalesRule_Model_Mysql4_Coupon.

Чтобы создать новый купон, вы можете создать приведенную выше модель купона, заполнить все поля и вызвать метод save ().Он запишет данные в таблицу salesrule_coupon.Но если вы посмотрите на эту таблицу, то увидите, что купоны зависят от идентификатора правила, поэтому вам нужно сначала создать какое-то правило продаж .

Mage_SalesRule_Model_Rule заботится о правилах, у него также есть собственная модель ресурсов.Я думаю, вам будет полезно выяснить, как они работают

1 голос
/ 19 декабря 2014

Я потерял несколько часов на эту ночь.Надеюсь, я могу спасти кого-то так же.Эмили подходит для этого примера (где вы загружаете корзину для покупок в предложение).

Это относится к Magento 1.7.0.2, я не уверен, подходит ли оно для других версий.

Если вы программно создаете заказ, но не используетедля этого вам может помочь корзина покупок: основная проблема заключается в том, что Magento запускает collectTotals () каждый раз, когда вы добавляете / обновляете адрес в предложении, и вот важная часть: он кеширует их.(На самом деле, после сохранения адреса, если вы проверите getTotalsCollectedFlag, вы увидите, что для него установлено значение true!).Установка кода купона после этого, даже если вы запускаете collectTotals (), не применяет код купона.

Вы можете вызвать setTotalsCollectedFlag (false) для цитаты, а затем применить купон, но это плохая идея(это может вызвать некоторые просчеты в соответствии с отчетом об ошибке Magento, который больше недоступен), что вы хотите сделать, это вызвать setCouponCode, прежде чем устанавливать какие-либо адреса (или, по крайней мере, перед тем, как задавать последний адрес).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...