2014-12-05 94 views
0

我坚持将新列(发货日期)添加到销售订单管理网格。我从app/code/core/Mage/Adminhtml/Block/Sales/Order复制的文件Grid.phpapp/code/local/Mage/Adminhtml/Block/Sales/Order,并在_prepareCollection()功能添加代码如何将销售日期添加到管理销售订单网格

$collection->getSelect()->joinLeft('sales_flat_shipment_grid','sales_flat_shipment_grid.order_id=main_table.entity_id',array('shipped_date' => 'sales_flat_shipment_grid.created_at')); 

_prepareColumns()加入这个

$this->addColumn('shipped_date', array(
     'header' => Mage::helper('sales')->__('Shipped Date'), 
     'index'  => 'shipped_date', 
     'type'  => 'datetime', 
     'filter_index'=>'sales_flat_shipment_grid.created_at', 
)); 

我的问题是,当有多个发货的订单,当我走到销售订单网格我得到错误There has been an error processing your request它说有一个重复的订单ID。 如果订单没有多个货件,则销售订单网格无误,并显示相应订单的发货日期。

有人可以帮助我吗?在评论中提到

+0

Magento的需要显示在网格处理从电网等大规模更新每个记录的唯一订单ID,您的查询会做一个一对多的数据库连接。有了这个,当您有多个货件时,您现在将尝试在网格中显示订单两次,这就是为什么要收到错误,因为您无法将订单ID重复两次。一个简单的解决方案可能是通过订单id子句添加一个组,以确保您每次订单只能获得一个记录。问题是,您想要显示倍数的装运日期?针对订单的第一批货物或最后一批货物? – Ashley 2014-12-05 14:42:04

+0

另外,扩展原始的magento文件比将它及其所有内容复制到本地名称空间要安全得多。原因在于,如果升级和magento更改了文件的重要部分,那么您必须在每次升级时再次将核心更改合并到完全覆盖的文件中。一个很好的指南可以在这里找到:http://inchoo.net/magento/overriding-magento-blocks-models-helpers-and-controllers/ – Ashley 2014-12-05 14:44:18

+0

@AshleySwatton谢谢。我想获得最后一批货物。 – James 2014-12-07 16:22:46

回答

1

正如,你需要组的结果由ENTITY_ID:

$collection 
->getSelect() 
->joinLeft('sales_flat_shipment_grid', 
    'sales_flat_shipment_grid.order_id=main_table.entity_id', 
    array('shipped_date' => 'MAX(sales_flat_shipment_grid.created_at)') // Since you want the most recent one 
); 

$collection->getSelect()->group('main_table.entity_id'); 

无法测试,但这样的事情应该工作。

问候, 哈维尔

+0

谢谢哈维尔。唯一的问题是,在订单面板中显示的记录数量不正确。我在每个页面的下拉菜单中选择了20个项目,它显示了20个项目,但显示找到总计1个记录。你知道为什么会发生这种情况吗?另外我想知道是否有方法显示订单的多个货件的装运日期? – James 2014-12-08 12:18:20

+0

要显示所有货件,您可以用GROUP_CONCAT替换MAX,并且应该显示逗号分隔。另一个问题,我确切地知道你在说什么,因为我也经历过,但我不记得我是如何修复它的。将尝试检查它今天晚上回到你:) – 2014-12-08 12:21:48

+0

我试过GROUP_CONCAT,但它没有奏效。如果你能让我知道你是如何解决找到的不正确的记录数的,那将是非常好的。 :) – James 2014-12-08 12:29:51