Quero adicionar um valor de imposto personalizado ao carrinho de pagamento programaticamente.
Aqui está o exemplo.
Cart Old Tax = 4.21
Custom Tax = 2
New Tax = 4.21 + 2 = 6
Verifique a imagem abaixo.
Eu preciso disso feito programaticamente.
Quero adicionar um valor de imposto personalizado ao carrinho de pagamento programaticamente.
Aqui está o exemplo.
Cart Old Tax = 4.21
Custom Tax = 2
New Tax = 4.21 + 2 = 6
Verifique a imagem abaixo.
Eu preciso disso feito programaticamente.
Respostas:
Você pode observar o evento sales_quote_address_collect_totals_after
e alcançá-lo. Para isso, você precisa configurar um módulo e configurar um evento. Digamos que nosso módulo seja MStack_Exchange
.
Arquivo : 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>
Arquivo : 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;
}
}
A chamada importante aqui é: $total->addTotalAmount('tax', $this->additionalTaxAmt);
. Isso será adicionado 2
ao valor do imposto existente e acho que é isso que você precisa no seu caso. Então, o que você precisa fazer é substituir $this->additionalTaxAmt
pelo valor do buffer de imposto.
O evento sales_quote_address_collect_totals_after
acionado logo após o cálculo total e, portanto, torna-se o local perfeito para brincar.
Se você está curioso para saber onde esses cálculos totais estão acontecendo, é necessário analisar Magento\Quote\Model\Quote\TotalsCollector::collect()
e Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals()
métodos.
custom amount
vem?