2014-12-05 3 views
0

Я застрял с добавлением нового столбца (отправленной даты) в сетку администратора заказа клиента. Я скопировал файл Grid.php из app/code/core/Mage/Adminhtml/Block/Sales/Order в app/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, в котором говорится, что есть дубликат идентификатора заказа. Если для заказов не существует множественных отгрузок, тогда сетка заказов на продажу прекрасна и показывает отправленную дату для соответствующих заказов.

Может ли кто-нибудь помочь мне в этом?

+0

Magento требует уникальный идентификатор заказа для каждой записи отображаются на сетке для обработки массовых обновлений из сетки и т.д., но ваш запрос будет делать присоединиться к один ко многим базы данных. При этом, когда у вас есть несколько отправлений, вы теперь будете пытаться отобразить заказ дважды в сетке, поэтому получите ошибку, так как вы не можете дважды указать идентификатор заказа. Простое решение может заключаться в том, чтобы добавить группу по порядку id-кода, чтобы обеспечить вам только одну запись за каждый заказ. Вопрос: какую дату отправки вы хотите отобразить для кратных? Первая партия или последняя отгрузка по заказу? – Ashley

+0

Кроме того, гораздо безопаснее расширять исходный файл magento, а не копировать его и все содержимое в локальное пространство имен. Причина в том, что если вы обновляете и пугаете изменения значительных частей файла, вам придется снова объединить основные изменения в свой полностью переопределенный файл для каждого обновления. Хороший путеводитель можно найти здесь: http://inchoo.net/magento/overriding-magento-blocks-models-helpers-and-controllers/ – Ashley

+0

@AshleySwatton благодарит. Я хотел бы получить последнюю отгрузку. – James

ответ

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

+0

Чтобы показать все отправления, вы можете заменить MAX на GROUP_CONCAT и показать их запятыми. Другая проблема, я точно знаю, о чем вы говорите, так же, как и я, но я не помню, как я ее исправил. Попытаюсь проверить его сегодня вечером и вернуться к вам :) –

+0

Я попробовал GROUP_CONCAT, но это не сработало. Было бы здорово, если бы вы могли сообщить мне, как вы исправили неправильное количество найденных записей. :) – James

Смежные вопросы