在Magento中添加自定义折扣订单总额不会更改销售税

Jos*_*ton 16 php magento

我创建了一个自定义订单总额,在某些情况下给予折扣.总计总是正确的,但计算时销售税计算没有考虑我的折扣(因此,如果我给出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)

Jim*_*ran 3

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

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