getRate() 和 Magento 税率

Posted

技术标签:

【中文标题】getRate() 和 Magento 税率【英文标题】:getRate() and Magento tax percentage 【发布时间】:2012-06-08 23:17:23 【问题描述】:

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

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

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

    // 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 页)完成,最终的网站重写是我的未来。

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

编辑 - 堆栈溢出很棒:)

【问题讨论】:

【参考方案1】:

你也可以试试这个

$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));

【讨论】:

感谢您的建议!但是在这种情况下,我认为它不会总是给我们我正在寻找的东西。我们有某些转售的客户帐户不收取税款,看起来此代码仅适用于产品,并未考虑客户税级。【参考方案2】:

如果你改变:

$TaxRequest->setRegionId(California);

 $TaxRequest->setRegionId($stateId); 

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

【讨论】:

噢!一年有什么不同,重新工作我们网站的这一部分,这次我用更多的知识遇到了我自己的问题。更新了我的代码以反映数字州 ID、国家代码,并传入 getStore(),它工作得很好。谢谢!

以上是关于getRate() 和 Magento 税率的主要内容,如果未能解决你的问题,请参考以下文章

Magento 最佳开发配置

Magento读/写会话

Magento创建一个块来包含一个模板文件.phtml和一行代码

Magento学习手记(第一天)

MySQL 中的外键约束错误 1452 - Magento 导入

Magento 工具栏 -> 限制