Как Определить Цену Товара, Которую Клиент Фактически Платит После Применения Скидок


Включая каждую специальную цену, цену уровня, цену группы покупателей, скидку по каталогу, скидку в корзине и все остальное, что могло изменить цену. Только то, что клиент на самом деле платит и напечатано на счете. Прямо сейчас у меня есть

$product->getFinalPrice()

Но это не включает купоны. Это должно включать купоны, но для меня пусто:

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

КСТАТИ: я являюсь наблюдателем, прикрепленным к событию sales_order_save_after.

Мой текущий обходной путь состоит в том, чтобы прочитать discount_description и примените скидку вручную:

if (strcasecmp($order['discount_description'], 'WELCOME') == 0)
{
     $item->price = round($product->getFinalPrice() * 0.9, 2);
}

Но это некрасиво, и вам нужно реализовать это для каждой скидки.

Обновление

Я не смог найти правильную цену или какую-либо информацию о продукте в $order->debug(), поэтому я звоню $quote->getItemsCollection()->getItems().

Author: PiTheNumber, 2013-10-08

1 answers

Следующий Комментарий Алекса Я создал свалку продуктов

$items = $quote->getItemsCollection()->getItems();
foreach ($items as $order_item)
{
    Mage::Log($order_item->debug());
}

Там я нашел много полей с ценами, но ни одно из них не было правильным. Наконец я рассчитал цену отсюда вот так: $order_item['row_total_incl_tax'] - $order_item['discount_amount'].

 1
Author: PiTheNumber, 2017-04-13 12:54:55