Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Magento中添加自定义折扣订单总额不会更改销售税_Php_Magento - Fatal编程技术网

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

Php 在Magento中添加自定义折扣订单总额不会更改销售税,php,magento,Php,Magento,我已经创建了一个自定义订单总额,在某些情况下提供折扣。总金额总是正确的,但是在计算时,销售税计算没有考虑我的折扣(因此,如果我给予10美元的折扣,那么销售税金额是根据折扣之前的全部金额计算的) 以以下为例: Subtotal: $856.49 Multi Unit Discounts: -$22.50 Shipping: $10.96 Tax: $52.05 Grand Total: $8

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

为了避免在这里发布大量我不确定是否有必要的代码,我可以告诉您,上面代码中的助手只返回报价中特定项目的折扣金额

有人能帮我指出正确的方向来正确计算销售税吗

编辑:

为了简单起见,我去掉了计算折扣背后的很多逻辑,现在我正试图从订单总额中减去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;
}

转到
系统>配置
。从左侧导航中选择“
Tax
”,然后打开
“计算设置”
组(如果尚未打开)


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

Hmm,为什么直接在折扣类中修改$address grandtotal?您应该使用
$address->setDiscountAmount($address->getDiscountAmount()+$total\u折扣)
(或者使用
$item->setDiscountAmount()
设置每件商品的折扣),您的折扣将用于
Mage\u Sales\u Model\u Quote\u address\u total\u Tax::collect()
用于税务计算。据我所知,您不能自己修改总计。你必须自己设定一个折扣价格(就像你已经做的那样),Magento在计算总额时会考虑到这一点。尝试修改config.xml并使其同时运行小计。我也花了一些时间才真正理解Magento处理总计计算的方式。所以我尝试了你们说的两种方法,我遇到了同样的问题(由于我自己不应该修改总计,所以现在总计的添加被取消)。我从另一个total模块中得到了修改总计的想法。我在折扣模块中看到,我可以设置subtotalWithDiscount和subtotalWithoutDiscount,所以我也会尝试。
Tax>计算设置>Apply Customer Tax=After discount
配置选项是否相关?如何在管理销售订单页面和客户订单页面中显示“多单位折扣”值?现在,您的代码没有在管理销售订单/客户订单页面中显示折扣值。我知道这个问题有点过时,但在尝试执行类似任务时遇到了它。我不相信这会起作用,主要是因为这是一个定制的总收藏家,在Magento眼中这并不是一个“折扣”。
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;
}