Tuesday 27 February 2018

How to create simple and custom order report in magento 1.9


Step 1 : Add Menu on adminhtml.xml file : app/code/local/Jaydip/Kansagra/etc/adminhtml.xml

<config>
    <menu>
        <report>
            <children>
                <jobber translate="title">
                    <title>Jobber</title>
                    <children>
                        <jaydip_kansagra_summary translate="title">
                            <title>Jobber Summary</title>
                            <action>adminhtml/kansagra_reports/summary</action>
                            <sort_order>10</sort_order>
                        </jaydip_kansagra_summary>
                    </children>
                </jobber>
            </children>
        </report>
    </menu>
    <acl>
        ....
        ....
        ....
    </acl>
</config>
Step 2 : Create Report Controller on your model controller file : app/code/local/Jaydip/Kansagra/controllers/Adminhtml/Kansagra/ReportsController.php

<?php
class Jaydip_Kansagra_Adminhtml_Kansagra_ReportsController extends Mage_Adminhtml_Controller_Action {
       
    /**
     * Initialize titles and navigation breadcrumbs
     * @return Jaydip_Reports_Adminhtml_ReportsController
     */
    protected function _initAction() {
        $this->_title($this->__('Reports'))->_title($this->__('Sales'))->_title($this->__('Summary'));
        $this->loadLayout()
                ->_setActiveMenu('report/sales')
                ->_addBreadcrumb(Mage::helper('jaydip_kansagra')->__('Reports'), Mage::helper('jaydip_kansagra')->__('Reports'))
                ->_addBreadcrumb(Mage::helper('jaydip_kansagra')->__('Jobber'), Mage::helper('jaydip_kansagra')->__('Jobber'));
        return $this;
    }
    /**
     * Prepare blocks with request data from our filter form
     * @return Jaydip_Reports_Adminhtml_ReportsController
     */
    protected function _initReportAction($blocks) {
        if (!is_array($blocks)) {
            $blocks = array($blocks);
        }
        $requestData = Mage::helper('adminhtml')->prepareFilterString($this->getRequest()->getParam('filter'));
        $requestData = $this->_filterDates($requestData, array('fromdate', 'todate'));
        $params = $this->_getDefaultFilterData();
        foreach ($requestData as $key => $value) {
            if (!empty($value)) {
                $params->setData($key, $value);
            }
        }
        foreach ($blocks as $block) {
            if ($block) {
                $block->setFilterData($params);
            }
        }
        return $this;
    }
    protected function _getDefaultFilterData() {
        return new Varien_Object(array(
            'fromdate' => '',
            'todate' => '',
            'salesperson' => 0,
        ));
    } 
   
    public function summaryAction() {
        $this->_initAction();
        $this->_title($this->__('Summary'));
        $gridBlock = $this->getLayout()->getBlock('adminhtml_reports_summary.grid');
        $filterFormBlock = $this->getLayout()->getBlock('grid.filter.form');
        $this->_initReportAction(array(
            $gridBlock,
            $filterFormBlock
        ));
        $this->renderLayout();
    }
   
    public function detailAction() {
        $this->_initAction();
        $this->_title($this->__('Detail'));
        $gridBlock = $this->getLayout()->getBlock('adminhtml_detail.grid');
        $filterFormBlock = $this->getLayout()->getBlock('grid.filter.form');
        $this->_initReportAction(array(
            $gridBlock,
            $filterFormBlock
        ));
        $this->renderLayout();
    }
}
Step 3 : Create admin layout xml file : app/design/adminhtml/default/default/layout/jaydip_kansagra.xml

<layout>
.....
.....
.....
<adminhtml_kansagra_reports_summary>
        <reference name="content">
            <block type="jaydip_kansagra/adminhtml_reports_summary" template="report/grid/container.phtml" name="jaydip_kansagra_reports_summary_grid_container">
                <block type="jaydip_kansagra/adminhtml_reports_filter_formsummary" name="grid.filter.form" />
            </block>
        </reference>
    </adminhtml_kansagra_reports_summary>
</layout> 
Step 4 : Create block file : app/code/local/Jaydip/Kansagra/Block/Adminhtml/Reports/Summary.php

class Jaydip_Kansagra_Block_Adminhtml_Reports_Summary extends Mage_Adminhtml_Block_Widget_Grid_Container {
    /**
     * This is your module alias
     */
    protected $_blockGroup = 'jaydip_kansagra';
    /**
     * This is the controller's name (this block)
     */
    protected $_controller = 'adminhtml_reports_summary';
    /*
      Note: the grid block's name would prepare from $_blockGroup and $_controller with the suffix '_grid'.
      So the complete block would called jaydip_kansagra/adminhtml_report_grid . As you already guessed it,
      this will resolve to the class Jaydip_Reports_Adminhtml_Report_Grid .
     */
    /**
     * Prepare grid container, add and remove additional buttons
     */
    public function __construct() {
        // The head title of the grid
        $this->_headerText = Mage::helper('jaydip_kansagra')->__('Summary');
        $this->setTemplate('report/grid/container.phtml');
        parent::__construct();
        $this->_removeButton('add');
        $this->addButton('filter_form_submit', array(
            'label' => Mage::helper('jaydip_kansagra')->__('Show Report'),
            'onclick' => 'filterFormSubmit()'
        ));
    }
    /**
     * This function will prepare our filter URL
     * @return string
     */
    public function getFilterUrl() {
        $this->getRequest()->setParam('filter', null);
        return $this->getUrl('*/*/summary', array('_current' => true));
    }
}
Step 5 : Create Grid file : app/code/local/Jaydip/Kansagra/Block/Adminhtml/Reports/Summary/Grid.php

<?php
class Jaydip_Kansagra_Block_Adminhtml_Reports_Summary_Grid extends Mage_Adminhtml_Block_Widget_Grid {
    /**
     * Basic setup of our grid
     */
    public function __construct() {
        parent::__construct();
        $this->setPagerVisibility(false);
        $this->setUseAjax(false);
        $this->setFilterVisibility(false);
        $this->setDefaultLimit(50);
        $this->setEmptyCellLabel(Mage::helper('jaydip_kansagra')->__('No records found.'));
        $this->setId('mxReportsGrid');
        // set our grid to obtain totals
        $this->setCountTotals(true);
    }
    /**
     * Return totals data
     * Count totals if it's not previously counted and set to retrieve
     * @return Varien_Object
     */
    public function getTotals() {
        $totals = new Varien_Object();
        $fields = array(
            'jobberprofit' => '',
            'jobberamount' => '',
            'invoiceamount' => '',
        );
        foreach ($this->getCollection() as $item) {
            foreach ($fields as $field => $value) {
                $fields[$field] += $item->getData($field);
            }
        }
        //First column in the grid
        $fields['sortorder'] = 'Totals';
        $totals->setData($fields);
        return $totals;
    }
    // prepare columns and collection   
    /**
     * Prepare our grid's columns to display
     * @return Jaydip_Kansagra_Block_Adminhtml_Report_Summary_Grid
     */
    protected function _prepareColumns() {
       
        $currencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
       
        $this->addColumn('created_at', array(
            'header' => Mage::helper('sales')->__('Date'),
            'index' => 'created_at',
            'type' => 'datetime',
            'width' => '120'
        ));
       
        $this->addColumn('company', array(
            'header' => Mage::helper('sales')->__('Company name'),
            'index' => 'company',
            'align' => 'right',
            'width' => '50'
        ));
        $this->addColumn('address', array(
            'header' => Mage::helper('sales')->__("Full Address"),
            'index' => 'street',
            'width' => '210'
        ));
        // add export types
        //$this->addExportType('*/*/exportCSV', Mage::helper('jaydip_kansagra')->__('CSV'));
        return parent::_prepareColumns();
    }
    /**
     * Prepare our collection which we'll display in the grid
     * First, get the resource collection we're dealing with, with our custom filters applied.
     * In case of an export, we're done, otherwise calculate the totals
     * @return Jaydip_Kansagra_Block_Adminhtml_Report_Summary_Grid
     */
    protected function _prepareCollection() {
       
        $data = $this->getFilterData();
       
        $datefrom = Mage::getModel('core/date')->gmtDate('Y-m-d',strtotime($data->fromdate));
        $dateto = Mage::getModel('core/date')->gmtDate('Y-m-d',strtotime($data->todate));
        $salesperson = $data->salesperson;
        $orders = Mage::getModel('sales/order')->getCollection()
                    ->addFieldToFilter('entity_id', array('eq' => 0));
        $this->setCollection($orders);
        //echo $this->showExtraCounts($collection);
        return parent::_prepareCollection();
    }
}
Step 6 : Create Filter Form file : app/code/local/Jaydip/Kansagra/Block/Adminhtml/Reports/Filter/Formsummary.php

<?php
class Jaydip_Kansagra_Block_Adminhtml_Reports_Filter_Formsummary extends Mage_Adminhtml_Block_Widget_Form {
    /**
     * This will contain our form element's visibility
     * @var array
     */
    protected $_fieldVisibility = array();
    /**
     * Field options
     * @var array
     */
    protected $_fieldOptions = array();
    /**
     * Sets a form element to be visible or not
     * @param string $fieldId
     * @param bool $visibility
     * @return Jaydip_Kansagra_Block_Adminhtml_Report_Filter_Form
     */
    public function setFieldVisibility($fieldId, $visibility) {
        $this->_fieldVisibility[$fieldId] = $visibility ? true : false;
        return $this;
    }
    /**
     * Returns the field is visible or not. If we hadn't set a value
     * for the field previously, it will return the value defined in the
     * defaultVisibility parameter (it's true by default)
     * @param string $fieldId
     * @param bool $defaultVisibility
     * @return bool
     */
    public function getFieldVisibility($fieldId, $defaultVisibility = true) {
        if (isset($this->_fieldVisibility[$fieldId])) {
            return $this->_fieldVisibility[$fieldId];
        }
        return $defaultVisibility;
    }
    /**
     * Set field option(s)
     * @param string $fieldId
     * @param string|array $option if option is an array, loop through it's keys and values
     * @param mixed $value if option is an array this option is meaningless
     * @return Jaydip_Kansagra_Block_Adminhtml_Report_Filter_Form
     */
    public function setFieldOption($fieldId, $option, $value = null) {
        if (is_array($option)) {
            $options = $option;
        } else {
            $options = array($option => $value);
        }
        if (!isset($this->_fieldOptions[$fieldId])) {
            $this->_fieldOptions[$fieldId] = array();
        }
        foreach ($options as $key => $value) {
            $this->_fieldOptions[$fieldId][$key] = $value;
        }
        return $this;
    }
    /**
     * Prepare our form elements
     * @return Jaydip_Kansagra_Block_Adminhtml_Report_Filter_Form
     */
    protected function _prepareForm() {
        // inicialise our form
        $actionUrl = $this->getCurrentUrl();
        $form = new Varien_Data_Form(array(
            'id' => 'filter_form',
            'action' => $actionUrl,
            'method' => 'get'
        ));
        // set ID prefix for all elements in our form
        $htmlIdPrefix = 'jaydip_kansagra_jobber_';
        $form->setHtmlIdPrefix($htmlIdPrefix);
        // create a fieldset to add elements to
        $fieldset = $form->addFieldset('base_fieldset', array('legend' => Mage::helper('jaydip_kansagra')->__('Filter')));
        // prepare our filter fields and add each to the fieldset
        // date filter
        $dateFormatIso = Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT);
       
        $fieldset->addField('fromdate', 'date', array(
            'name' => 'fromdate',
            'format' => $dateFormatIso,
            'image' => $this->getSkinUrl('images/grid-cal.gif'),
            'label' => Mage::helper('jaydip_kansagra')->__('From Date'),
            'title' => Mage::helper('jaydip_kansagra')->__('From Date'),
            'required' => true
        ));
       
        $fieldset->addField('todate', 'date', array(
            'name' => 'todate',
            'format' => $dateFormatIso,
            'image' => $this->getSkinUrl('images/grid-cal.gif'),
            'label' => Mage::helper('jaydip_kansagra')->__('To Date'),
            'title' => Mage::helper('jaydip_kansagra')->__('To Date'),
            'required' => true
        ));
       
        $fieldset->addField('salesperson', 'select', array(
            'name' => 'salesperson',
            'values' => Mage::getModel('admin/user')->getAdminUsersArrByRole('Sales Person'),
            'label' => Mage::helper('jaydip_kansagra')->__('Jobbers'),
            'required' => true,
        ));
        $form->setUseContainer(true);
        $this->setForm($form);
        return $this;
    }
    /**
     * Inicialise form values
     * Called after prepareForm, we apply the previously set values from filter on the form
     * @return Jaydip_Kansagra_Block_Adminhtml_Report_Filter_Form
     */
    protected function _initFormValues() {
        $filterData = $this->getFilterData();
        $this->getForm()->addValues($filterData->getData());
        return parent::_initFormValues();
    }
    /**
     * Apply field visibility and field options on our form fields before rendering
     * @return Jaydip_Kansagra_Block_Adminhtml_Report_Filter_Form
     */
    protected function _beforeHtml() {
        $result = parent::_beforeHtml();
        $elements = $this->getForm()->getElements();
        // iterate on our elements and select fieldsets
        foreach ($elements as $element) {
            $this->_applyFieldVisibiltyAndOptions($element);
        }
        return $result;
    }
    /**
     * Apply field visibility and options on fieldset element
     * Recursive
     * @param Varien_Data_Form_Element_Fieldset $element
     * @return Varien_Data_Form_Element_Fieldset
     */
    protected function _applyFieldVisibiltyAndOptions($element) {
        if ($element instanceof Varien_Data_Form_Element_Fieldset) {
            foreach ($element->getElements() as $fieldElement) {
                // apply recursively
                if ($fieldElement instanceof Varien_Data_Form_Element_Fieldset) {
                    $this->_applyFieldVisibiltyAndOptions($fieldElement);
                    continue;
                }
                $fieldId = $fieldElement->getId();
                // apply field visibility
                if (!$this->getFieldVisibility($fieldId)) {
                    $element->removeField($fieldId);
                    continue;
                }
                // apply field options
                if (isset($this->_fieldOptions[$fieldId])) {
                    $fieldOptions = $this->_fieldOptions[$fieldId];
                    foreach ($fieldOptions as $k => $v) {
                        $fieldElement->setDataUsingMethod($k, $v);
                    }
                }
            }
        }
        return $element;
    }
}

Thursday 22 February 2018

How to create custom attribute same as Group Price / Tier Price for product in magento admin panel / Backend

Create extension for this. We have add "jobber price (jobber_price)" in attribute.


Step 1.
Create module xml file : app/etc/modules/Jaydip_Kansagra.xml


<?xml version="1.0"?>
<config>
    <modules>
        <Jaydip_Kansagra>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Core />
             </depends>
        </Jaydip_Kansagra>
    </modules>
</config>

Step 2 :
Create config file : app/code/local/Jaydip/Kansagra/etc/config.xml


<?xml version="1.0"?>
<config>
    <modules>
        <Jaydip_Kansagra>
            <version>1.0.0</version>
        </Jaydip_Kansagra>
    </modules>
    <global>
        <resources>
            <jaydip_kansagra_setup>
                <setup>
                    <module>Jaydip_Kansagra</module>
                    <class>Jaydip_Kansagra_Model_Resource_Setup</class>
                </setup>
            </jaydip_kansagra_setup>
        </resources>
        <models>
            <jaydip_kansagra>
                <class>Jaydip_Kansagra_Model</class>
                <resourceModel>jaydip_kansagra_resource</resourceModel>
            </jaydip_kansagra>
            <jaydip_kansagra_resource>
                <class>Jaydip_Kansagra_Model_Resource</class>
                <entities>
                    <jobber_price>
                        <table>catalog_product_entity_jobber_price</table>
                    </jobber_price>
                </entities>
            </jaydip_kansagra_resource>
        </models>
    </global>
    <adminhtml>
        <events>
            <adminhtml_catalog_product_edit_prepare_form>
                <observers>
                    <jobberelement>
                        <class>Jaydip_Kansagra_Model_Observer</class>
                        <method>addJobberelement</method>
                    </jobberelement>
                </observers>
            </adminhtml_catalog_product_edit_prepare_form>
        </events>
    </adminhtml>
</config>  

Step 3 : Create block file : app/code/local/Jaydip/Kansagra/Block/Adminhtml/Catalog/Product/Edit/Tab/Price/Jobber.php

class Jaydip_Kansagra_Block_Adminhtml_Catalog_Product_Edit_Tab_Price_jobber
    extends Jaydip_Kansagra_Block_Adminhtml_Catalog_Product_Edit_Tab_Price_Jobber_Abstract
{
    /**
     * Initialize block
     */
    public function __construct()
    {
        $this->setTemplate('catalog/product/edit/price/jobber.phtml');
    }
    /**
     * Sort values
     *
     * @param array $data
     * @return array
     */
    protected function _sortValues($data)
    {
        usort($data, array($this, '_sortGroupPrices'));
        return $data;
    }
    /**
     * Sort jobber price values callback method
     *
     * @param array $a
     * @param array $b
     * @return int
     */
    protected function _sortGroupPrices($a, $b)
    {
        if ($a['website_id'] != $b['website_id']) {
            return $a['website_id'] < $b['website_id'] ? -1 : 1;
        }
        if ($a['cust_group'] != $b['cust_group']) {
            return $this->getCustomerGroups($a['cust_group']) < $this->getCustomerGroups($b['cust_group']) ? -1 : 1;
        }
        return 0;
    }
    /**
     * Prepare global layout
     *
     * Add "Add Jobber Price" button to layout
     *
     * @return Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Price_Group
     */
    protected function _prepareLayout()
    {
        $button = $this->getLayout()->createBlock('adminhtml/widget_button')
            ->setData(array(
                'label' => Mage::helper('catalog')->__('Add Jobber Price'),
                'onclick' => 'return jobberPriceControl.addItem()',
                'class' => 'add'
            ));
        $button->setName('add_jobber_price_item_button');
        $this->setChild('add_button', $button);
        return parent::_prepareLayout();
    }
}

Step 4 :
Create Abstract.php file in : app/code/local/Jaydip/Kansagra/Block/Adminhtml/Catalog/Product/Edit/Tab/Price/Jobber/Abstract.php

abstract class Jaydip_Kansagra_Block_Adminhtml_Catalog_Product_Edit_Tab_Price_Jobber_Abstract
    extends Mage_Adminhtml_Block_Widget
    implements Varien_Data_Form_Element_Renderer_Interface
{
    /**
     * Form element instance
     *
     * @var Varien_Data_Form_Element_Abstract
     */
    protected $_element;
    /**
     * Customer groups cache
     *
     * @var array
     */
    protected $_customerGroups;
    /**
     * Websites cache
     *
     * @var array
     */
    protected $_websites;
    /**
     * Retrieve current product instance
     *
     * @return Mage_Catalog_Model_Product
     */
    public function getProduct()
    {
        return Mage::registry('product');
    }
    /**
     * Render HTML
     *
     * @param Varien_Data_Form_Element_Abstract $element
     * @return string
     */
    public function render(Varien_Data_Form_Element_Abstract $element)
    {
        $this->setElement($element);
        return $this->toHtml();
    }
    /**
     * Set form element instance
     *
     * @param Varien_Data_Form_Element_Abstract $element
     * @return Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Price_Group_Abstract
     */
    public function setElement(Varien_Data_Form_Element_Abstract $element)
    {
        $this->_element = $element;
        return $this;
    }
    /**
     * Retrieve form element instance
     *
     * @return Varien_Data_Form_Element_Abstract
     */
    public function getElement()
    {
        return $this->_element;
    }
    /**
     * Prepare group price values
     *
     * @return array
     */
    public function getValues()
    {
        $values = array();
        $data = $this->getElement()->getValue();
        if (is_array($data)) {
            $values = $this->_sortValues($data);
        }
        foreach ($values as &$value) {
            $value['readonly'] = ($value['website_id'] == 0)
                && $this->isShowWebsiteColumn()
                && !$this->isAllowChangeWebsite();
        }
        return $values;
    }
    /**
     * Sort values
     *
     * @param array $data
     * @return array
     */
    protected function _sortValues($data)
    {
        return $data;
    }
    /**
     * Retrieve allowed customer groups
     *
     * @param int|null $groupId  return name by customer group id
     * @return array|string
     */
    public function getCustomerGroups($groupId = null)
    {
        if ($this->_customerGroups === null) {
            if (!Mage::helper('catalog')->isModuleEnabled('Mage_Customer')) {
                return array();
            }
            $collection = Mage::getModel('customer/group')->getCollection();
            $this->_customerGroups = $this->_getInitialCustomerGroups();
            foreach ($collection as $item) {
                /** @var $item Mage_Customer_Model_Group */
                $this->_customerGroups[$item->getId()] = $item->getCustomerGroupCode();
            }
        }
        if ($groupId !== null) {
            return isset($this->_customerGroups[$groupId]) ? $this->_customerGroups[$groupId] : array();
        }
        return $this->_customerGroups;
    }
    /**
     * Retrieve list of initial customer groups
     *
     * @return array
     */
    protected function _getInitialCustomerGroups()
    {
        return array();
    }
    /**
     * Retrieve number of websites
     *
     * @return int
     */
    public function getWebsiteCount()
    {
        return count($this->getWebsites());
    }
    /**
     * Show website column and switcher for group price table
     *
     * @return bool
     */
    public function isMultiWebsites()
    {
        return !Mage::app()->isSingleStoreMode();
    }
    /**
     * Retrieve allowed for edit websites
     *
     * @return array
     */
    public function getWebsites()
    {
        if (!is_null($this->_websites)) {
            return $this->_websites;
        }
        $this->_websites = array(
            0 => array(
                'name' => Mage::helper('catalog')->__('All Websites'),
                'currency' => Mage::app()->getBaseCurrencyCode()
            )
        );
        if (!$this->isScopeGlobal() && $this->getProduct()->getStoreId()) {
            /** @var $website Mage_Core_Model_Website */
            $website = Mage::app()->getStore($this->getProduct()->getStoreId())->getWebsite();
            $this->_websites[$website->getId()] = array(
                'name' => $website->getName(),
                'currency' => $website->getBaseCurrencyCode()
            );
        } elseif (!$this->isScopeGlobal()) {
            $websites = Mage::app()->getWebsites(false);
            $productWebsiteIds  = $this->getProduct()->getWebsiteIds();
            foreach ($websites as $website) {
                /** @var $website Mage_Core_Model_Website */
                if (!in_array($website->getId(), $productWebsiteIds)) {
                    continue;
                }
                $this->_websites[$website->getId()] = array(
                    'name' => $website->getName(),
                    'currency' => $website->getBaseCurrencyCode()
                );
            }
        }
        return $this->_websites;
    }
    /**
     * Retrieve default value for customer group
     *
     * @return int
     */
    public function getDefaultCustomerGroup()
    {
        return Mage_Customer_Model_Group::CUST_GROUP_ALL;
    }
    /**
     * Retrieve default value for website
     *
     * @return int
     */
    public function getDefaultWebsite()
    {
        if ($this->isShowWebsiteColumn() && !$this->isAllowChangeWebsite()) {
            return Mage::app()->getStore($this->getProduct()->getStoreId())->getWebsiteId();
        }
        return 0;
    }
    /**
     * Retrieve 'add group price item' button HTML
     *
     * @return string
     */
    public function getAddButtonHtml()
    {
        return $this->getChildHtml('add_button');
    }
    /**
     * Retrieve customized price column header
     *
     * @param string $default
     * @return string
     */
    public function getPriceColumnHeader($default)
    {
        if ($this->hasData('price_column_header')) {
            return $this->getData('price_column_header');
        } else {
            return $default;
        }
    }
    /**
     * Retrieve customized price column header
     *
     * @param string $default
     * @return string
     */
    public function getPriceValidation($default)
    {
        if ($this->hasData('price_validation')) {
            return $this->getData('price_validation');
        } else {
            return $default;
        }
    }
    /**
     * Retrieve Group Price entity attribute
     *
     * @return Mage_Catalog_Model_Resource_Eav_Attribute
     */
    public function getAttribute()
    {
        return $this->getElement()->getEntityAttribute();
    }
    /**
     * Check group price attribute scope is global
     *
     * @return bool
     */
    public function isScopeGlobal()
    {
        return $this->getAttribute()->isScopeGlobal();
    }
    /**
     * Show group prices grid website column
     *
     * @return bool
     */
    public function isShowWebsiteColumn()
    {
        if ($this->isScopeGlobal() || Mage::app()->isSingleStoreMode()) {
            return false;
        }
        return true;
    }
    /**
     * Check is allow change website value for combination
     *
     * @return bool
     */
    public function isAllowChangeWebsite()
    {
        if (!$this->isShowWebsiteColumn() || $this->getProduct()->getStoreId()) {
            return false;
        }
        return true;
    }

Step 5 :
Create Model file : app/code/local/Jaydip/Kansagra/Model/Jobberprice.php


class Jaydip_Kansagra_Model_Jobberprice
    extends Jaydip_Kansagra_Model_Jobberprice_Abstract
{
    /**
     * Retrieve resource instance
     *
     * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Attribute_Backend_Tierprice
     */
    protected function _getResource()
    {
        return Mage::getResourceSingleton('jaydip_kansagra/jobberprice');
    }
    /**
     * Error message when duplicates
     *
     * @return string
     */
    protected function _getDuplicateErrorMessage()
    {
        return Mage::helper('catalog')->__('Duplicate website group price customer group.');
    }
}


Step 6 :
Create model Abstract : app/code/local/Jaydip/Kansagra/Model/Jobberprice/Abstract.php 


abstract class Jaydip_Kansagra_Model_Jobberprice_Abstract
    extends Mage_Catalog_Model_Product_Attribute_Backend_Price
{
    /**
     * Website currency codes and rates
     *
     * @var array
     */
    protected $_rates;
    /**
     * Error message when duplicates
     *
     * @abstract
     * @return string
     */
    abstract protected function _getDuplicateErrorMessage();
    /**
     * Retrieve websites currency rates and base currency codes
     *
     * @return array
     */
    protected function _getWebsiteCurrencyRates()
    {
        if (is_null($this->_rates)) {
            $this->_rates = array();
            $baseCurrency = Mage::app()->getBaseCurrencyCode();
            foreach (Mage::app()->getWebsites() as $website) {
                /* @var $website Mage_Core_Model_Website */
                if ($website->getBaseCurrencyCode() != $baseCurrency) {
                    $rate = Mage::getModel('directory/currency')
                        ->load($baseCurrency)
                        ->getRate($website->getBaseCurrencyCode());
                    if (!$rate) {
                        $rate = 1;
                    }
                    $this->_rates[$website->getId()] = array(
                        'code' => $website->getBaseCurrencyCode(),
                        'rate' => $rate
                    );
                } else {
                    $this->_rates[$website->getId()] = array(
                        'code' => $baseCurrency,
                        'rate' => 1
                    );
                }
            }
        }
        return $this->_rates;
    }
    /**
     * Get additional unique fields
     *
     * @param array $objectArray
     * @return array
     */
    protected function _getAdditionalUniqueFields($objectArray)
    {
        return array();
    }
    /**
     * Whether group price value fixed or percent of original price
     *
     * @param Mage_Catalog_Model_Product_Type_Price $priceObject
     * @return bool
     */
    protected function _isPriceFixed($priceObject)
    {
        return $priceObject->isGroupPriceFixed();
    }
    /**
     * Validate group price data
     *
     * @param Mage_Catalog_Model_Product $object
     * @throws Mage_Core_Exception
     * @return bool
     */
    public function validate($object)
    {
        $attribute = $this->getAttribute();
        $priceRows = $object->getData($attribute->getName());
        if (empty($priceRows)) {
            return true;
        }
        // validate per website
        $duplicates = array();
        foreach ($priceRows as $priceRow) {
            if (!empty($priceRow['delete'])) {
                continue;
            }
            $compare = join('-', array_merge(
                array($priceRow['website_id'], $priceRow['cust_group']),
                $this->_getAdditionalUniqueFields($priceRow)
            ));
            if (isset($duplicates[$compare])) {
                Mage::throwException($this->_getDuplicateErrorMessage());
            }
            $duplicates[$compare] = true;
        }
        // if attribute scope is website and edit in store view scope
        // add global group prices for duplicates find
        if (!$attribute->isScopeGlobal() && $object->getStoreId()) {
            $origGroupPrices = $object->getOrigData($attribute->getName());
            foreach ($origGroupPrices as $price) {
                if ($price['website_id'] == 0) {
                    $compare = join('-', array_merge(
                        array($price['website_id'], $price['cust_group']),
                        $this->_getAdditionalUniqueFields($price)
                    ));
                    $duplicates[$compare] = true;
                }
            }
        }
        // validate currency
        $baseCurrency = Mage::app()->getBaseCurrencyCode();
        $rates = $this->_getWebsiteCurrencyRates();
        foreach ($priceRows as $priceRow) {
            if (!empty($priceRow['delete'])) {
                continue;
            }
            if ($priceRow['website_id'] == 0) {
                continue;
            }
            $globalCompare = join('-', array_merge(
                array(0, $priceRow['cust_group']),
                $this->_getAdditionalUniqueFields($priceRow)
            ));
            $websiteCurrency = $rates[$priceRow['website_id']]['code'];
            if ($baseCurrency == $websiteCurrency && isset($duplicates[$globalCompare])) {
                Mage::throwException($this->_getDuplicateErrorMessage());
            }
        }
        return true;
    }
    /**
     * Prepare group prices data for website
     *
     * @param array $priceData
     * @param string $productTypeId
     * @param int $websiteId
     * @return array
     */
    public function preparePriceData(array $priceData, $productTypeId, $websiteId)
    {
        $rates  = $this->_getWebsiteCurrencyRates();
        $data   = array();
        $price  = Mage::getSingleton('catalog/product_type')->priceFactory($productTypeId);
        foreach ($priceData as $v) {
            $key = join('-', array_merge(array($v['cust_group']), $this->_getAdditionalUniqueFields($v)));
            if ($v['website_id'] == $websiteId) {
                $data[$key] = $v;
                $data[$key]['website_price'] = $v['price'];
            } else if ($v['website_id'] == 0 && !isset($data[$key])) {
                $data[$key] = $v;
                $data[$key]['website_id'] = $websiteId;
                if ($this->_isPriceFixed($price)) {
                    $data[$key]['price'] = $v['price'] * $rates[$websiteId]['rate'];
                    $data[$key]['website_price'] = $v['price'] * $rates[$websiteId]['rate'];
                }
            }
        }
        return $data;
    }
    /**
     * Assign group prices to product data
     *
     * @param Mage_Catalog_Model_Product $object
     * @return Mage_Catalog_Model_Product_Attribute_Backend_Groupprice_Abstract
     */
    public function afterLoad($object)
    {
        $storeId   = $object->getStoreId();
        $websiteId = null;
        if ($this->getAttribute()->isScopeGlobal()) {
            $websiteId = 0;
        } else if ($storeId) {
            $websiteId = Mage::app()->getStore($storeId)->getWebsiteId();
        }
        $data = $this->_getResource()->loadPriceData($object->getId(), $websiteId);
        foreach ($data as $k => $v) {
            $data[$k]['website_price'] = $v['price'];
            if ($v['all_groups']) {
                $data[$k]['cust_group'] = Mage_Customer_Model_Group::CUST_GROUP_ALL;
            }
        }
        if (!$object->getData('_edit_mode') && $websiteId) {
            $data = $this->preparePriceData($data, $object->getTypeId(), $websiteId);
        }
        $object->setData($this->getAttribute()->getName(), $data);
        $object->setOrigData($this->getAttribute()->getName(), $data);
        $valueChangedKey = $this->getAttribute()->getName() . '_changed';
        $object->setOrigData($valueChangedKey, 0);
        $object->setData($valueChangedKey, 0);
//pre($object->getData());exit;
        return $this;
    }
    /**
     * After Save Attribute manipulation
     *
     * @param Mage_Catalog_Model_Product $object
     * @return Mage_Catalog_Model_Product_Attribute_Backend_Groupprice_Abstract
     */
    public function afterSave($object)
    {
        $websiteId  = Mage::app()->getStore($object->getStoreId())->getWebsiteId();
        $isGlobal   = $this->getAttribute()->isScopeGlobal() || $websiteId == 0;
        $priceRows = $object->getData($this->getAttribute()->getName());
     
        if (empty($priceRows)) {
            if ($isGlobal) {
                $this->_getResource()->deletePriceData($object->getId());
            } else {
                $this->_getResource()->deletePriceData($object->getId(), $websiteId);
            }
            return $this;
        }
        $old = array();
        $new = array();
        // prepare original data for compare
        $origGroupPrices = $object->getOrigData($this->getAttribute()->getName());
        if (!is_array($origGroupPrices)) {
            $origGroupPrices = array();
        }
        foreach ($origGroupPrices as $data) {
            if ($data['website_id'] > 0 || ($data['website_id'] == '0' && $isGlobal)) {
                $key = join('-', array_merge(
                    array($data['website_id'], $data['cust_group']),
                    $this->_getAdditionalUniqueFields($data)
                ));
                $old[$key] = $data;
            }
        }
        // prepare data for save
        foreach ($priceRows as $data) {
            $hasEmptyData = false;
            foreach ($this->_getAdditionalUniqueFields($data) as $field) {
                if (empty($field)) {
                    $hasEmptyData = true;
                    break;
                }
            }
            if ($hasEmptyData || !isset($data['cust_group']) || !empty($data['delete'])) {
                continue;
            }
            if ($this->getAttribute()->isScopeGlobal() && $data['website_id'] > 0) {
                continue;
            }
            if (!$isGlobal && (int)$data['website_id'] == 0) {
                continue;
            }
            $key = join('-', array_merge(
                array($data['website_id'], $data['cust_group']),
                $this->_getAdditionalUniqueFields($data)
            ));
            $useForAllGroups = $data['cust_group'] == Mage_Customer_Model_Group::CUST_GROUP_ALL;
            $customerGroupId = !$useForAllGroups ? $data['cust_group'] : 0;
            $new[$key] = array_merge(array(
                'website_id'        => $data['website_id'],
                'all_groups'        => $useForAllGroups ? 1 : 0,
                'customer_group_id' => $customerGroupId,
                'value'             => $data['price'],
            ), $this->_getAdditionalUniqueFields($data));
        }
        $delete = array_diff_key($old, $new);
        $insert = array_diff_key($new, $old);
        $update = array_intersect_key($new, $old);
        $isChanged  = false;
        $productId  = $object->getId();
        if (!empty($delete)) {
            foreach ($delete as $data) {
                $this->_getResource()->deletePriceData($productId, null, $data['price_id']);
                $isChanged = true;
            }
        }
        if (!empty($insert)) {
            foreach ($insert as $data) {
                $price = new Varien_Object($data);
                $price->setEntityId($productId);
                $this->_getResource()->savePriceData($price);
                $isChanged = true;
            }
        }
        if (!empty($update)) {
            foreach ($update as $k => $v) {
                if ($old[$k]['price'] != $v['value']) {
                    $price = new Varien_Object(array(
                        'value_id'  => $old[$k]['price_id'],
                        'value'     => $v['value']
                    ));
                    $this->_getResource()->savePriceData($price);
                    $isChanged = true;
                }
            }
        }
        if ($isChanged) {
            $valueChangedKey = $this->getAttribute()->getName() . '_changed';
            $object->setData($valueChangedKey, 1);
        }
        return $this;
    }
}


Step 7 :
Create Resource file : app/code/local/Jaydip/Kansagra/Model/Resource/Jobberprice.php


class Jaydip_Kansagra_Model_Resource_Jobberprice
    extends Jaydip_Kansagra_Model_Resource_Jobberprice_Abstract
{
    /**
     * Initialize connection and define main table
     *
     */
    protected function _construct()
    {
        $this->_init('jaydip_kansagra/jobber_price', 'value_id');
    }
}


Step 8 :
Create Resource Abstract file : /app/code/local/Jaydip/Kansagra/Model/Resource/Jobberprice/Abstract.php


abstract class Jaydip_Kansagra_Model_Resource_Jobberprice_Abstract
    extends Mage_Core_Model_Resource_Db_Abstract
{
    /**
     * Load Tier Prices for product
     *
     * @param int $productId
     * @param int $websiteId
     * @return Mage_Catalog_Model_Resource_Product_Attribute_Backend_Tierprice
     */
    public function loadPriceData($productId, $websiteId = null)
    {
        $adapter = $this->_getReadAdapter();
        $columns = array(
            'price_id'      => $this->getIdFieldName(),
            'website_id'    => 'website_id',
            'all_groups'    => 'all_groups',
            'cust_group'    => 'customer_group_id',
            'price'         => 'value',
        );
        $columns = $this->_loadPriceDataColumns($columns);
        $select  = $adapter->select()
            ->from($this->getMainTable(), $columns)
            ->where('entity_id=?', $productId);
        $this->_loadPriceDataSelect($select);
        if (!is_null($websiteId)) {
            if ($websiteId == '0') {
                $select->where('website_id = ?', $websiteId);
            } else {
                $select->where('website_id IN(?)', array(0, $websiteId));
            }
        }
        return $adapter->fetchAll($select);
    }
    /**
     * Load specific sql columns
     *
     * @param array $columns
     * @return array
     */
    protected function _loadPriceDataColumns($columns)
    {
        return $columns;
    }
    /**
     * Load specific db-select data
     *
     * @param Varien_Db_Select $select
     * @return Varien_Db_Select
     */
    protected function _loadPriceDataSelect($select)
    {
        return $select;
    }
    /**
     * Delete Tier Prices for product
     *
     * @param int $productId
     * @param int $websiteId
     * @param int $priceId
     * @return int The number of affected rows
     */
    public function deletePriceData($productId, $websiteId = null, $priceId = null)
    {
        $adapter = $this->_getWriteAdapter();
        $conds   = array(
            $adapter->quoteInto('entity_id = ?', $productId)
        );
        if (!is_null($websiteId)) {
            $conds[] = $adapter->quoteInto('website_id = ?', $websiteId);
        }
        if (!is_null($priceId)) {
            $conds[] = $adapter->quoteInto($this->getIdFieldName() . ' = ?', $priceId);
        }
        $where = implode(' AND ', $conds);
        return $adapter->delete($this->getMainTable(), $where);
    }
    /**
     * Save tier price object
     *
     * @param Varien_Object $priceObject
     * @return Mage_Catalog_Model_Resource_Product_Attribute_Backend_Tierprice
     */
    public function savePriceData(Varien_Object $priceObject)
    {
        $adapter = $this->_getWriteAdapter();
        $data    = $this->_prepareDataForTable($priceObject, $this->getMainTable());
        if (!empty($data[$this->getIdFieldName()])) {
            $where = $adapter->quoteInto($this->getIdFieldName() . ' = ?', $data[$this->getIdFieldName()]);
            unset($data[$this->getIdFieldName()]);
            $adapter->update($this->getMainTable(), $data, $where);
        } else {
            $adapter->insert($this->getMainTable(), $data);
        }
        return $this;
    }
}


Step 9:
Create Observer file : app/code/local/Jaydip/Kansagra/Model/Observer.php


class Jaydip_Kansagra_Model_Observer extends Mage_Core_Model_Abstract
{
 
    /**
     * get default values
     *
     * @access public
     * @return block
     */
    public function addJobberelement($observer)
    {
        $form = $observer->getEvent()->getForm();
        $jobberPrice = $form->getElement('jobber_price');
        if ($jobberPrice) {
            $jobberPrice->setRenderer(
                Mage::app()->getLayout()->createBlock('jaydip_kansagra/adminhtml_catalog_product_edit_tab_price_jobber')
            );
        }
    }
}


Step 10:
Create phtml file : app/design/adminhtml/default/admintheme/template/catalog/product/edit/price/jobber.phtml


<?php
$_htmlId = $this->getElement()->getHtmlId();
$_htmlClass = $this->getElement()->getClass();
$_htmlName = $this->getElement()->getName();
$_readonly = $this->getElement()->getReadonly();
$_priceValueValidation = $this->getPriceValidation('validate-zero-or-greater');
$_showWebsite= $this->isMultiWebsites();
?>
<tr>
    <td class="label"><?php echo $this->getElement()->getLabel(); ?></td>
    <td colspan="10" class="grid tier">
        <table cellspacing="0" class="data border" id="jobber_prices_table">
            <?php if ($_showWebsite) : ?>
            <col width="135" />
            <?php endif; ?>
            <col width="120" />
            <col />
            <col width="1" />
            <thead>
            <tr class="headings">
                <th <?php if (!$_showWebsite): ?>style="display: none;"<?php endif; ?>><?php echo Mage::helper('catalog')->__('Website'); ?></th>
                <th><?php echo Mage::helper('catalog')->__('Customer Group'); ?></th>
                <th><?php echo $this->getPriceColumnHeader(Mage::helper('catalog')->__('Price')); ?></th>
                <th class="last"><?php echo Mage::helper('catalog')->__('Action'); ?></th>
            </tr>
            </thead>
            <tbody id="<?php echo $_htmlId; ?>_container"></tbody>
            <tfoot>
            <tr>
                <td <?php if (!$_showWebsite): ?>style="display: none;"<?php endif; ?>></td>
                <td colspan="4" class="a-right"><?php echo $this->getAddButtonHtml(); ?></td>
            </tr>
            </tfoot>
        </table>
        <script type="text/javascript">
            //<![CDATA[
            var jobberPriceRowTemplate = '<tr>'
                + '<td<?php if (!$_showWebsite): ?> style="display:none"<?php endif; ?>>'
                + '<select class="<?php echo $_htmlClass; ?> required-entry" name="<?php echo $_htmlName; ?>[{{index}}][website_id]" id="jobber_price_row_{{index}}_website">'
            <?php foreach ($this->getWebsites() as $_websiteId => $_info) : ?>
                + '<option value="<?php echo $_websiteId; ?>"><?php echo $this->jsQuoteEscape($this->escapeHtml($_info['name'])); ?><?php if (!empty($_info['currency'])) : ?> [<?php echo $this->escapeHtml($_info['currency']); ?>]<?php endif; ?></option>'
                <?php endforeach; ?>
                + '</select></td>'
                + '<td><select class="<?php echo $_htmlClass; ?> custgroup required-entry" name="<?php echo $_htmlName; ?>[{{index}}][cust_group]" id="jobber_price_row_{{index}}_cust_group">'
            <?php foreach ($this->getCustomerGroups() as $_groupId => $_groupName): ?>
                + '<option value="<?php echo $_groupId; ?>"><?php echo $this->jsQuoteEscape($this->escapeHtml($_groupName)); ?></option>'
                <?php endforeach; ?>
                + '</select></td>'
                + '<td><input class="<?php echo $_htmlClass; ?> required-entry <?php echo $_priceValueValidation; ?>" type="text" name="<?php echo $_htmlName; ?>[{{index}}][price]" value="{{price}}" id="jobber_price_row_{{index}}_price" /></td>'
                + '<td class="last"><input type="hidden" name="<?php echo $_htmlName; ?>[{{index}}][delete]" class="delete" value="" id="jobber_price_row_{{index}}_delete" />'
                + '<button title="<?php echo Mage::helper('catalog')->__('Delete Group Price'); ?>" type="button" class="scalable delete icon-btn delete-product-option" id="jobber_price_row_{{index}}_delete_button" onclick="return jobberPriceControl.deleteItem(event);">'
                + '<span><span><span><?php echo Mage::helper('catalog')->__('Delete'); ?></span></span></span></button></td>'
                + '</tr>';
            var jobberPriceControl = {
                template: new Template(jobberPriceRowTemplate, new RegExp('(^|.|\\r|\\n)({{\\s*(\\w+)\\s*}})', '')),
                itemsCount: 0,
                addItem : function () {
                <?php if ($_readonly): ?>
                    if (arguments.length < 3) {
                        return;
                    }
                    <?php endif; ?>
                    var data = {
                        website_id: '<?php echo $this->getDefaultWebsite(); ?>',
                        group: '<?php echo $this->getDefaultCustomerGroup(); ?>',
                        price: '',
                        readOnly: false,
                        index: this.itemsCount++
                    };
                    if(arguments.length >= 3) {
                        data.website_id = arguments[0];
                        data.group = arguments[1];
                        data.price = arguments[2];
                    }
                    if (arguments.length == 4) {
                        data.readOnly = arguments[3];
                    }
                    Element.insert($('<?php echo $_htmlId; ?>_container'), {
                        bottom : this.template.evaluate(data)
                    });
                    $('jobber_price_row_' + data.index + '_cust_group').value = data.group;
                    $('jobber_price_row_' + data.index + '_website').value    = data.website_id;
                <?php if ($this->isShowWebsiteColumn() && !$this->isAllowChangeWebsite()): ?>
                    var websiteElement = $('jobber_price_row_' + data.index + '_website');
                    var websiteCaption = websiteElement.options[websiteElement.selectedIndex].text;
                    websiteElement.insert({after:'<span class="website-name">' + websiteCaption + '</span>'});
                    websiteElement.hide();
                    <?php endif;?>
                    if (data.readOnly == '1') {
                        ['website', 'cust_group', 'price', 'delete'].each(function(element_suffix) {
                            $('jobber_price_row_' + data.index + '_' + element_suffix).disabled = true;
                        });
                        $('jobber_price_row_' + data.index + '_delete_button').hide();
                    }
                <?php if ($_readonly): ?>
                    $('<?php echo $_htmlId; ?>_container').select('input', 'select').each(this.disableElement);
                    $('<?php echo $_htmlId; ?>_container').up('table').select('button').each(this.disableElement);
                    <?php else: ?>
                    $('<?php echo $_htmlId; ?>_container').select('input', 'select').each(function(element) {
                        Event.observe(element, 'change', element.setHasChanges.bind(element));
                    });
                    <?php endif; ?>
                },
                disableElement: function(element) {
                    element.disabled = true;
                    element.addClassName('disabled');
                },
                deleteItem: function(event) {
                    var tr = Event.findElement(event, 'tr');
                    if (tr) {
                        Element.select(tr, '.delete').each(function(element) {
                            element.value='1';
                        });
                        Element.select(tr, ['input', 'select']).each(function(element) {
                            element.hide();
                        });
                        Element.hide(tr);
                        Element.addClassName(tr, 'no-display template');
                    }
                    return false;
                }
            };
            <?php foreach ($this->getValues() as $_item) : ?>
            jobberPriceControl.addItem('<?php echo $_item['website_id']; ?>', '<?php echo $_item['cust_group']; ?>', '<?php echo sprintf('%.2f', $_item['price']); ?>', <?php echo (int)!empty($_item['readonly']); ?>);
                <?php endforeach; ?>
            <?php if ($_readonly) : ?>
            $('<?php echo $_htmlId; ?>_container').up('table').select('button')
                .each(jobberPriceControl.disableElement);
                <?php endif; ?>
            //]]>
        </script>
    </td></tr>

Step 11:
Create SQL file : app/code/local/Jaydip/Kansagra/sql/jaydip_kansagra_setup/install-1.0.0.php


$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'jobber_price', array(
    'type'                       => 'decimal',
    'label'                      => 'Jobber Price',
    'input'                      => 'text',
    'backend'                    => 'jaydip_kansagra/jobberprice',
    'required'                   => false,
    'sort_order'                 => 6,
    'global'                     => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
    'apply_to'                   => 'simple,configurable,virtual',
    'group'                      => 'Prices',
));
$table = $installer->getConnection()
    ->newTable($installer->getTable('jaydip_kansagra/jobber_price'))
    ->addColumn('value_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
        'identity'  => true,
        'nullable'  => false,
        'primary'   => true,
        ), 'Value ID')
    ->addColumn('entity_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
        'unsigned'  => true,
        'nullable'  => false,
        'default'   => '0',
        ), 'Entity ID')
    ->addColumn('all_groups', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
        'unsigned'  => true,
        'nullable'  => false,
        'default'   => '1',
        ), 'Is Applicable To All Customer Groups')
    ->addColumn('customer_group_id', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
        'unsigned'  => true,
        'nullable'  => false,
        'default'   => '0',
        ), 'Customer Group ID')
    ->addColumn('value', Varien_Db_Ddl_Table::TYPE_DECIMAL, '12,4', array(
        'nullable'  => false,
        'default'   => '0.0000',
        ), 'Value')
    ->addColumn('website_id', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
        'unsigned'  => true,
        'nullable'  => false,
        ), 'Website ID')
    ->addIndex(
        $installer->getIdxName(
            'jaydip_kansagra/jobber_price',
            array('entity_id', 'all_groups', 'customer_group_id', 'website_id'),
            Varien_Db_Adapter_Interface::INDEX_TYPE_UNIQUE
        ),
        array('entity_id', 'all_groups', 'customer_group_id', 'website_id'),
        array('type' => Varien_Db_Adapter_Interface::INDEX_TYPE_UNIQUE))
    ->addIndex($installer->getIdxName('jaydip_kansagra/jobber_price', array('entity_id')),
        array('entity_id'))
    ->addIndex($installer->getIdxName('jaydip_kansagra/jobber_price', array('customer_group_id')),
        array('customer_group_id'))
    ->addIndex($installer->getIdxName('jaydip_kansagra/jobber_price', array('website_id')),
        array('website_id'))
    ->addForeignKey(
        $installer->getFkName(
            'jaydip_kansagra/jobber_price',
            'customer_group_id',
            'customer/customer_group',
            'customer_group_id'
        ),
        'customer_group_id', $installer->getTable('customer/customer_group'), 'customer_group_id',
         Varien_Db_Ddl_Table::ACTION_CASCADE, Varien_Db_Ddl_Table::ACTION_CASCADE)
    ->addForeignKey(
        $installer->getFkName(
            'jaydip_kansagra/jobber_price',
            'entity_id',
            'catalog/product',
            'entity_id'
        ),
        'entity_id', $installer->getTable('catalog/product'), 'entity_id',
        Varien_Db_Ddl_Table::ACTION_CASCADE, Varien_Db_Ddl_Table::ACTION_CASCADE)
    ->addForeignKey(
        $installer->getFkName(
            'jaydip_kansagra/jobber_price',
            'website_id',
            'core/website',
            'website_id'
        ),
        'website_id', $installer->getTable('core/website'), 'website_id',
        Varien_Db_Ddl_Table::ACTION_CASCADE, Varien_Db_Ddl_Table::ACTION_CASCADE)
    ->setComment('Catalog Product Jobber Price Attribute Backend Table');
$installer->getConnection()->createTable($table);
$installer->endSetup();