我创建了一个自定义订单总额,在某些情况下给予折扣.总计总是正确的,但计算时销售税计算没有考虑我的折扣(因此,如果我给出10美元的折扣,则销售税金额是在我的折扣之前计算的全部金额).
举个例子如下:
Subtotal: $856.49
Multi Unit Discounts: -$22.50
Shipping: $10.96
Tax: $52.05
Grand Total: $897.00
Run Code Online (Sandbox Code Playgroud)
我的自定义折扣是多单元折扣.税率为6%.正如您所看到的,总计基于所有行项目是正确的,但税额本身并不正确(它基于除我的折扣之外的所有行项目).
在我的config.xml文件中,我有以下内容以使我的订单总计在系统中工作:
<sales>
<quote>
<totals>
<mud>
<class>Wpe_Multiunitdiscount_Model_Multiunitdiscount</class>
<before>tax</before>
</mud>
</totals>
</quote>
</sales>
Run Code Online (Sandbox Code Playgroud)
以下是我的订单总课程的内容:
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;
}
Run Code Online (Sandbox Code Playgroud)
}
为了不在这里发布大量的代码,我不确定是否有必要,我可以告诉你,上面代码中的帮助只是返回报价中特定项目的折扣金额.
有人可以帮我指出正确的方向来使销售税计算正确吗?
编辑:
为了保持这一点,我在计算折扣后删除了很多我的逻辑,现在我试图简单地将订单总额减去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;
}
Run Code Online (Sandbox Code Playgroud)
去System > Configuration
。Tax
从左侧导航中选择“ ”,然后打开该"Calculation Settings"
组(如果尚未打开)。
尝试将“ Apply Customer Tax
”参数更改为“ After Discount
”
归档时间: |
|
查看次数: |
10258 次 |
最近记录: |