Я хочу додати спеціальну суму податку до каси програмно.
Ось приклад.
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
родом?