Magento 2: เพิ่มจำนวนภาษีที่กำหนดเองในรถเข็นโดยทางโปรแกรม


11

ฉันต้องการเพิ่มจำนวนภาษีที่กำหนดเองลงในรถเข็นชำระเงินแบบเป็นโปรแกรม

นี่คือตัวอย่าง

Cart Old Tax = 4.21

Custom Tax = 2

New Tax = 4.21 + 2 = 6

ตรวจสอบภาพหน้าจอด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องการสิ่งนี้โดยทางโปรแกรม


คุณcustom amountมาจากที่ไหน
Toan Nguyen

@ ToanNguyen ที่ฉันดึงข้อมูลจากเซสชันจุดของฉันคือวิธีเพิ่มมูลค่าให้กับภาษีได้อย่างไร
Dhiren Vasoya

@DhirenVasoya เราจะเพิ่มราคาภาษีที่กำหนดเองสำหรับสินค้าได้อย่างไรเมื่อใส่ในรถเข็นนี่คือคำถามของฉันmagento.stackexchange.com/questions/274520/…
jafar pinjar

@DhirenVasoya ด้านล่างวิธีแก้ปัญหาฉันพยายามนี่คือการแสดงรถเข็น แต่ไม่ได้คำนวณ ..
27719 jafar

@DirenVasoya - คุณได้รับการแก้ไขปัญหานี้หรือไม่?
Manashvi Birla

คำตอบ:


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()วิธีการต่างๆ


ให้ฉันตรวจสอบสิ่งนี้
Dhiren Vasoya

@Rajeev เราสามารถเพิ่มภาษีที่กำหนดเองสำหรับแต่ละผลิตภัณฑ์เมื่อเพิ่มลงในรถเข็นได้หรือไม่ นี่คือคำถามของฉันmagento.stackexchange.com/questions/274520/ …
jafar pinjar

ขอบคุณ @Rajeev เพื่อบันทึกวันของฉัน
Soundararajan m

ทำงานได้ดีขอบคุณ
snez

2

@ Dhiren Vasoya

ใช้บรรทัดเหล่านี้เช่นกัน

$total->addBaseTotalAmount('tax', $this->additionalTaxAmt);
$total->setGrandTotal((float)$total->getGrandTotal() + $this->additionalTaxAmt);
$total->setBaseGrandTotal((float)$total->getBaseGrandTotal() + $this->additionalTaxAmt);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.