0

I'm wondering how can I show the shipping amount on the backend orders table.

I've already installed some extensions for grid customization but none of it has the option.

I've already found some articles explaining how to create columns on the backend and how to to make a join query to get certain values from the database but any of these articles were specific about the shipping amount value.

If someone could help me on that I'll really aprecciate! Thanks.

After Rakesh Suggestion

<?php

class Mage_Adminhtml_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Widget_Grid
{

    public function __construct()
    {
        parent::__construct();
        $this->setId('sales_order_grid');
        $this->setUseAjax(true);
        $this->setDefaultSort('created_at');
        $this->setDefaultDir('DESC');
        $this->setSaveParametersInSession(true);
    }

    /**
     * Retrieve collection class
     *
     * @return string
     */
    protected function _getCollectionClass()
    {
        return 'sales/order_grid_collection';
    }

    protected function _prepareCollection()
    {
        $collection = Mage::getResourceModel($this->_getCollectionClass());
        $this->setCollection($collection);
        $collection->getSelect()
            ->join(
                array('order'=>'sales_flat_order'),"order.entity_id=main_table.entity_id",
                array("shipping_amount"=>'order.shipping_amount'))->group("main_table.entity_id");
            $this->_collection = $collection;
        return parent::_prepareCollection();
    }

    protected function _prepareColumns()
    {

        $this->addColumn('real_order_id', array(
            'header'=> Mage::helper('sales')->__('Order #'),
            'width' => '80px',
            'type'  => 'text',
            'index' => 'increment_id',
        ));

        if (!Mage::app()->isSingleStoreMode()) {
            $this->addColumn('store_id', array(
                'header'    => Mage::helper('sales')->__('Purchased From (Store)'),
                'index'     => 'store_id',
                'type'      => 'store',
                'store_view'=> true,
                'display_deleted' => true,
            ));
        }

        $this->addColumn('created_at', array(
            'header' => Mage::helper('sales')->__('Purchased On'),
            'index' => 'created_at',
            'type' => 'datetime',
            'width' => '100px',
        ));

        $this->addColumn('billing_name', array(
            'header' => Mage::helper('sales')->__('Bill to Name'),
            'index' => 'billing_name',
        ));

        $this->addColumn('shipping_name', array(
            'header' => Mage::helper('sales')->__('Ship to Name'),
            'index' => 'shipping_name',
        ));

        $this->addColumn('base_grand_total', array(
            'header' => Mage::helper('sales')->__('G.T. (Base)'),
            'index' => 'base_grand_total',
            'type'  => 'currency',
            'currency' => 'base_currency_code',
        ));

        $this->addColumn('grand_total', array(
            'header' => Mage::helper('sales')->__('G.T. (Purchased)'),
            'index' => 'grand_total',
            'type'  => 'currency',
            'currency' => 'order_currency_code',
        ));

        $this->addColumn('status', array(
            'header' => Mage::helper('sales')->__('Status'),
            'index' => 'status',
            'type'  => 'options',
            'width' => '70px',
            'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
        ));

        $this->addColumnAfter('shipping_amount', array(
                'header' => Mage::helper('sales')->__('Shipping charge'),
                'index' => 'shipping_amount',
            ),'shipping_name');

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
            $this->addColumn('action',
                array(
                    'header'    => Mage::helper('sales')->__('Action'),
                    'width'     => '50px',
                    'type'      => 'action',
                    'getter'     => 'getId',
                    'actions'   => array(
                        array(
                            'caption' => Mage::helper('sales')->__('View'),
                            'url'     => array('base'=>'*/sales_order/view'),
                            'field'   => 'order_id',
                            'data-column' => 'action',
                        )
                    ),
                    'filter'    => false,
                    'sortable'  => false,
                    'index'     => 'stores',
                    'is_system' => true,
            ));
        }
        $this->addRssList('rss/order/new', Mage::helper('sales')->__('New Order RSS'));

        $this->addExportType('*/*/exportCsv', Mage::helper('sales')->__('CSV'));
        $this->addExportType('*/*/exportExcel', Mage::helper('sales')->__('Excel XML'));

        return parent::_prepareColumns();
    }

    protected function _prepareMassaction()
    {
        $this->setMassactionIdField('entity_id');
        $this->getMassactionBlock()->setFormFieldName('order_ids');
        $this->getMassactionBlock()->setUseSelectAll(false);

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/cancel')) {
            $this->getMassactionBlock()->addItem('cancel_order', array(
                 'label'=> Mage::helper('sales')->__('Cancel'),
                 'url'  => $this->getUrl('*/sales_order/massCancel'),
            ));
        }

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/hold')) {
            $this->getMassactionBlock()->addItem('hold_order', array(
                 'label'=> Mage::helper('sales')->__('Hold'),
                 'url'  => $this->getUrl('*/sales_order/massHold'),
            ));
        }

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/unhold')) {
            $this->getMassactionBlock()->addItem('unhold_order', array(
                 'label'=> Mage::helper('sales')->__('Unhold'),
                 'url'  => $this->getUrl('*/sales_order/massUnhold'),
            ));
        }

        $this->getMassactionBlock()->addItem('pdfinvoices_order', array(
             'label'=> Mage::helper('sales')->__('Print Invoices'),
             'url'  => $this->getUrl('*/sales_order/pdfinvoices'),
        ));

        $this->getMassactionBlock()->addItem('pdfshipments_order', array(
             'label'=> Mage::helper('sales')->__('Print Packingslips'),
             'url'  => $this->getUrl('*/sales_order/pdfshipments'),
        ));

        $this->getMassactionBlock()->addItem('pdfcreditmemos_order', array(
             'label'=> Mage::helper('sales')->__('Print Credit Memos'),
             'url'  => $this->getUrl('*/sales_order/pdfcreditmemos'),
        ));

        $this->getMassactionBlock()->addItem('pdfdocs_order', array(
             'label'=> Mage::helper('sales')->__('Print All'),
             'url'  => $this->getUrl('*/sales_order/pdfdocs'),
        ));

        $this->getMassactionBlock()->addItem('print_shipping_label', array(
             'label'=> Mage::helper('sales')->__('Print Shipping Labels'),
             'url'  => $this->getUrl('*/sales_order_shipment/massPrintShippingLabel'),
        ));

        return $this;
    }

    public function getRowUrl($row)
    {
        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
            return $this->getUrl('*/sales_order/view', array('order_id' => $row->getId()));
        }
        return false;
    }

    public function getGridUrl()
    {
        return $this->getUrl('*/*/grid', array('_current'=>true));
    }

}

1 Answer 1

1

To add Shipping Amount you have to join sales_flat_order table with current sales_flat_order_grid table.

Here is the code for add Shipping Amount

First need to override Mage_Adminhtml_Block_Sales_Order_Grid

edit your module's config.xml and add this xml code.

<blocks>
  <ordergrid>
    <class>Rk_OrderGrid_Block</class>
  </ordergrid>
        <adminhtml>
            <rewrite>
                <sales_order_grid>Rk_OrderGrid_Block_Adminhtml_Sales_Order_Grid</sales_order_grid>
            </rewrite>
        </adminhtml>
</blocks>

after that create Rk/OrderGrid/Block/Adminhtml/Sales/Order/Grid.php file and below code.

class Rk_OrderGrid_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid
    {
        public function setCollection($collection)
        {
            $collection->getSelect()
            ->join(
                array('order'=>'sales_flat_order'),"order.entity_id=main_table.entity_id",
                array("shipping_amount"=>'order.shipping_amount'))->group("main_table.entity_id");
            $this->_collection = $collection;
        }
         protected function _prepareColumns()
        {
             $this->addColumnAfter('shipping_amount', array(
                'header' => Mage::helper('sales')->__('Shipping charge'),
                'index' => 'shipping_amount',
            ),'shipping_name');
            return parent::_prepareColumns();
        }
    }

It will add Shipping Amount column after Ship to Name column.

Rename Rk_OrderGrid with your module name.

UPDATE

replace your _prepareCollection() function with this

    protected function _prepareCollection()
    {
        $collection = Mage::getResourceModel($this->_getCollectionClass());
        $collection->getSelect()
                   ->join(
                array('order'=>'sales_flat_order'),"order.entity_id=main_table.entity_id",
                array("shipping_amount"=>'order.shipping_amount'))->group("main_table.entity_id");
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }
7
  • Rakesh, instead create a module is it possible to only copy Grid.php from /app/code/core/Mage/Adminhtml/Block/Sales/Order/ to /app/code/local/Mage/Adminhtml/Block/Sales/Order/ ? Commented Jan 15, 2018 at 12:54
  • I've tried to only copy the Grid.php to a local pool. The column was created but no data was filled there. Commented Jan 15, 2018 at 13:04
  • I have updated my answer please try that. Commented Jan 15, 2018 at 14:37
  • Rakesh, the column still empty. Is there a way to debug it ? Commented Jan 15, 2018 at 16:52
  • add this line echo $collection->getSelect()->__toString(); before $this->setCollection($collection); and fire that sql query in database and check if you get shipping amount or not. Commented Jan 15, 2018 at 16:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.