2012-06-08 45 views
6

我试图获得给定邮政编码的税率(百分比,而不是货币),所以我可以在第三方报价中显示它PDF打印输出(与“报价” Magento用作购物车预付款)。虽然我对Magento还比较陌生,但看起来getRateRequest()和getRate()是两个主要的函数,它们根据所有变量(产品税类,客户税类等)获得税率。getRate()和Magento税率百分比

由于这是针对第三方扩展,所有我们的产品都需要纳税我想我只是使用getRate()与正确的Varien对象输入,它会返回税率。经过一周的试验和错误,我无法弄清楚为什么我总是得到零率。我已经确认我调用了getRate()函数,并且它不会从第一个if()语句检查Country和Customer/Product类ID时返回零。另外我已经确认了所有的变量都被传递并且可以在getRate()函数本身中访问。

我用下面的输入(基于getRateRequest()的输出)创建了一个对象,我使用getRate()调用,并希望有人可以阐明我的数据输入有什么问题或为什么getRate ()函数总是返回零结果。 (我实际上低于$变量的设置,也只是定义了前面,我的测试案例的一个值都低于)

// UPDATED CODE (variable values come from 3rd party quote extension) 

    $country = 'US'; // use short country code 
    $region = '12'; // must be numeric! 
    $postcode = '95050'; 
    // our quote extension stores the customer id ('2') which we use to get the tax class 
    $customer = Mage::getModel('customer/customer')->load('2'); 
    $custTax = $customer->getTaxClassId(); 

    $TaxRequest = new Varien_Object(); 
    $TaxRequest->setCountryId($country); 
    $TaxRequest->setRegionId($region); 
    $TaxRequest->setPostcode($postcode); 
    $TaxRequest->setStore(Mage::app()->getStore()); 
    $TaxRequest->setCustomerClassId($custTax); 
    $TaxRequest->setProductClassId(2); // 2=taxable id (all our products are taxable) 

    $taxCalculationModel = Mage::getSingleton('tax/calculation'); 
    $rate = $taxCalculationModel->getRate($TaxRequest); 

我的备份计划是只是做一个直接的SQL查询公式尽管这可能会弄得有点乱。由于我们的网站开发团队并未完全遵循良好的编码标准,因此一旦最初的发布修补程序(全部4页)发布,最终的网站重写将在我的将来进行。

感谢您的帮助,并花时间阅读本文。

编辑 - Stack Overflow是真棒:)

回答

3

如果更改:

$TaxRequest->setRegionId(California); 

$TaxRequest->setRegionId($stateId); 

其中$ STATEID是数字区域ID。你的代码应该可以工作。

+1

卫生署!这一年有什么不同,重新工作在我们网站的这一部分,并且这次遇到了我自己的问题,并且有了更多的知识。 更新我的代码以反映数字状态ID,国家代码,并在getStore()中传递,它工作得很好。谢谢! –

6

你也可以试试这个

$store = Mage::app()->getStore('default'); 
$request = Mage::getSingleton('tax/calculation')->getRateRequest(null, null, null, $store); 
$taxclassid = $product->getData('tax_class_id'); 
$percent = Mage::getSingleton('tax/calculation')->getRate($request->setProductClassId($taxclassid)); 
+0

感谢您的想法!然而在这种情况下,我不认为它会一直给我们提供我想要的东西。我们有一些转售的客户账户,并且没有收取所得税,看起来这个代码只适用于某个产品,并且不考虑客户税收等级。 –