如何以编程方式对Magento 2订单应用税后折扣?

时间:2018-07-24 06:57:53

标签: php magento magento2 magento2.2

我已经在Magento 2中以编程方式创建了一个订单。 我获得了数据:

  • 商品价值:$ 10
  • 税率:20%
  • 折扣:2美元
  • 总计:$ 10

现在,税收已包含产品价格,因此默认情况下,Magento 2:

  • 商品价格:10美元
  • 折扣后的商品价格:8美元
  • 税金:$ 8的20%= $ 1.6
  • 总计:$ 8 + $ 1.6 = $ 9.6。

总计与提供的总数不同。 我想在计税后增加折扣。

2 个答案:

答案 0 :(得分:2)

对于税务配置,有两种解决方法。 在后端配置中: 应用客户税->设置“折扣前”;我猜这应该可以解决您的问题。

您也可以为以下代码自定义代码: 在您的di.xml中,添加如下内容:

<preference for="Magento\Tax\Model\Sales\Total\Quote\Tax" type="<yournamespace>\<yourModule>\Model\Sales\Total\Quote\Tax"/>

现在创建您的类文件Tax.php并添加以下代码:

namespace <yournamespace>\<yourModule>\Model\Sales\Total\Quote;

class Tax extends \Magento\Tax\Model\Sales\Total\Quote\Tax

{
    /* override code here */
    public function __construct(
        /* add dependency classes here */    ) {
        parent::__construct(
            /* parent class objects here */
        );
    }

    /**
    * Custom Collect tax totals for quote address
    *
    * @param Quote $quote
    * @param ShippingAssignmentInterface $shippingAssignment
    * @param Address\Total $total
    * @return $this
    */
    public function collect(
        \Magento\Quote\Model\Quote $quote,
        \Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment,
        \Magento\Quote\Model\Quote\Address\Total $total
    ) {

       /* your calculation here goes here */
        $total->setTaxAmount($set_your_tax_here);

        return $this;
    }

}

希望这会有所帮助!

答案 1 :(得分:0)

是的,您可以...。您可以使用默认FPT,并可以根据需要修改税额。 您可以使用sales_quote_collect_totals_after事件以编程方式更改产品税金额。

您还可以在上面覆盖的Tax模型中尝试此答案,效果很好。