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.

Dhiren Vasoya
źródło
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.

Rajeev K Tomy
źródło
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);
Gauraw
źródło