Magento 2: adicionar valor de imposto personalizado ao carrinho programaticamente

10

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.

insira a descrição da imagem aqui

Eu preciso disso feito programaticamente.

Dhiren Vasoya
fonte
De onde você custom amountvem?
Toan Nguyen
@ ToanNguyen que busco na sessão, meu argumento é como adicionar esse valor ao imposto.
Dhiren Vasoya
@DhirenVasoya, como podemos adicionar preço imposto de costume para o produto quando adicionados ao carrinho, aqui está a minha pergunta, magento.stackexchange.com/questions/274520/...
Jafar pinjar
@DhirenVasoya, abaixo solução eu tentei, este está mostrando carrinho, mas não calcular ..
Jafar pinjar
@DhirenVasoya - você conseguiu a solução para este problema?
Manashvi Birla 17/07/19

Respostas:

4

Você pode observar o evento sales_quote_address_collect_totals_aftere 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 2ao valor do imposto existente e acho que é isso que você precisa no seu caso. Então, o que você precisa fazer é substituir $this->additionalTaxAmtpelo 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.

Rajeev K Tomy
fonte
Deixe-me verificar isso.
Dhiren Vasoya
@ Rajeev, podemos adicionar impostos personalizados para produtos individuais quando adicionados ao carrinho? aqui está a minha pergunta, magento.stackexchange.com/questions/274520/...
Jafar pinjar
Obrigado @Rajeev para salvar o meu dia
Soundararajan m
Funciona obrigado
snez
2

@Dhiren Vasoya

Use estas linhas também.

$total->addBaseTotalAmount('tax', $this->additionalTaxAmt);
$total->setGrandTotal((float)$total->getGrandTotal() + $this->additionalTaxAmt);
$total->setBaseGrandTotal((float)$total->getBaseGrandTotal() + $this->additionalTaxAmt);
Gaurav
fonte