Magento 2: Programmgesteuerten benutzerdefinierten Steuerbetrag im Warenkorb hinzufügen

10

Ich möchte dem Warenkorb programmgesteuert einen benutzerdefinierten Steuerbetrag hinzufügen.

Hier ist das Beispiel.

Cart Old Tax = 4.21

Custom Tax = 2

New Tax = 4.21 + 2 = 6

Überprüfen Sie den Screenshot unten.

Geben Sie hier die Bildbeschreibung ein

Ich muss das programmgesteuert machen.

Dhiren Vasoya
quelle
Woher custom amountkommst du ?
Toan Nguyen
@ToanNguyen, den ich aus der Sitzung abrufe. Mein Punkt ist, wie dieser Wert zur Steuer hinzugefügt werden kann.
Dhiren Vasoya
@DhirenVasoya, wie können wir benutzerdefinierten Steuerpreis für das Produkt hinzufügen, wenn es in den Warenkorb gelegt wird, hier ist meine Frage, magento.stackexchange.com/questions/274520/…
jafar pinjar
@ DhirenVasoya, unter Lösung habe ich versucht, dies zeigt Wagen, aber nicht zu berechnen ..
Jafar Pinjar
@DhirenVasoya - hast du die Lösung für dieses Problem bekommen?
Manashvi Birla

Antworten:

4

Sie können das Ereignis beobachten sales_quote_address_collect_totals_afterund erreichen. Dazu müssen Sie ein Modul einrichten und ein Ereignis konfigurieren. Nehmen wir an, unser Modul ist MStack_Exchange.

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

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

Der wichtige Aufruf hier ist : $total->addTotalAmount('tax', $this->additionalTaxAmt);. Dies wird 2mit dem bestehenden Steuerbetrag addiert und ich denke, das ist es, was Sie in Ihrem Fall brauchen. Was Sie also tun müssen, ist, durch $this->additionalTaxAmtIhren Steuerpufferwert zu ersetzen .

Das Ereignis sales_quote_address_collect_totals_afterwird ausgelöst, kurz nachdem die Gesamtberechnung abgeschlossen war, und wird somit zum perfekten Ort zum Herumspielen.

Wenn Sie neugierig sind, wo diese Gesamtberechnungen stattfinden, müssen Sie sich mit Magento\Quote\Model\Quote\TotalsCollector::collect()und Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals()Methoden befassen .

Rajeev K Tomy
quelle
Lassen Sie mich das überprüfen.
Dhiren Vasoya
@Rajeev, können wir benutzerdefinierte Steuern für einzelne Produkte hinzufügen, wenn diese in den Warenkorb gelegt werden? Hier ist meine Frage, magento.stackexchange.com/questions/274520/…
Jafar Pinjar
Danke @Rajeev, um meinen Tag zu retten
Soundararajan m
Funktioniert danke
snez
2

@ Driren Vasoya

Verwenden Sie auch diese Zeilen.

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