Php 在Magento中添加自定义折扣订单总额不会更改销售税
我已经创建了一个自定义订单总额,在某些情况下提供折扣。总金额总是正确的,但是在计算时,销售税计算没有考虑我的折扣(因此,如果我给予10美元的折扣,那么销售税金额是根据折扣之前的全部金额计算的) 以以下为例:Php 在Magento中添加自定义折扣订单总额不会更改销售税,php,magento,Php,Magento,我已经创建了一个自定义订单总额,在某些情况下提供折扣。总金额总是正确的,但是在计算时,销售税计算没有考虑我的折扣(因此,如果我给予10美元的折扣,那么销售税金额是根据折扣之前的全部金额计算的) 以以下为例: Subtotal: $856.49 Multi Unit Discounts: -$22.50 Shipping: $10.96 Tax: $52.05 Grand Total: $8
Subtotal: $856.49
Multi Unit Discounts: -$22.50
Shipping: $10.96
Tax: $52.05
Grand Total: $897.00
我的定制折扣是多单位折扣。税率是6%。正如您所看到的,基于所有行项目的总计是正确的,但是税额本身是不正确的(它基于除我的折扣之外的所有行项目)
在我的config.xml文件中,我有以下内容可以让我的订单总数在系统中正常工作:
<sales>
<quote>
<totals>
<mud>
<class>Wpe_Multiunitdiscount_Model_Multiunitdiscount</class>
<before>tax</before>
</mud>
</totals>
</quote>
</sales>
}
为了避免在这里发布大量我不确定是否有必要的代码,我可以告诉您,上面代码中的助手只返回报价中特定项目的折扣金额
有人能帮我指出正确的方向来正确计算销售税吗
编辑:
为了简单起见,我去掉了计算折扣背后的很多逻辑,现在我正试图从订单总额中减去10美元作为折扣。正如建议的那样,我没有修改地址的总计,现在只设置折扣金额和基本折扣金额。现在销售税没有加起来,总金额已经取消了。也许如果有一个很好的教程,有人可以告诉我,会有帮助吗?我似乎不明白订单总数是如何相互作用的
public function collect(Mage_Sales_Model_Quote_Address $address) {
if ($address->getData('address_type')=='billing') return $this;
$address->setMudDiscount(10);
$address->setDiscountAmount($address->getDiscountAmount() + $address->getMudDiscount());
$address->setBaseDiscountAmount($address->getBaseDiscountAmount() + $address->getMudDiscount());
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address) {
if ($address->getData('address_type')=='billing') return $this;
$address->addTotal(array(
'code' => $this->getCode(),
'title' => Mage::helper('sales')->__('Multi Unit Discounts'),
'value' => -$address->getMudDiscount(),
));
return $this;
}
转到
系统>配置
。从左侧导航中选择“Tax
”,然后打开“计算设置”
组(如果尚未打开)
尝试将“
Apply Customer Tax
”参数更改为“After Discount
”Hmm,为什么直接在折扣类中修改$address grandtotal?您应该使用$address->setDiscountAmount($address->getDiscountAmount()+$total\u折扣)
(或者使用$item->setDiscountAmount()
设置每件商品的折扣),您的折扣将用于Mage\u Sales\u Model\u Quote\u address\u total\u Tax::collect()
用于税务计算。据我所知,您不能自己修改总计。你必须自己设定一个折扣价格(就像你已经做的那样),Magento在计算总额时会考虑到这一点。尝试修改config.xml并使其同时运行小计。我也花了一些时间才真正理解Magento处理总计计算的方式。所以我尝试了你们说的两种方法,我遇到了同样的问题(由于我自己不应该修改总计,所以现在总计的添加被取消)。我从另一个total模块中得到了修改总计的想法。我在折扣模块中看到,我可以设置subtotalWithDiscount和subtotalWithoutDiscount,所以我也会尝试。Tax>计算设置>Apply Customer Tax=After discount
配置选项是否相关?如何在管理销售订单页面和客户订单页面中显示“多单位折扣”值?现在,您的代码没有在管理销售订单/客户订单页面中显示折扣值。我知道这个问题有点过时,但在尝试执行类似任务时遇到了它。我不相信这会起作用,主要是因为这是一个定制的总收藏家,在Magento眼中这并不是一个“折扣”。
public function collect(Mage_Sales_Model_Quote_Address $address) {
if ($address->getData('address_type')=='billing') return $this;
$address->setMudDiscount(10);
$address->setDiscountAmount($address->getDiscountAmount() + $address->getMudDiscount());
$address->setBaseDiscountAmount($address->getBaseDiscountAmount() + $address->getMudDiscount());
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address) {
if ($address->getData('address_type')=='billing') return $this;
$address->addTotal(array(
'code' => $this->getCode(),
'title' => Mage::helper('sales')->__('Multi Unit Discounts'),
'value' => -$address->getMudDiscount(),
));
return $this;
}