Programlı olarak ödeme sepetine özel vergi tutarı eklemek istiyorum.
İşte örnek.
Cart Old Tax = 4.21
Custom Tax = 2
New Tax = 4.21 + 2 = 6
Aşağıdaki ekran görüntüsünü kontrol edin.
Programlı olarak buna ihtiyacım var.
Programlı olarak ödeme sepetine özel vergi tutarı eklemek istiyorum.
İşte örnek.
Cart Old Tax = 4.21
Custom Tax = 2
New Tax = 4.21 + 2 = 6
Aşağıdaki ekran görüntüsünü kontrol edin.
Programlı olarak buna ihtiyacım var.
Yanıtlar:
Etkinliği gözlemleyebilir sales_quote_address_collect_totals_after
ve başarabilirsiniz. Bunun için bir modül kurmanız ve bir olay yapılandırmanız gerekir. Diyelim ki modülümüz MStack_Exchange
.
Dosya : 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>
Dosya : 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;
}
}
Burada önemli çağrısıdır: $total->addTotalAmount('tax', $this->additionalTaxAmt);
. Bu 2
, mevcut vergi miktarıyla birlikte eklenecek ve bence sizin durumunuzda ihtiyacınız olan şey bu. Yapmanız gereken şey, $this->additionalTaxAmt
vergi tamponu değerinizle değiştirin.
Olay, sales_quote_address_collect_totals_after
toplam hesaplamalar gerçekleştikten hemen sonra patlar ve böylece oynamak için mükemmel bir yer haline gelir.
Bu toplam hesaplamaların nerede olduğunu merak ediyorsanız, o zaman Magento\Quote\Model\Quote\TotalsCollector::collect()
ve Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals()
yöntemlere bakmanız gerekir .
custom amount
geliyorsun?