As you know, in database, newsletter_subscriber table have customer_id column
In admin newsletter subscriber grid, i add column Customer Group like this
$this->addColumn('customer_group', array(
'header' => Mage::helper('newsletter')->__('Customer Group'),
'index' => 'customer_group'
));
So how can get customer group from customer_id in subscriber?
thks
modify last lines in protected function _prepareCollection() method
$collection->getSelect()->join(array('ce'=>'customer_entity'),'ce.entity_id=main_table.customer_id',array('ce.group_id'));
$collection->getSelect()->join(array('cg'=>'customer_group'),'cg.customer_group_id=ce.group_id',array('cg.customer_group_code'));
$this->setCollection($collection);
and then add field like this
$this->addColumn('customer_group_code', array(
'header' => Mage::helper('newsletter')->__('Customer Group'),
'index' => 'customer_group_code'
));
Related
I have developed custom admin module. I have used the usual methods _prepareCollection and _prepareColumns to show the data in Grid.
protected function _prepareCollection()
{
$collection = Mage::getModel("wallets/sellerrequest")->getCollection();
$collection->getSelect()
->join( array('ce1' => 'customer_entity_varchar'), 'ce1.entity_id=main_table.seller_id and ce1.attribute_id = "5"', array('seller_name' => 'value'));
$this->setCollection($collection);
parent::_prepareCollection();
return $this;
}
protected function _prepareColumns()
{
$helper = Mage::helper('sellers');
$currency = (string) Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE);
$this->addColumn('id', array(
'header' => $helper->__('Request No'),
'index' => 'id'
));
$this->addColumn('Requested Amount', array(
'header' => $helper->__('Requested Amount'),
'index' => 'request_amount'
));
$this->addColumn('Seller Name', array(
'header' => $helper->__('Seller Name'),
'index' => 'seller_name',
));
$this->addColumn('Status', array(
'header' => $helper->__('Status'),
'index' => 'status_flag'
));
All the data shows correctly according to the table values. But I want to show the Request Amount column values preceding with $ sign, e.g. $300 etc. Also, I want to show the status flag according to condition. Means if the status flag is 1 then I want to show the value as "Approved", if flag is 2 then "Pending" etc. How should I customize the collection data and show in grid according to my requirement? Help appreciated.
Thanks.
I have answered to a question similar to your requirement
How to properly add a shipping_description column in magento order grid?
Check my answer and try to compare with your problem. In this example there is the solution for our currency problem too.
So check this out.Hope it will be helpful.
Here you should implement Grid Renderer.
Here is complete tutorial for that : http://inchoo.net/magento/how-to-add-custom-renderer-for-a-custom-column-in-magento-grid/
You can customize the value of any colum
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',
));
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/
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.
I'm trying to get the increment_id from the sales_flat_invoice table to appear on my orders grid.
I've managed to do that, but then it will only show orders which has been invoiced.
The sum it up, what I'm trying to do, is to create a column which contain the increment_id of the invoice (if the order has been invoiced - if not, it should be blank).
The code is used was the following:
In _prepareCollection() :
protected function _prepareCollection()
{
$collection = Mage::getResourceModel($this->_getCollectionClass());
$collection->getSelect()
->join(
array('address' => $collection->getTable("sales/order_address")),
'main_table.entity_id = address.parent_id AND address.address_type = "shipping"',
array('postcode')
);
//$collection->join('invoice', 'main_table.entity_id = invoice.order_id', 'increment_id as invoice_id');
$this->setCollection($collection);
return parent::_prepareCollection();
}
In _prepareColumns() :
$this->addColumn('invoice_id', array(
'header' => 'Faktureret',
'index' => 'invoice_id',
'width' => '70px',
'type' => 'text',
));
Thanks and have a beautiful day!
If you want to add the invoice id in the sales order grid then you can use the following code in your prepareCollection() function as
$collection->getSelect()->joinLeft('sales_flat_invoice', 'main_table.entity_id = sales_flat_invoice.order_id', 'increment_id as invoice_id');
By using the following code you will able to get the invoice id from the current order id in sales order grid.
after this add column field as
$this->addColumn('invoice_id',
array(
'header'=> $this->__('Invoice Id'),
'align' =>'right',
'type=' => 'text',
'index' => 'invoice_id',
)
);
For more follow me on
http://www.webtechnologycodes.com
You need to do a LEFT JOIN. Use ->joinLeft. ->join references to ->joinInner
To get invoice details from order detail. you can use
$_orders = $this->getOrders();
$_invoices = $_order->getInvoiceCollection();