Magento 2: Aggiungi l'ammontare dell'imposta personalizzata nel carrello a livello di codice


10

Voglio aggiungere un importo fiscale personalizzato al carrello di checkout a livello di codice.

Ecco l'esempio.

Cart Old Tax = 4.21

Custom Tax = 2

New Tax = 4.21 + 2 = 6

Controlla lo screenshot qui sotto.

inserisci qui la descrizione dell'immagine

Ho bisogno di questo fatto a livello di codice.


Da dove custom amountvieni?
Toan Nguyen il

@ToanNguyen che prendo dalla sessione, il mio punto è come posso aggiungere quel valore alla tassa.
Dhiren Vasoya,

@DhirenVasoya, come possiamo aggiungere un prezzo fiscale personalizzato per il prodotto quando aggiunto al carrello, ecco la mia domanda, magento.stackexchange.com/questions/274520/…
pinjar

@DhirenVasoya, sotto la soluzione che ho provato, questo mostra il carrello ma non sta calcolando ..
jafar pinjar

@DhirenVasoya - hai trovato la soluzione a questo problema?
Manashvi Birla,

Risposte:


4

Puoi osservare l'evento sales_quote_address_collect_totals_aftere raggiungerlo. Per questo, è necessario impostare un modulo e configurare un evento. Diciamo che il nostro modulo è MStack_Exchange.

File : 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>

File : 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 chiamata importante è: $total->addTotalAmount('tax', $this->additionalTaxAmt);. Ciò si aggiungerà 2all'importo fiscale esistente e penso che sia ciò di cui hai bisogno nel tuo caso. Quindi, ciò che devi fare è sostituire $this->additionalTaxAmtil valore del tuo buffer fiscale.

L'evento si sales_quote_address_collect_totals_afteraccende subito dopo che i calcoli totali sono stati realizzati e quindi sono diventati il ​​luogo perfetto per giocare.

Se sei curioso di sapere dove stanno avvenendo questi calcoli totali, allora devi esaminare Magento\Quote\Model\Quote\TotalsCollector::collect()e Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals()metodi.


Fammi controllare.
Dhiren Vasoya,

@Rajeev, possiamo aggiungere tasse personalizzate per i singoli prodotti quando aggiunti al carrello? ecco la mia domanda, magento.stackexchange.com/questions/274520/…
pinjar

Grazie @Rajeev per salvarmi la giornata
Soundararajan m

Funziona grazie
snez,

2

@Dhiren Vasoya

Usa anche queste linee.

$total->addBaseTotalAmount('tax', $this->additionalTaxAmt);
$total->setGrandTotal((float)$total->getGrandTotal() + $this->additionalTaxAmt);
$total->setBaseGrandTotal((float)$total->getBaseGrandTotal() + $this->additionalTaxAmt);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.