Magento получает корзину за единицу товара вкл. налог

У меня довольно странная проблема, я надеюсь, кто-то может мне помочь в этом.

Вот основные настройки конфигурации, которые влияют на мою проблему:

  • указаны цены каталога в панели администратора, включая налоги
  • Показываются цены в каталоге в frontend, включая налоги.
  • Показаны товары в корзине, исключая налог (поэтому он отображается отдельно около промежуточного итога).

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

Вот какой код, чтобы показать, что я имею в виду. Я возьму налог 20% и продукт с ценой администратора (включая налог), установленный в 120 $, вариант, который стоит 60 $ > (также включая налоги). Исключая налог, это будет 100 $ и 50 $. Я хочу получить цену + вариант + налог = > 180 $

$quote = Mage::getSingleton('checkout/session')->getQuote();
$items = $quote->getAllVisibleItems();
foreach ($items as $item) {
    echo $item->getPrice(); // 150$ - price excluding tax
    echo $item->getPriceInclTax(); // 150$ - price excluding tax
    echo $item->getProduct()->getPrice(); // 120$ price including tax, BUT without the customer selected options.
}

PS: Пользовательский параметр, о котором я говорю, выбран пользователем, например, установить флажок, который добавляет + 50 $к цене продукта.

Ответ 1

Я не нашел решения для моей точной проблемы, но я изменил настройки, чтобы имитировать эту точную функциональность, и проблема, с которой я столкнулась, больше не существует.

Прежде всего, я удалил все налоги на сайте и сказал magento, что все цены исключают налог (даже если они включают в себя налоги).

Снижение налогов теперь осуществляется с помощью поощрения, применяемого к пользовательской группе, поэтому для

$tax = 20; // percent 

Я добавляю сокращение

(1 - (1 / ($tax / 100 + 1)))*100 
// for 20% tax => 16.6667% reduction
// for 24% tax => 19.3548% reduction

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

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

Ответ 2

- Get products id, name, price, quantity, etc. present in your cart.
- Get number of items in cart and total quantity in cart.
- Get base total price and grand total price of items in cart.

Get all items information in cart
// $items = Mage::getModel('checkout/cart')->getQuote()->getAllItems();
$items = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();

foreach($items as $item) {
    echo 'ID: '.$item->getProductId().'<br />';
    echo 'Name: '.$item->getName().'<br />';
    echo 'Sku: '.$item->getSku().'<br />';
    echo 'Quantity: '.$item->getQty().'<br />';
    echo 'Price: '.$item->getPrice().'<br />';
    echo "<br />";           
}

Get total items and total quantity in cart
$totalItems = Mage::getModel('checkout/cart')->getQuote()->getItemsCount();
$totalQuantity = Mage::getModel('checkout/cart')->getQuote()->getItemsQty();

Get subtotal and grand total price of cart
$subTotal = Mage::getModel('checkout/cart')->getQuote()->getSubtotal();
$grandTotal = Mage::getModel('checkout/cart')->getQuote()->getGrandTotal();

Ответ 3

Вы пробовали:

$product->getFinalPrice();

// or this?
$product->getPriceModel()->getFinalPrice($qty, $product);

Ответ 4

что такое вывод $item->getOptions()? Вы пробовали $item->getData('price')? Как вы применяете свои собственные параметры? Что такое вывод $item->debug()? Возможно, вы можете найти то, что вам нужно.

Отношения Саймон

Ответ 5

Вы можете попробовать это:

$grandTotal = $this->helper('checkout/cart')->getQuote()->getGrandTotal();
echo $text .= $this->__(' Total: %s', $this->helper('core')->formatPrice($grandTotal, false));

Ответ 6

показать количество корзины в моем заголовке

if ($parentBlock = $this->getParentBlock()) {
$count = $this->helper('checkout/cart')->getSummaryCount();
if( $count == 1 ) {
echo $text = $this->__('My Cart (%s item)', $count);
} elseif( $count > 0 ) {
echo $text = $this->__('My Cart (%s items)', $count);
} else {
echo $text = $this->__('My Cart (0 items)');
}
}

показать общую стоимость корзины в моем заголовке

$grandTotal = $this->helper('checkout/cart')->getQuote()->getGrandTotal();
echo $text .= $this->__(' Total: %s', $this->helper('core')->formatPrice($grandTotal, false));