In your custom module database has the customer_id field:
IN Grid.php

protected function _prepareCollection() {
    
    $collection = Mage::getModel('custommodule/custommodule')->getCollection();
    
    $customerFirstNameAttr = Mage::getSingleton('customer/customer')->getResource()->getAttribute('firstname');
    $customerLastNameAttr = Mage::getSingleton('customer/customer')->getResource()->getAttribute('lastname');
    $collection->getSelect()
                ->joinLeft(
                    array('cusFirstnameTb' => $customerFirstNameAttr->getBackend()->getTable()),
                    'main_table.customer_id = cusFirstnameTb.entity_id AND cusFirstnameTb.attribute_id = '.$customerFirstNameAttr->getId(). ' AND cusFirstnameTb.entity_type_id = '.Mage::getSingleton('customer/customer')->getResource()->getTypeId(),
                    array('cusFirstnameTb.value')
                );   
 
    $collection->getSelect()
                ->joinLeft(
                    array('cusLastnameTb' => $customerLastNameAttr->getBackend()->getTable()),
                    'main_table.customer_id = cusLastnameTb.entity_id AND cusLastnameTb.attribute_id = '.$customerLastNameAttr->getId(). ' AND cusLastnameTb.entity_type_id = '.Mage::getSingleton('customer/customer')->getResource()->getTypeId(),
                    array('customer_name' => "CONCAT(cusFirstnameTb.value, ' ', cusLastnameTb.value)")
                ); 		
    
    $this->setCollection($collection);
    return parent::_prepareCollection();
}
protected function _prepareColumns() {
    
    //------------- Other Fields ---------
    
    $this->addColumn('customer_id', array(
        'header'    		    => Mage::helper('serialcodes')->__('Customer Name'),
        'align'     		    => 'left',
        'type'  		    => 'text',
        'index'     		    => 'customer_id',
        'filter_condition_callback' => array($this, '_customerNameFilter'),
        'renderer'                  => 'Namespace_YourModule_Block_Adminhtml_YourModule_Renderer_Customer',
    ));
    
    $this->addExportType('*/*/exportCsv', Mage::helper('serialcodes')->__('CSV'));
    $this->addExportType('*/*/exportXml', Mage::helper('serialcodes')->__('XML'));
  
  return parent::_prepareColumns();
}

Create a function in Grid.php after _prepareColumns() function:

public function _customerNameFilter($collection, $column) {
		
	$filterValue = $column->getFilter()->getValue();
    if(!is_null($filterValue)){
        $filterValue = trim($filterValue);
        $filterValue = preg_replace('/[\s]+/', ' ', $filterValue);
 
        $whereArr = array();
        $whereArr[] = $collection->getConnection()->quoteInto("cusFirstnameTb.value like ?", "%$filterValue%");
        $whereArr[] = $collection->getConnection()->quoteInto("cusLastnameTb.value like ?", "%$filterValue%");
        $whereArr[] = $collection->getConnection()->quoteInto("CONCAT(cusFirstnameTb.value, ' ', cusLastnameTb.value) like ?", "%$filterValue%");
        $where = implode(' OR ', $whereArr);
        $collection->getSelect()->where($where);
    }
}

create a renderer file in app/code/local/Namespace/YourModule/Block/Adminhtml/YourModule/Renderer/Customer.php
with the following content:

<?php

    class Namespace_YourModule_Block_Adminhtml_YourModule_Renderer_Customer extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
        
        public function render(Varien_Object $row) {
            
            $customerId =  $row->getData($this->getColumn()->getIndex());
            $customerData = Mage::getModel('customer/customer')->load($customerId);
            $customerName = $customerData->getFirstname() . ' ' . $customerData->getLastname();
            if($customerId){
                return "<a href='".$this->getUrl('adminhtml/customer/edit',array('id'=>$customerId))."'>$customerName</a>";
            }else{
                return false;
            }
        }
    }


0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *