我创建了一个自定义订单总额,在某些情况下可以给予折扣。总计总计是正确的,但是计算时销售税计算没有考虑我的折扣(因此,如果我给出10美元的折扣,则销售税金额是在我的折扣之前计算的全部金额)。
举例如下:
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>
以下是我的订单总课程的内容:
class Wpe_Multiunitdiscount_Model_Multiunitdiscount extends Mage_Sales_Model_Quote_Address_Total_Abstract {
public function collect(Mage_Sales_Model_Quote_Address $address) {
if ($address->getData('address_type')=='billing') return $this;
$items = $address->getAllItems();
$total_discount = 0;
foreach($items as $item) {
$product_discounts = Mage::helper("multiunitdiscount")->findDiscounts($item);
if($product_discounts > 0) {
$total_discount += $product_discounts;
}
}
$address->setMudAmount($total_discount);
$address->setGrandTotal($address->getGrandTotal() - $address->getMudAmount() );
$address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getMudAmount());
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address) {
if ($address->getData('address_type')=='billing') return $this;
if($address->getMudAmount() > 0) {
$address->addTotal(array(
'code' => $this->getCode(),
'title' => Mage::helper('sales')->__('Multi Unit Discounts'),
'value' => -$address->getMudAmount(),
));
}
return $this;
}
}
为了不在这里发布大量的代码,我不确定是否有必要,我可以告诉你,上面代码中的帮助只是返回折扣对于该特定项目的金额。报价。
有人可以帮助我指出正确的销售税计算方向吗?
编辑:
为了保持这一点,我在计算折扣后删除了很多我的逻辑,现在我试图简单地将订单总额减去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;
}
答案 0 :(得分:3)
转到System > Configuration
。从左侧导航栏中选择“Tax
”,然后打开"Calculation Settings"
组(如果尚未安装)。
尝试将“Apply Customer Tax
”参数更改为“After Discount
”