我创建了一个自定义订单总计,在某些情况下可以提供折扣。总计总会正确显示,但是在计算时,营业税计算并未考虑我的折扣(因此,如果我给出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;
}

最佳答案

转到System > Configuration。从左侧导航中选择“Tax”,然后打开"Calculation Settings"组(如果尚未打开)。

尝试将“Apply Customer Tax”参数更改为“After Discount

关于php - 在Magento中添加自定义折扣订单总额不会更改营业税,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7517534/

10-13 23:03