If you want to add custom price or custom fee in your grand total, then you can use following code.
Create sales.xml file in you module’s etc folder.
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Sales:etc/sales.xsd"> <section name="quote"> <group name="totals"> <item name="customfee" instance="Magemeta\Customfee\Model\Total\Customfee" sort_order="150"/> </group> </section> </config>
In the next step, define app\code\Magemeta\Customfee\Model\Total\Customfee.php, where you will update the grandtotal according to your custom fee.
class Customfee extends \Magento\Quote\Model\Quote\Address\Total\AbstractTotal { protected $quoteValidator = null; public function __construct(\Magento\Quote\Model\QuoteValidator $quoteValidator) { $this->quoteValidator = $quoteValidator; } public function collect( \Magento\Quote\Model\Quote $quote, \Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment, \Magento\Quote\Model\Quote\Address\Total $total ) { parent::collect($quote, $shippingAssignment, $total); $exist_amount = 0; //$quote->getCustomfee(); $customfee = 100; //enter amount which you want to set $balance = $customfee - $exist_amount;//final amount $total->setTotalAmount('customfee', $balance); $total->setBaseTotalAmount('customfee', $balance); $total->setCustomfee($balance); $total->setBaseCustomfee($balance); $total->setGrandTotal($total->getGrandTotal() + $balance); $total->setBaseGrandTotal($total->getBaseGrandTotal() + $balance); return $this; } protected function clearValues(Address\Total $total) { $total->setTotalAmount('subtotal', 0); $total->setBaseTotalAmount('subtotal', 0); $total->setTotalAmount('tax', 0); $total->setBaseTotalAmount('tax', 0); $total->setTotalAmount('discount_tax_compensation', 0); $total->setBaseTotalAmount('discount_tax_compensation', 0); $total->setTotalAmount('shipping_discount_tax_compensation', 0); $total->setBaseTotalAmount('shipping_discount_tax_compensation', 0); $total->setSubtotalInclTax(0); $total->setBaseSubtotalInclTax(0); } /** * Assign subtotal amount and label to address object * * @param \Magento\Quote\Model\Quote $quote * @param Address\Total $total * @return array */ public function fetch(\Magento\Quote\Model\Quote $quote, \Magento\Quote\Model\Quote\Address\Total $total) { return [ 'code' => 'customfee', 'title' => 'Custom Fee', 'value' => 100 ]; } /** * Get Subtotal label * * @return \Magento\Framework\Phrase */ public function getLabel() { return __('Custom Fee'); } }