Magento 2: Додайте спеціальну суму податку у кошик програмно


11

Я хочу додати спеціальну суму податку до каси програмно.

Ось приклад.

Cart Old Tax = 4.21

Custom Tax = 2

New Tax = 4.21 + 2 = 6

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

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

Мені це потрібно програмно.


Звідки ви custom amountродом?
Тоан Нгуен

@ToanNguyen, який я отримую з сеансу, мій погляд на те, як можна додати цю вартість до податку.
Дхірен Васоя

@DhirenVasoya, як ми можемо додати користувальницьку ціну податку на товар при додаванні в кошик, ось моє запитання, magento.stackexchange.com/questions/274520/…
jafar pinjar

@DhirenVasoya, нижче рішення, яке я спробував, це показ кошика, але не розрахунок ..
jafar pinjar

@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()методи.


Дозвольте мені це перевірити.
Дхірен Васоя

@Rajeev, чи можемо ми додати митний податок за окремий товар, коли його додамо в кошик? ось моє запитання, magento.stackexchange.com/questions/274520/…
jafar pinjar

Дякую @Rajeev, що врятував мій день
Soundararajan m

Працює дякую
сень

2

@Дірен Васоя

Використовуйте і ці рядки.

$total->addBaseTotalAmount('tax', $this->additionalTaxAmt);
$total->setGrandTotal((float)$total->getGrandTotal() + $this->additionalTaxAmt);
$total->setBaseGrandTotal((float)$total->getBaseGrandTotal() + $this->additionalTaxAmt);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.