Magento 2: Agregue la cantidad de impuestos personalizados en el carrito de forma programa

10

Quiero agregar un monto de impuestos personalizado al carrito de pago mediante programación.

Aquí está el ejemplo.

Cart Old Tax = 4.21

Custom Tax = 2

New Tax = 4.21 + 2 = 6

Mira la captura de pantalla a continuación.

ingrese la descripción de la imagen aquí

Necesito esto hecho programáticamente.

Dhiren Vasoya
fuente
De donde custom amountvienes?
Toan Nguyen
@ToanNguyen que obtengo de la sesión, mi punto es cómo puede agregar ese valor a los impuestos.
Dhiren Vasoya
@DhirenVasoya, ¿cómo podemos agregar un precio de impuesto personalizado para el producto cuando se agrega al carrito? Aquí está mi pregunta, magento.stackexchange.com/questions/274520/…
jafar pinjar
@DhirenVasoya, debajo de la solución que probé, esta muestra el carrito pero no calcula ..
jafar pinjar
@DhirenVasoya: ¿obtuvo la solución a este problema?
Manashvi Birla

Respuestas:

4

Puedes observar el evento sales_quote_address_collect_totals_aftery 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á 2con el monto del impuesto existente y creo que eso es lo que necesita en su caso. Entonces, lo que debe hacer es reemplazarlo $this->additionalTaxAmtcon su valor de amortiguación de impuestos.

El evento se sales_quote_address_collect_totals_afterdispara 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.

Rajeev K Tomy
fuente
Déjame comprobar esto.
Dhiren Vasoya
@Rajeev, ¿podemos agregar impuestos personalizados para productos individuales cuando se agregan al carrito? aquí está mi pregunta, magento.stackexchange.com/questions/274520/…
jafar pinjar
Gracias @Rajeev para salvar mi día
Soundararajan m
Funciona gracias
snez
2

@Dhiren Vasoya

Use estas líneas también.

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