我正在尝试获取给定邮政编码的税率(百分比,而不是货币),以便我可以在第三方报价PDF打印输出中显示(与Magento用作购物车之前的“报价”无关) -查看)。虽然我对Magento仍然相对较新,但看起来getRateRequest()和getRate()是基于所有变量(产品税级,客户税级等)获得税率的两个主要功能。
由于这是针对第三方扩展而我们所有的产品都是应纳税的,我想我会使用正确的Varien对象输入的getRate(),它会返回税率。经过一周的反复试验,我无法弄清楚为什么我总是得到零率。我已经确认我正在调用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查找公式,尽管这可能会有点混乱。由于我们的Web开发团队并没有完全遵循良好的编码标准,因此一旦最初的启动修复程序进入(所有4页),最终的站点重写就在我的未来。
感谢您的帮助,并花时间阅读本文。
编辑 - Stack Overflow真棒:)
答案 0 :(得分: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));
答案 1 :(得分:3)
如果你改变:
$TaxRequest->setRegionId(California);
到
$TaxRequest->setRegionId($stateId);
其中$ stateId是数字区域id。那么你的代码应该可以工作。