How to add column Date Shipped to Sales Order Grid magento - magento

I'm stuck with adding column to sales order grid from shipment grid.
The problem is: "Purchased On" in DB has name "created_at", "Date Shipped" has also name "created_at", so when I join "created_at" from "sales_flat_shipment_grid" I see purchased on date only with name date shipped.
I'm using this code:
in _prepareCollection()
$collection->getSelect()->joinLeft(array('sfsg'=>'sales_flat_shipment_grid'),'sfsg.order_increment_id=main_table.increment_id',array('sfsg.created_at'));
and in _prepareColumns()
$this->addColumn('created_at', array(
'header' => Mage::helper('sales')->__('Date Shipped'),
'index' => 'created_at',
'type' => 'datetime',
'filter_index'=>'sfsg.created_at',
));
Could you please help me with this?

After few hours of trying I've found answer in my case it is:
in _prepareCollection() add
$collection->getSelect()->joinLeft(array('sfsg'=>$resource->getTableName('sales_flat_shipment_grid')),'sfsg.order_increment_id=main_table.increment_id',array(
'shiped' => new Zend_Db_Expr('group_concat(sfsg.created_at SEPARATOR " | ")'),
));
and in _prepareColums()
$this->addColumn('shiped', array(
'header' => Mage::helper('sales')->__('Date Shipped'),
'index' => 'shiped',
'type' => 'datetime',
'filter_index'=>'sfsg.created_at',
));

Related

Magento 1.9: sort grid view

I've added a column to my gridview and it suppose to show remaining days of an event.
$this->addColumn('calculate_days', array(
'header' => Mage::helper('myodule')->__('Remaining'),
'type' => 'options',
'width' => '200px',
'options' => $options,
'frame_callback' => array($this, 'getRemaining'),
'filter_condition_callback' => array($this, '_calculateFilter')
));
getRemaining method:
public function getRemaining($value, $row, $column)
{
// some calculation to find out remaining days based on some conditions
return $days;
}
If I don't specify the index key, clicking on the Remaining column does not work. So I've added index key to addColumn like bellow:
$this->addColumn('calculate_days', array(
'header' => Mage::helper('myodule')->__('Remaining'),
'type' => 'options',
'width' => '200px',
'index' => 'created_at',
'options' => $options,
'frame_callback' => array($this, 'getRemaining'),
'filter_condition_callback' => array($this, '_calculateFilter')
));
now the sort is WORK but not correctly. when I specify the index, sort applied by index column(in this case will sort by created_at) but I want to sort by remaining days.
what should I do to solve this problem? or is there any sort callback?
Why don't you add this value as a new field in this grid? And then update this field values each day by a cronjob.
Then you will have in a native way the items sorted and also you avoid to recalculate each value each time you filter o see this grid.
Hope it helps,
Regards

Add and show new column in sales_flat_order and show this at order grid in magento

I have added a new column (exported)in sales_flat_order and add at files at this location:
app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php
protected function _prepareCollection()
{
$collection = Mage::getResourceModel($this->_getCollectionClass())
->addAttributeToSelect('*')
->joinAttribute('exported','sales/order','sales_flat_order.entity_id',null,'left');
}
protected function _prepareColumns()
{
$this->addColumn('exported', array(
'header' => Mage::helper('sales')->__('Exported'),
'index' => 'exported',
'type' => 'checkbox',
'name' =>'exported',
'value' =>$this->getExported()==1 ? 'true' : 'false',
));
}
after that it showing on order grid in admin site,but it is not showing value and name,
I am new in magento,so please help me ,
stuck from 2 days.
Thanks for Assistance.
The method _prepareCollection() uses sales_flat_order_grid table as asource, thus you have to add the column to sales_flat_order_grid table and update the values of that column from the appropriate column of sales_flat_order table.
In this case, Magento will automatically update this column in sales_flat_order_grid table for future orders.
The better way to display the boolean column is Yes/No renderer. Use the following code for this in _prepareColumns() method
$this->addColumn('exported', array(
'header' => Mage::helper('sales')->__('Exported'),
'index' => 'exported',
'type' => 'options',
'width' => '70px',
'options' => array(
1 => Mage::helper('sales')->__('Yes'),
0 => Mage::helper('sales')->__('No'),
),
));
There are some other useful articles about cutomizing order grid. Check out the links below:
http://inchoo.net/ecommerce/magento/how-to-extend-magento-order-grid/
http://www.ecomdev.org/2010/07/27/adding-order-attribute-to-orders-grid-in-magento-1-4-1.html
http://www.demacmedia.com/magento-commerce/mini-tutorial-adding-column-to-orders-grid-in-magento-backend/
http://www.atwix.com/magento/column-to-orders-grid/

DateTime issue in magento

There is an issue in my magento site in displaying date. In Database table, Date is stored with value '2013-06-12 14:14:57' and when date is displaying in admin section it becomes 'Jun 12, 2013 10:14:57 PM', it is increasing 8 hours by the original value stored in database.
Below is the code which i am using
$this->addColumn('created_at', array(
'header' => Mage::helper('sales')->__('Purchased On'),
'index' => 'created_at',
'type' => 'datetime',
'width' => '100px',
));
Can anyone tell me why this happen?

How to customize the database value in magento customer grid

I created new magento grid for customer module for special purpose.
In that there have a column usertype it have value as 0,1,2.
It will displayed in customer grid page as 0,1,2.
But i need to display if value is,
0 -> Inactive
1 -> Activated
2 -> Baned
How can i dothis?
This is my code grid.php in _prepareColumns() :
$this->addColumn('usertype', array(
'header' => Mage::helper('customer')->__('Usertype'),
'width' => '150',
'index' => 'usertype'
));
If this is possible in magento.
if your greed implements Mage_Adminhtml_Block_Widget_Grid I suggest you to modify
you addColumn call to
$this->addColumn('usertype',
array(
'header'=> Mage::helper('customer')->__('Usertype'),
'width' => '150px',
'index' => 'usertype',
'type' => 'options',
'options' => $values
));
Where $values should be formatted as
array( 'value_id' => 'value_label')
Now you have dropdown created with values.
Then update _prepareCollection() function and add attribute values to customer grid collection
$collection->joinAttribute('usertype', 'customer/usertype', 'entity_id', null, 'left');
I got the solution from this
By using rendere will help to load vlaues to each row.

Magento sort items ordered

When I'm in: index.php/admin/sales_order/view/order_id/[ID]/key/[KEY]/ I can see the: "Items Ordered"
I'm looking for the code where the products are loaded in this table. I want to sort the ordered items by SKU.
Any hints?
PS:
I was looking in app/code/core/Mage/Adminhtml/Block/Sales/Order/View but couldn't find anything.
$collection->getSelect()->join(array(
'item'=>$collection->getTable('sales/order_item')),
'item.order_id=`main_table`.entity_id AND item.product_type="simple"',
array(
'skus' => new Zend_Db_Expr('group_concat(item.sku SEPARATOR ", ")'),
'name' => new Zend_Db_Expr('group_concat(item.name SEPARATOR ", ")')
));
$this->addColumn('skus', array(
'header' => Mage::helper('sales')->__('SKU'),
'index' => 'skus',
'type' => 'text',
));
$this->addColumn('name', array(
'header' => Mage::helper('sales')->__('NAME'),
'index' => 'name',
'type' => 'text'
));
You can add SKU as an option in the Manage Attributes menu in Admin. Having done that, set it to be the default in System > Configuration > Catalog > Catalog > Product Listing Sort By.
try this
alternatively you might like this

Resources