Magento 2: Ajouter un montant de taxe personnalisé dans le panier par programme

10

Je souhaite ajouter un montant de taxe personnalisé au panier de paiement par programme.

Voici l'exemple.

Cart Old Tax = 4.21

Custom Tax = 2

New Tax = 4.21 + 2 = 6

Vérifiez la capture d'écran ci-dessous.

entrez la description de l'image ici

J'ai besoin que cela se fasse par programme.

Dhiren Vasoya
la source
D'où custom amountvenez- vous ?
Toan Nguyen
@ToanNguyen que je récupère de la session, mon point est de savoir comment ajouter cette valeur à la taxe.
Dhiren Vasoya
@DhirenVasoya, comment pouvons-nous ajouter un prix de taxe personnalisé pour le produit lorsqu'il est ajouté au panier, voici ma question, magento.stackexchange.com/questions/274520/…
jafar pinjar
@DhirenVasoya, ci-dessous la solution que j'ai essayée, cela montre le panier mais pas le calcul ..
jafar pinjar
@DhirenVasoya - avez-vous trouvé la solution à ce problème?
Manashvi Birla

Réponses:

4

Vous pouvez observer l'événement sales_quote_address_collect_totals_afteret le réaliser. Pour cela, vous devez configurer un module et configurer un événement. Disons que notre module est MStack_Exchange.

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

Fichier : 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;
    }
}

L'appel important est ici: $total->addTotalAmount('tax', $this->additionalTaxAmt);. Cela s'ajoutera 2au montant de taxe existant et je pense que c'est ce dont vous avez besoin dans votre cas. Donc, ce que vous devez faire est de le remplacer $this->additionalTaxAmtpar votre valeur tampon fiscale.

L'événement se sales_quote_address_collect_totals_afterdéclenche juste après que les calculs totaux ont été effectués et devient donc l'endroit idéal pour jouer.

Si vous êtes curieux de savoir où ce calcul au total se passe, alors vous devez regarder dans Magento\Quote\Model\Quote\TotalsCollector::collect()et Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals()méthodes.

Rajeev K Tomy
la source
Permettez-moi de vérifier cela.
Dhiren Vasoya
@Rajeev, pouvons-nous ajouter une taxe personnalisée pour un produit individuel lorsqu'il est ajouté au panier? voici ma question, magento.stackexchange.com/questions/274520/…
jafar pinjar
Merci @Rajeev d'avoir sauvé ma journée
Soundararajan
Fonctionne merci
snez
2

@Dhiren Vasoya

Utilisez également ces lignes.

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