Magento – Displaying columns in Sales Order Grid

magento-1.9order-gridsales-order

I have the following code to show some extra columns in the sales order grid. It correctly shows the columns and data, but when I try to click an order it says "No order exists".

I wondered if anyone can spot where I might be going wrong?

This code is in: /app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.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());

        $collection->getSelect()->join(array('billing'=>'sales_flat_order_address'),'main_table.entity_id=billing.parent_id and billing.address_type="billing"',array('*'));

        $collection->getSelect()->join(array('shipping'=>'sales_flat_order_address'),'main_table.entity_id=shipping.parent_id and shipping.address_type="shipping"',array('shipping.company as  shipping_company'));



        $this->setCollection($collection);

        parent::_prepareCollection();
        return Mage_Adminhtml_Block_Widget_Grid::_prepareCollection();
    }

    protected function _prepareColumns()
    {

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

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

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

        $this->addColumn('company', array(
            'header' => Mage::helper('sales')->__('Billing Company'),
            'index' => 'company',
            'filter_index' => 'billing.company',
        ));

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

        $this->addColumn('shipping_company', array(
            'header' => Mage::helper('sales')->__('Shipping Company'),
            'index' => 'shipping_company',
            'filter_index' => 'shipping.company',
        ));

        $this->addColumn('grand_total', array(
            'header' => Mage::helper('sales')->__('Grand Total'),
            '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(),
        ));

        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));
    }

}

Best Answer

This gist shows the changes from my 1.9ish Grid.php

--- Grid.php    2015-10-20 15:37:24.000000000 +0100
+++ Delete.php  2016-07-11 13:12:38.000000000 +0100
@@ -57,8 +57,17 @@
     protected function _prepareCollection()
     {
         $collection = Mage::getResourceModel($this->_getCollectionClass());
+
+        $collection->getSelect()->join(array('billing'=>'sales_flat_order_address'),'main_table.entity_id=billing.parent_id and billing.address_type="billing"',array('*'));
+
+        $collection->getSelect()->join(array('shipping'=>'sales_flat_order_address'),'main_table.entity_id=shipping.parent_id and shipping.address_type="shipping"',array('shipping.company as  shipping_company'));
+
+
+
         $this->setCollection($collection);
-        return parent::_prepareCollection();
+
+        parent::_prepareCollection();
+        return Mage_Adminhtml_Block_Widget_Grid::_prepareCollection();
     }

     protected function _prepareColumns()
@@ -71,42 +80,37 @@
             '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'),
+            'header' => Mage::helper('sales')->__('Order Date'),
             'index' => 'created_at',
             'type' => 'datetime',
             'width' => '100px',
         ));

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

+        $this->addColumn('company', array(
+            'header' => Mage::helper('sales')->__('Billing Company'),
+            'index' => 'company',
+            'filter_index' => 'billing.company',
+        ));
+
         $this->addColumn('shipping_name', array(
-            'header' => Mage::helper('sales')->__('Ship to Name'),
+            'header' => Mage::helper('sales')->__('Shipping 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('shipping_company', array(
+            'header' => Mage::helper('sales')->__('Shipping Company'),
+            'index' => 'shipping_company',
+            'filter_index' => 'shipping.company',
         ));

         $this->addColumn('grand_total', array(
-            'header' => Mage::helper('sales')->__('G.T. (Purchased)'),
+            'header' => Mage::helper('sales')->__('Grand Total'),
             'index' => 'grand_total',
             'type'  => 'currency',
             'currency' => 'order_currency_code',
@@ -141,7 +145,7 @@
                     'is_system' => true,
             ));
         }
-        $this->addRssList('rss/order/new', Mage::helper('sales')->__('New Order RSS'));
+        //$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'));

The bit that's weird is why you're calling prepareCollectin twice but it doesn't look like that would affect the view link. You might want to post the full diff of what you changed, against your base version of magento, and also what is getting generated as the view url for each row.

Related Topic