You can learn how to add a custom amount in order total from here:
http://webkul.com/blog/add-custom-pricefee-order-total-magento2/
Now, if you want to display the custom price fee on the sales order view page, then you can follow the following process:
firstly, you need to create a sales_order_view.xml file in the folder:
app/code/Webkul/Test/view/frontend/layout
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="order_totals"> <block class="Webkul\Test\Block\Sales\Order\Test" name="customfee"/> </referenceContainer> </body> </page>
Now, you need to define a block file in which you need to define the init_totals() function, which adds a custom fee amount to your order view.
<?php namespace Webkul\Test\Block\Sales\Order; use Magento\Sales\Model\Order; class Test extends \Magento\Framework\View\Element\Template { /** * @var Order */ protected $_order; /** * @var \Magento\Framework\DataObject */ protected $_source; /** * @param \Magento\Framework\View\Element\Template\Context $context * @param array $data */ public function __construct( \Magento\Framework\View\Element\Template\Context $context, array $data = [] ) { parent::__construct($context, $data); } public function getSource() { return $this->_source; } public function displayFullSummary() { return true; } public function initTotals() { $parent = $this->getParentBlock(); $this->_order = $parent->getOrder(); $this->_source = $parent->getSource(); $title = 'Custom Fee'; $store = $this->getStore(); if($this->_order->getCustomfee()!=0){ $customAmount = new \Magento\Framework\DataObject( [ 'code' => 'customfee', 'strong' => false, 'value' => $this->_order->getCustomfee(), 'label' => __($title), ] ); $parent->addTotal($customAmount, 'customfee'); } return $this; } /** * Get order store object * * @return \Magento\Store\Model\Store */ public function getStore() { return $this->_order->getStore(); } /** * @return Order */ public function getOrder() { return $this->_order; } /** * @return array */ public function getLabelProperties() { return $this->getParentBlock()->getLabelProperties(); } /** * @return array */ public function getValueProperties() { return $this->getParentBlock()->getValueProperties(); } }
Here, the init_totals() function adds the custom fee to your order by using the addTotal() method.
$customAmount is an object of dataObject that stores the label, code, and value for a custom fee.
‘customfee’ is the custom amount field name.
After this, your custom fee amount is visible on the customer’s order view page.
I hope this blog will help you with How to Display Custom Price fees on the Sales Order View Page. You may also check our wide range of best Magento 2 Extensions.
Please reach out to our team via a support ticket if you have any queries.
Try this and if you have any queries then just comment below 🙂
Notice: Undefined index: class in /var/www/jewel/vendor/magento/framework/View/Layout/Generator/Block.php on line 213