Получите цену продукта после правил каталога и ваучеров
-
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
}
Нет смысла применять правило к основному продукту. Вы можете получить неправильные результаты. Например, некоторые правила могут применяться только на определенной комбинации продуктов в корзине, или когда установлен конкретный адрес доставки. Также одно правило больше не может быть действительным (клиент или общее количество ограничений могут быть достигнуты).