Magento 2: Thêm số tiền thuế tùy chỉnh vào giỏ hàng theo lập trình


10

Tôi muốn thêm số tiền thuế tùy chỉnh vào giỏ hàng thanh toán theo chương trình.

Dưới đây là ví dụ.

Cart Old Tax = 4.21

Custom Tax = 2

New Tax = 4.21 + 2 = 6

Kiểm tra ảnh chụp màn hình bên dưới.

nhập mô tả hình ảnh ở đây

Tôi cần điều này được thực hiện theo chương trình.


Bạn custom amountđến từ đâu
Toàn Nguyễn

@ToanNguyen mà tôi lấy từ phiên, Quan điểm của tôi là làm thế nào để thêm giá trị đó vào thuế.
Dhiren Vasoya

@DhirenVasoya, làm thế nào chúng ta có thể thêm giá thuế tùy chỉnh cho sản phẩm khi thêm vào giỏ hàng, đây là câu hỏi của tôi, magento.stackexchange.com/questions/274520/
jafar pinjar

@DhirenVasoya, dưới đây là giải pháp tôi đã thử, đây là hiển thị giỏ hàng nhưng không tính toán ..
jafar pinjar

@DhirenVasoya - bạn đã có giải pháp cho vấn đề này chưa?
Manashvi Birla

Câu trả lời:


4

Bạn có thể quan sát sự kiện sales_quote_address_collect_totals_aftervà đạt được nó. Đối với điều này, bạn cần thiết lập một mô-đun và cấu hình một sự kiện. Hãy nói rằng mô-đun của chúng tôi là MStack_Exchange.

Tập tin : 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>

Tập tin : 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;
    }
}

Cuộc gọi quan trọng ở đây là : $total->addTotalAmount('tax', $this->additionalTaxAmt);. Điều này sẽ thêm 2vào số tiền thuế hiện có và tôi nghĩ đó là những gì bạn cần trong trường hợp của bạn. Vì vậy, những gì bạn cần làm là, thay thế $this->additionalTaxAmtbằng giá trị bộ đệm thuế của bạn.

Sự kiện này diễn sales_quote_address_collect_totals_afterra ngay sau khi các tính toán tổng thể đã xảy ra và do đó trở thành một nơi hoàn hảo để chơi xung quanh.

Nếu bạn tò mò muốn biết tổng số tính toán này đang diễn ra ở đâu, thì bạn cần xem xét Magento\Quote\Model\Quote\TotalsCollector::collect()Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals()phương pháp.


Hãy để tôi kiểm tra điều này.
Dhiren Vasoya

@Rajeev, chúng tôi có thể thêm thuế tùy chỉnh cho từng sản phẩm khi thêm vào giỏ hàng không? đây là câu hỏi của tôi, magento.stackexchange.com/questions/274520/ấc
jafar pinjar

Cảm ơn @Rajeev để cứu lấy ngày của tôi
Soundararajan m

Hoạt động cảm ơn bạn
snez

2

@Dhiren Vasoya

Sử dụng những dòng này là tốt.

$total->addBaseTotalAmount('tax', $this->additionalTaxAmt);
$total->setGrandTotal((float)$total->getGrandTotal() + $this->additionalTaxAmt);
$total->setBaseGrandTotal((float)$total->getBaseGrandTotal() + $this->additionalTaxAmt);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.