Количество заказов, размещенных клиентом в таблице заказов и клиентов


Я хочу отобразить общее количество заказов, размещенных клиентом, в таблице заказов и клиентов. Это поможет мне определить тип клиента.

Grid.php

protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());

    $sql ='SELECT COUNT(*)'
    . ' FROM ' . Mage::getSingleton('core/resource')->getTableName('sales/order') . ' AS o, customer_entity AS e'
    . ' WHERE o.customer_id=e.entity_id' ;
    $expr = new Zend_Db_Expr('(' . $sql . ')'); 
    $collection->getSelect()->from(null, array('orders_count'=>$expr));


    $this->setCollection($collection);
    return parent::_prepareCollection();
}    
protected function _prepareColumns()
{
        $this->addColumn('orders_count', array(
        'header'    => Mage::helper('customer')->__('Total No. of Orders'),
        'align'     => 'left',
        'width'     => '40px',
        'index'     => 'orders_count',
        'type'  => 'number',
        'sortable' => true,
    ));
 }

Это показывает мне общее количество размещенных заказов, а не клиентов.

Как я могу показать "нет". заказов с точки зрения клиента в заказе, а также в сетке клиентов?

Author: Rajat Agarwal, 2017-03-04

1 answers


Попробуйте использовать код ниже.

Grid.php

protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $readAdapter = Mage::getSingleton('core/resource')->getConnection('core_read');
    $select = $readAdapter->select()
            ->from('sales_flat_order_grid')
            ->columns(array('orders_count' => new Zend_Db_Expr('COUNT(*)'))
    )->group('customer_id');
    $collection->getSelect()->joinLeft(
        array('orders_count' => new Zend_Db_Expr('('.$select.')')),
        'main_table.customer_id = orders_count.customer_id',
        array('orders_count.orders_count')
    );
    $collection->addFilterToMap('orders_count', 'orders_count.orders_count');
    $this->setCollection($collection);
    return parent::_prepareCollection();
}    
protected function _prepareColumns()
{
        $this->addColumn('orders_count', array(
        'header'    => Mage::helper('customer')->__('Total No. of Orders'),
        'align'     => 'left',
        'width'     => '40px',
        'index'     => 'orders_count',
        'type'  => 'number',
        'sortable' => true,
    ));
 }



Чтобы добавить количество заказов в сетку клиентов , добавьте код ниже в свою функцию _prepareCollection(), прежде чем устанавливать сбор в строке $this->setCollection($collection);

$readAdapter = Mage::getSingleton('core/resource')->getConnection('core_read');
$select = $readAdapter->select()
            ->from('sales_flat_order_grid')
            ->columns(array('orders_count' => new Zend_Db_Expr('COUNT(*)'))
    )->group('customer_id');
    $collection->getSelect()->joinLeft(
        array('orders_count' => new Zend_Db_Expr('('.$select.')')),
        'e.entity_id = orders_count.customer_id',
        array('orders_count.orders_count')
    );
$collection->addFilterToMap('orders_count', 'orders_count.orders_count');

И добавьте свою колонку точно так же с filter_condition_callback,

$this->addColumn('orders_count', array(
    'header'    => Mage::helper('customer')->__('Total No. of Orders'),
    'align'     => 'left',
    'width'     => '40px',
    'index'     => 'orders_count',
    'type'  => 'number',
    'filter_condition_callback' => array($this, '_ordersCountFilterCallBack'),
    'sortable' => false,
));

И создайте функцию в том же файле,

protected function _ordersCountFilterCallBack($collection, $column)
{
    if (!$value = $column->getFilter()->getValue()) {return $this;}
    $from = ($value['from']) ? $value['from']: 0;
    $to = ($value['to']) ? $value['to'] : 999999;
    $collection->getSelect()->where("orders_count.orders_count >= $from AND  orders_count.orders_count <= $to");
    return $this;
}

ПРИМЕЧАНИЕ: Я отключил сортировку для этого поля, потому что у меня не было на это времени. Вы можете попробовать это самостоятельно, или я сделаю это обновите, как только у меня будет для этого время.

 8
Author: Jaimin Sutariya, 2017-03-06 11:36:39