Magento 2: Добавить таможенную сумму налога в корзину программно

10

Я хочу добавить пользовательскую сумму налога в корзину заказа программным способом.

Вот пример.

Cart Old Tax = 4.21

Custom Tax = 2

New Tax = 4.21 + 2 = 6

Проверьте скриншот ниже.

введите описание изображения здесь

Мне нужно, чтобы это было сделано программно.

Дирен Васоя
источник
Откуда вы custom amount?
Тоан Нгуен
@ ToanNguyen, что я получаю из сессии, я хочу сказать, как можно добавить это значение к налогу.
Дирен Васоя
@DhirenVasoya, как мы можем добавить таможенную налоговую цену на продукт при добавлении в корзину, вот мой вопрос, magento.stackexchange.com/questions/274520/…
Джафар Пинджар
@DhirenVasoya, ниже решение, которое я пытался, это показывает корзину, но не рассчитывает ..
Джафар Пинджар
@DhirenVasoya - вы получили решение этой проблемы?
Манашви Бирла

Ответы:

4

Вы можете наблюдать за событием sales_quote_address_collect_totals_afterи достичь его. Для этого вам нужно настроить модуль и настроить событие. Допустим, наш модуль есть MStack_Exchange.

Файл : 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>

Файл : 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;
    }
}

Важный звонок здесь: $total->addTotalAmount('tax', $this->additionalTaxAmt);. Это добавит 2к существующей сумме налога, и я думаю, что это то, что вам нужно в вашем случае. Итак, что вам нужно сделать, это заменить $this->additionalTaxAmtзначение налогового буфера.

Событие происходит sales_quote_address_collect_totals_afterсразу после того, как все вычисления были выполнены, и, таким образом, они стали идеальным местом для игры.

Если вам интересно узнать, где происходит это общее вычисление, то вам нужно изучить Magento\Quote\Model\Quote\TotalsCollector::collect()и Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals()методы.

Раджив К Томи
источник
Позвольте мне проверить это.
Дирен Васоя
@ Раджив, можем ли мы добавить индивидуальный налог для отдельного продукта при добавлении в корзину? вот мой вопрос, magento.stackexchange.com/questions/274520/…
Джафар Пинджар
Спасибо @Rajeev, чтобы спасти мой день
Soundararajan m
Работает спасибо
Снеж
2

@Dhiren Vasoya

Используйте эти строки также.

$total->addBaseTotalAmount('tax', $this->additionalTaxAmt);
$total->setGrandTotal((float)$total->getGrandTotal() + $this->additionalTaxAmt);
$total->setBaseGrandTotal((float)$total->getBaseGrandTotal() + $this->additionalTaxAmt);
Gaurav
источник