Puedes observar el evento sales_quote_address_collect_totals_after
y lograrlo. Para esto, necesita configurar un módulo y configurar un evento. Digamos que nuestro módulo es MStack_Exchange
.
Archivo : app\code\MStack\Exchange\etc\events.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="sales_quote_address_collect_totals_after">
<observer name="changeTaxTotal" instance="MStack\Exchange\Observer\ChangeTaxTotal"/>
</event>
</config>
Archivo : app\code\MStack\Exchange\Observer\ChangeTaxTotal.php
<?php
namespace MStack\Exchange\Observer;
use \Magento\Framework\Event\ObserverInterface;
use \Magento\Framework\Event\Observer;
class ChangeTaxTotal implements ObserverInterface
{
public $additionalTaxAmt = 2;
public function execute(Observer $observer)
{
/** @var Magento\Quote\Model\Quote\Address\Total */
$total = $observer->getData('total');
//make sure tax value exist
if (count($total->getAppliedTaxes()) > 0) {
$total->addTotalAmount('tax', $this->additionalTaxAmt);
}
return $this;
}
}
La llamada importante aquí es: $total->addTotalAmount('tax', $this->additionalTaxAmt);
. Esto se agregará 2
con el monto del impuesto existente y creo que eso es lo que necesita en su caso. Entonces, lo que debe hacer es reemplazarlo $this->additionalTaxAmt
con su valor de amortiguación de impuestos.
El evento se sales_quote_address_collect_totals_after
dispara justo después de que se hayan realizado los cálculos totales y, por lo tanto, se convierta en un lugar perfecto para jugar.
Si tiene curiosidad por saber dónde están ocurriendo estos cálculos totales, entonces debe investigar Magento\Quote\Model\Quote\TotalsCollector::collect()
y Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals()
métodos.
custom amount
vienes?