我需要根据产品的自定义属性应用不同的价格。我创建了一个观察者来改变购物车之前的费率(sales_quote_collect_totals_before).

一切正常,但是当我更改速率时(请参见下面的引用),我最终会改变全局范围。因此,在结帐期间,如果另一个用户转到购物车,则在此过程中将在结帐时产生不同价格的过程中更改费率。

$taxRate = Mage::getSingleton('tax/calculation_rate')
    ->getCollection()
    ->addFieldToFilter('code', 'myCodeTaxRate')
    ->getFirstItem()
    ->setRate($myCustomRate)
    ->save();

您只能应用一个会话的值?仅在内存中更改而不在数据库中更改?

我看到了这个,我认为是一个不好的解决方案: 编程修改税收规则 - 设定税率数组

有帮助吗?

解决方案

由于您提到过我的先前问题,所以我觉得我应该回答。

在我对基于各种因素修改税率的研究中(就我而言,主要是向税率提供商发现用户当前/准确税率的API呼吁),这对我来说似乎最安全 尽可能摆脱Magento的方式。

这样,我的意思是,修改核心流程以更改计算税的方式将为您提供各种拟合,并且总体上可能不那么麻烦和清洁,而是根据所需的因素动态创建自己的税率/规则。

就我而言,最终观察到同样的东西更加干净 sales_quote_collect_totals_before 事件,只需确定是否已经创建了现有的利率/规则,并且可以根据当前上下文(在我的情况下是邮政代码)使用。如果是这样,请使用它,如果没有,然后以编程方式创建一个新的税率/规则,然后可以在 collectTotals().

当我说“更清洁”时,如果Magento如预期的话,Magento已经将其处理。如果我试图设定税率本身,那么您需要覆盖其他区域,以便在结帐期间正确显示这些值。相比之下,简单地创建新的税率/规则会动态删除此约束以及显示/修改/使用这些速率的Magento(前端或后端)的所有其他区域正常运行,就像没有任何更改一样。

同样,只是要重申,我确实尝试过双向执行此操作, $item->setTaxAmount() 以及编程制定税收规则。我正在修改项目/报价税的模块更加复杂,容易出错(尤其是前端显示问题)。最后,我认为我的方法更好,仅仅是因为我们正在处理客户必须支付的货币价值。我宁愿拥有一个“重”的服务器流程,但做得正确,而不是容易出错,但在其实现中更为明显。我不能接受失去客户,因为他们在结帐期间对税收感到困惑。

许可以下: CC-BY-SA归因
scroll top