NotMuchOfAProgrammer
NotMuchOfAProgrammer

Reputation: 315

Adding a search field to the Magento admin

Is there a way to add a new search field in the Magento admin under "Orders"? I want to be able to search by coupon code usage (ex: search by coupon code: "sale2013", come up with all the orders that applied that coupon code during checkout).

enter image description here

I'm able to pull this data out of the Magento DB, but I'd really like to add this functionality to the Magento admin to make it easier for co-workers and my boss. Can it be done and, if so, ideas as to where I can start? Thanks guys.

Upvotes: 0

Views: 1351

Answers (2)

Fabian Blechschmidt
Fabian Blechschmidt

Reputation: 4141

Adding new columns to a grid is easy with this extension: https://github.com/magento-hackathon/GridControl

Add this extension, write your own with a gridcontrol.xml inside your etc directory

And then something like this should work:

<?xml version="1.0"?>
<gridcontrol>
<grids>
    <order.grid>
        <coupon_code>
            <after>columnname</after>

            <add>
                <header>Coupon code</header>
                <type>text</type>
                <index>coupon_code</index>
                <joinField>coupon_code|sales/order|coupon_code|entity_id=entity_id||left</joinField>
            </add>
        </coupon_code>
    </order.grid>
</grids>
</gridcontrol>

Upvotes: 0

davidalger
davidalger

Reputation: 584

The coupon code used during checkout is stored on the primary order table (sales_flat_order) when the customer checks out. If there is no value, then no coupon code was used. However, the data for the grid in the admin comes from the sales_flat_order_grid table; it comes from there instead of the primary order table for performance reasons which become particularly evident on very high traffic sites.

Now that we know where the data is that you need to filter on, and where the data for the grid comes from, we can move on to build it!

The first thing that you will need to do is add a coupon_code column to the sales_flat_order_grid table matching the definition of the column on the sales_flat_order table. The values in the coupon_code column of sales_flat_order should automatically populate into sales_flat_order_grid once the matching column is there and your cache storage has been flushed.

The data is updated on the order save, so to be specific, new orders and orders updated via the admin (even a comment on the order) will have the data populated. For existing orders, run a data upgrade script to copy the values over.

After the data/schemas are in place, you'll want to have the grid show a filterable column for it. For this you will want to rewrite the Mage_Adminhtml_Block_Sales_Order_Grid class from your custom module (please don't edit the core files directly, it will haunt you later) and override the _prepareColumns method with one that includes your column definition:

    $this->addColumn('coupon_code', array(
        'header' => Mage::helper('sales')->__('Coupon Code'),
        'index' => 'coupon_code',
    ));

If you're very fresh on Magento development, I'd venture to say that I've only begun to help you. But you'll have plenty of reference points from which to dig in and build the functionality you need. HTH! :)

Upvotes: 1

Related Questions