Получите цену продукта после правил каталога и ваучеров

magento.stackexchange https://magento.stackexchange.com/questions/5947

  •  16-10-2019
  •  | 
  •  

Вопрос

Этот вопрос здесь был задан здесь: https://stackoverflow.com/questions/8254682/magento-getting-discounted-price

Мне нужно получить цену продукта после применения правил цены на корзину. Мне нужна цена на странице подтверждения оформления заказа (успех).

Например, продукт A стоит 9,90. Я применяю скидку кода скидки в размере 50%. Цена сейчас 4,95. Я плачу и оформление. На странице подтверждения заказа мне нужно получить цену.

Я пытался:

Mage::getModel('catalogrule/rule')->calcProductPriceRule($prod, $prod->getPrice());

А также...

Mage::getModel('catalogrule/rule')->calcProductPriceRule($prod
    ->setStoreId($this->getCurrentStoreId())
    ->setCustomerGroupId($this->getCurrentCustomerGroupId()),
    $prod->getPrice()
);

Но это всегда возвращает ноль. Могу ли я достичь этого, не переписывая всю логику правил?

Я разрабатываю локальный модуль для этого и использую Magento 1.7.0.2 CE. Спасибо.

~ РЕДАКТИРОВАТЬ ~

Мясо и картофель моего кода выглядит следующим образом:

public function getLatestOrder()
{
    $order = Mage::getModel('sales/order')->getCollection()
        ->addAttributeToSelect('*')
        ->setOrder('entity_id', Varien_Data_Collection::SORT_ORDER_DESC)
        ->getFirstItem();
    return $order;
}

// iterate as follows:

$items = $this->getLatestOrder()->getAllVisibleItems();
foreach ($items as $item) {
    echo $item->getPrice();
}

Значение для $item->getPrice(); это полная цена для каждого предмета, хотя был применен ваучер скинков 99,9%.

Это было полезно?

Решение

Если я правильно понял, вам нужна цена, по которой продукт был продан.
Вы можете получить эту цену непосредственно от пункта заказа.
На странице успеха у вас есть доступ к последнему заказу.

$orderId = Mage::getSingleton('checkout/session')->getLastOrderId()

Затем проберите элементы заказа, пока не найдете необходимый продукт:
Допустим, продукт, который вы ищете $productId

$order = Mage::getModel('sales/order')->load($orderId);
$price = null;
foreach ($order->getAllItems() as $item){
   if ($item->getProductId() == $productId){
        $price = $item->getPrice() - $item->getDiscountAmount();
        break;
   }
}
if (!is_null($price)){
    //do something with $price
}

Нет смысла применять правило к основному продукту. Вы можете получить неправильные результаты. Например, некоторые правила могут применяться только на определенной комбинации продуктов в корзине, или когда установлен конкретный адрес доставки. Также одно правило больше не может быть действительным (клиент или общее количество ограничений могут быть достигнуты).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top