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