Magento 2: Programowo dodaj niestandardową kwotę podatku do koszyka


11

Chcę programowo dodać niestandardową kwotę podatku do koszyka.

Oto przykład.

Cart Old Tax = 4.21

Custom Tax = 2

New Tax = 4.21 + 2 = 6

Sprawdź zrzut ekranu poniżej.

wprowadź opis zdjęcia tutaj

Potrzebuję tego zrobić programowo.


Skąd custom amountpochodzisz?
Toan Nguyen,

@ToanNguyen, które ściągam z sesji, Chodzi mi o to, jak mogę dodać tę wartość do podatku.
Dhiren Vasoya,

@DhirenVasoya, jak możemy dodać niestandardową cenę podatkową za produkt dodany do koszyka, oto moje pytanie, magento.stackexchange.com/questions/274520/…
jafar pinjar

@DhirenVasoya, poniżej rozwiązania próbowałem, to pokazuje koszyk, ale nie oblicza ..
jafar pinjar

@DhirenVasoya - czy udało Ci się rozwiązać ten problem?
Manashvi Birla

Odpowiedzi:


4

Możesz obserwować wydarzenie sales_quote_address_collect_totals_afteri je osiągnąć. W tym celu musisz skonfigurować moduł i skonfigurować zdarzenie. Powiedzmy, że nasz moduł to MStack_Exchange.

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

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

Ważną wezwanie brzmi: $total->addTotalAmount('tax', $this->additionalTaxAmt);. To doda 2do istniejącej kwoty podatku i myślę, że tego właśnie potrzebujesz w swoim przypadku. Musisz więc zastąpić $this->additionalTaxAmtswoją wartość bufora podatkowego.

To wydarzenie jest sales_quote_address_collect_totals_afteruruchamiane tuż po przeprowadzeniu obliczeń całkowitych, dzięki czemu staje się idealnym miejscem do zabawy.

Jeśli jesteś ciekawy, gdzie mają miejsce te całkowite obliczenia, musisz przyjrzeć się Magento\Quote\Model\Quote\TotalsCollector::collect()i Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals()metodom.


Pozwól, że to sprawdzę.
Dhiren Vasoya,

@Rajeev, czy możemy dodać podatek niestandardowy dla poszczególnych produktów, gdy zostaną dodane do koszyka? oto moje pytanie, magento.stackexchange.com/questions/274520/…
jafar pinjar

Dzięki @Rajeev, aby uratować mi dzień
Soundararajan

Działa dziękuję
snez

2

@Dhiren Vasoya

Użyj również tych linii.

$total->addBaseTotalAmount('tax', $this->additionalTaxAmt);
$total->setGrandTotal((float)$total->getGrandTotal() + $this->additionalTaxAmt);
$total->setBaseGrandTotal((float)$total->getBaseGrandTotal() + $this->additionalTaxAmt);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.