Я хочу добавить пользовательскую сумму налога в корзину заказа программным способом.
Вот пример.
Cart Old Tax = 4.21
Custom Tax = 2
New Tax = 4.21 + 2 = 6
Проверьте скриншот ниже.
Мне нужно, чтобы это было сделано программно.
Я хочу добавить пользовательскую сумму налога в корзину заказа программным способом.
Вот пример.
Cart Old Tax = 4.21
Custom Tax = 2
New Tax = 4.21 + 2 = 6
Проверьте скриншот ниже.
Мне нужно, чтобы это было сделано программно.
Ответы:
Вы можете наблюдать за событием 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()
методы.
custom amount
?