ฉันต้องการเพิ่มจำนวนภาษีที่กำหนดเองลงในรถเข็นชำระเงินแบบเป็นโปรแกรม
นี่คือตัวอย่าง
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()
วิธีการต่างๆ
@ Dhiren Vasoya
ใช้บรรทัดเหล่านี้เช่นกัน
$total->addBaseTotalAmount('tax', $this->additionalTaxAmt);
$total->setGrandTotal((float)$total->getGrandTotal() + $this->additionalTaxAmt);
$total->setBaseGrandTotal((float)$total->getBaseGrandTotal() + $this->additionalTaxAmt);
custom amount
มาจากที่ไหน