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

时间:2011-09-22 15:41:03

标签: php magento

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

1 个答案:

答案 0 :(得分:3)

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

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