我正在使用sales_quote_add_item
,我想更改产品的税级。
在观察者中,我检索产品:
$event = $observer->getEvent();
$item = $event->getQuoteItem();
$product = $item->getProduct();
我尝试了$item->setTaxClassId()
和$product->setTaxClassId()
方法,但这并没有效果。
还有其他方法吗?
答案 0 :(得分:1)
如果您想使用product_tax_class
更改observer
,则必须使用sales_quote_item_set_product
。
每次保存产品时,函数Mage_Sales_Model_Quote_Item::setProduct
都会重置一些基本信息
config.xml
<config>
...
<global>
<events>
<sales_quote_item_set_product>
<observers>
<samples>
<type>singleton</type>
<class>samples/observer</class>
<method>salesQuoteItemSetProduct</method>
</samples>
</observers>
</sales_quote_item_set_product>
</events>
<global>
...
</config>
Observer.php
class Mynamespace_Samples_Model_Observer
{
public function salesQuoteItemSetProduct(Varien_Event_Observer $observer)
{
/* @var $item Mage_Sales_Model_Quote_Item */
$item = $observer->getQuoteItem();
$item->setTaxClassId('2');
return $this;
}
}
如果您有任何疑问,请告诉我
答案 1 :(得分:1)
而不是$item->setTaxClassId()
和$product->setTaxClassId()
试试
$item->getProduct()->setTaxClassId()
答案 2 :(得分:1)
我已经解决了这个问题。
由于印度改变了我们的税制,我正在开发商品及服务税模块。
转到自定义模块并在config.xml中添加以下事件观察器
<events>
<sales_quote_collect_totals_before>
<observers>
<sales_quote_add_item_handler>
<type>model</type>
<class>gst/observer</class>
<method>checkTax</method>
</sales_quote_add_item_handler>
</observers>
</sales_quote_collect_totals_before>
</events>
现在在你的模块的Model文件夹中创建Observer.php并在其中添加以下函数。
public function checkTax(Varien_Event_Observer $observer) {
$quote = $observer->getQuote();
foreach ($quote->getAllVisibleItems() as $quote_item) {
$product = $quote_item->getProduct();
$product->setTaxClassId(2);
$quote_item->setPriceInclTax($quote_item->getPrice());
$quote_item->setBasePriceInclTax($quote_item->getBasePrice());
$quote_item->setBaseRowTotalInclTax($quote_item->setBaseRowTotal());
}
$quote->save();
}
希望这会帮助你:))