A default installation of Magento does not include information about “customer group” in one of the columns in either the Sales Grid. This can be a serious shortcoming when you want to filter/list/report all of the orders in the Sales Grid which relate to a particular group of customers.
By default “Sales > Orders” grid uses the “sales_flat_order_grid” table for rendering. This table is basically a redundant subset of “sales_flat_order” table. Surprisingly “sales_flat_order” table has the “customer_group_id” column in it, while “sales_flat_order_grid” table does not. So our first step is to add the “customer_group_id” column to the “sales_flat_order_grid” table.
We do so by simple upgrade script that executes the code similar to this:
$installer->getConnection() ->addColumn($installer->getTable('sales/order_grid'), 'customer_group_id', array( 'TYPE' => Varien_Db_Ddl_Table::TYPE_SMALLINT, 'NULLABLE' => false, 'DEFAULT' => '0', 'COMMENT' => 'Customer Group' ));
If this install/upgrade script executed successfuly we should see the new “customer_group_id” column in the “sales_flat_order_grid” table. Please note that Magento will automatically populate this column from the data in the “sales_flat_order_grid.customer_group_id” once the new orders get saved.
After that we will rewrite the Mage_Adminhtml_Block_Sales_Order_Grid and Mage_Adminhtml_Block_Sales_Order_Create_Customer_Grid but change only the minimum necessary for our new “Customer Group” column to appear.
We do so by adding the proper entries under the config.xml
<global> <blocks> <adminhtml> <rewrite> <sales_order_create_customer_grid>Mycompany_Myextension_Block_Adminhtml_Sales_Order_Create_Customer_Grid</sales_order_create_customer_grid> <sales_order_grid>Mycompany_Myextension_Block_Adminhtml_Sales_Order_Grid</sales_order_grid> </rewrite> </adminhtml> </blocks> </global>
Finally we add the rewrite blocks.
addFieldToFilter('customer_group_id', array('gt'=> 0)) ->load() ->toOptionHash(); $this->addColumn('customer_group_id', array( 'header' => Mage::helper('customer')->__('Customer Group'), 'width' => '100', 'index' => 'customer_group_id', 'type' => 'options', 'options' => $groups, )); $this->addColumnsOrder('customer_group_id', 'shipping_name'); return parent::_prepareColumns(); } }
addFieldToFilter('customer_group_id', array('gt'=> 0)) ->load() ->toOptionHash(); $this->addColumn('group', array( 'header' => Mage::helper('customer')->__('Group'), 'width' => '100', 'index' => 'group_id', 'type' => 'options', 'options' => $groups, )); $this->addColumnsOrder('group', 'email'); return parent::_prepareColumns(); } }
And that’s it. Now you should have the “Customer Group” columns on your “Sales > Orders” and “Sales > Orders > Create New Order” grids.
**** Update – Aug 19, 2014 ****
While the above solution will add the Customer Group column to the sales_order_grid, it will only populate that column with orders created, or edited, after its addition. To populate it with the Customer Group on previous orders we need to force a rebuild of the sales_flat_order grid.
//rebuild sales_flat_order_grid by updating status
$vals = array();
$vals['status'] = $status;
$where = $write->quoteInto('entity_id =?', $order_id);
$write->update("sales_flat_order_grid", $vals ,$where);