在Magento观察员中设置产品税

时间:2014-05-26 14:42:40

标签: php magento magento-1.8

我正在使用sales_quote_add_item,我想更改产品的税级。 在观察者中,我检索产品:

$event = $observer->getEvent();
$item = $event->getQuoteItem();
$product = $item->getProduct();

我尝试了$item->setTaxClassId()$product->setTaxClassId()方法,但这并没有效果。

还有其他方法吗?

3 个答案:

答案 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();
}

希望这会帮助你:))