Очистить рассрочку при изменении способа оплаты


В моем магазине есть два способа оплаты, один из которых основан на кредитной карте, а другой - на банковском переводе. Если я выберу кредитную карту и выберу рассрочку, Magento обновит промежуточный итог, добавив налоги.

Если я откажусь от оплаты кредитной картой и перейду на банковский перевод (у которого не должно быть налогов), налоги на рассрочку сохранятся. Как я могу оплатить рассрочку в этом ценарии?

Я пытался использовать эти события:

  • проверка_типа_паге_сохранения_заказа_после
  • sales_order_place_after_заказы_после

Но это не срабатывает, когда я меняю форму оплаты. Только когда спасен.

Author: Amit Bera, 2017-12-30

1 answers

Я решил создать событие sales_model_service_quote_submit_before на ModuleVendor/ModuleName/etc/events.xml :

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="sales_model_service_quote_submit_before">
        <observer name="mpfix" instance="ModuleVendor\ModuleName\Observer\Mpfix" />
    </event>
</config>

И наблюдатель:

<?php

namespace ModuleVendor\ModuleName\Observer;

use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;

class Mpfix implements ObserverInterface {

    public function execute(EventObserver $observer) {
        $order = $observer->getOrder();
        $quote = $observer->getQuote();

        if($order->getPayment()->getMethod() == "payment_method_code"){ //code of payment method 
            $quote->setFinanceCostAmount(0);
            $quote->setBaseFinanceCostAmount(0);
            $quote->save();

            $order->setFinanceCostAmount(0);
            $order->setBaseFinanceCostAmount(0);
            $order->save();
        }
    }

}
 1
Author: Eduardo, 2017-12-30 19:41:12