0

I created a custom module that allow to Pre-Order product

Here is my install script

<?php

                $this->startSetup();
                $this->addAttribute('catalog_product', 'pre_order', array(
                    'group' => 'General',
                    'type' => 'int', // can be int, varchar, decimal, text, datetime
                    'backend' => '', // If you're making an image attribute you'll need to add : catalog/category_attribute_backend_image
                    'frontend_input' => '',
                    'frontend' => '',
                    'label' => 'Is Pre Order',
                    'input' => 'boolean', //text, textarea, select, file, image, multiselect
                    'class' => '',
                    'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, // Scope can be SCOPE_STORE, SCOPE_GLOBAL or SCOPE_WEBSITE
                    'visible' => true,
                    'frontend_class' => '',
                    'required' => false, // or true
                    'user_defined' => true, // or false
                    'used_in_product_listing' => '1',
                    'default' => '',
                    'apply_to' => 'simple,configurable,virtual,bundle,downloadable',
                ));
                $this->addAttribute('catalog_product', 'pre_order_note', array(
                    'group' => 'General',
                    'type' => 'varchar', // can be int, varchar, decimal, text, datetime
                    'backend' => '', // If you're making an image attribute you'll need to add : catalog/category_attribute_backend_image
                    'frontend_input' => '',
                    'frontend' => '',
                    'label' => 'Pre Order Note',
                    'input' => 'text', //text, textarea, select, file, image, multiselect
                    'class' => '',
                    'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, // Scope can be SCOPE_STORE, SCOPE_GLOBAL or SCOPE_WEBSITE
                    'visible' => true,
                    'frontend_class' => '',
                    'required' => false, // or true
                    'user_defined' => true, // or false
                    'used_in_product_listing' => '1',
                    'default' => '',
                    'apply_to' => 'simple,configurable,virtual,bundle,downloadable',
                ));
                $this->endSetup();

                $installer = new Mage_Sales_Model_Resource_Setup('core_setup');
                /**
                * Add 'custom_attribute' attribute for entities
                */
                $entities = array(
                    'quote',
                    'quote_item',
                    'order',
                    'order_item'
                );
                $entitiesnew = array(
                    'quote_item',
                    'order_item'
                );
                $options = array(
                    'type'     => Varien_Db_Ddl_Table::TYPE_BOOLEAN,
                    'visible'  => true,
                    'required' => false,
                    'default' => 0
                );
                $options2 = array(
                    'type'     => Varien_Db_Ddl_Table::TYPE_VARCHAR,
                    'visible'  => true,
                    'required' => false
                );
                foreach ($entities as $entity) {
                    $installer->addAttribute($entity, 'pre_order', $options);   
                }
                foreach ($entitiesnew as $entitynew) {
                    $installer->addAttribute($entitynew, 'pre_order_note', $options2);
                }
                $installer->endSetup();
                ?>

But the problem is when whenever I try to access sales->orders in admin panel I come up with error that

Column not found: 1054 Unknown column 'salesorder.pre_order' in 'field list', query was: SELECT main_table.*, salesorder.pre_order FROM mgpm_sales_flat_order_grid AS main_table LEFT JOIN mgpm_sales_flat_order AS salesorder ON salesorder.entity_id=mgpm_main_table.entity_id ORDER BY main_table.created_at DESC LIMIT

Here is my AdminHtml Sales Order Grid block

<?php

class Vishwasnature_Preorder_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Widget_Grid {

public function __construct()
{
    parent::__construct();
    $this->setId('sales_order_grid');
    $this->setUseAjax(true);
    $this->setDefaultSort('created_at');
    $this->setDefaultDir('DESC');
    $this->setSaveParametersInSession(true);
}

/**
 * Retrieve collection class
 *
 * @return string
 */
protected function _getCollectionClass()
{ 
    return 'sales/order_grid_collection';
}

protected function _prepareCollection()
{
 $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $collection->getSelect()->joinleft(array('salesorder'=> $tablePrefix . 'sales_flat_order'),'salesorder.entity_id =' .$tablePrefix . 'main_table.entity_id',array('pre_order' => 'salesorder.pre_order'));
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

protected function _prepareColumns()
{


    $this->addColumn('pre_order', array(
        'header' => Mage::helper('sales')->__('Order Type'),
        'index' => 'pre_order',
        'filter_index' => 'salesorder.pre_order',
        'type'  => 'options',
        'width' => '70px',
        'options' => Mage::getSingleton('preorder/observer')->getOrderTypes(),
    ));

    $this->addColumn('status', array(
        'header' => Mage::helper('sales')->__('Status'),
        'index' => 'status',
        'type'  => 'options',
        'width' => '70px',
        'filter_index' => 'main_table.status',
        'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
    ));

    if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
        $this->addColumn('action',
            array(
                'header'    => Mage::helper('sales')->__('Action'),
                'width'     => '50px',
                'type'      => 'action',
                'getter'     => 'getId',
                'actions'   => array(
                    array(
                        'caption' => Mage::helper('sales')->__('View'),
                        'url'     => array('base'=>'*/sales_order/view'),
                        'field'   => 'order_id'
                    )
                ),
                'filter'    => false,
                'sortable'  => false,
                'index'     => 'stores',
                'is_system' => true,
        ));
    }
    $this->addRssList('rss/order/new', Mage::helper('sales')->__('New Order RSS'));

    $this->addExportType('*/*/exportCsv', Mage::helper('sales')->__('CSV'));
    $this->addExportType('*/*/exportExcel', Mage::helper('sales')->__('Excel XML'));

    return parent::_prepareColumns();
}

protected function _prepareMassaction()
{
    $this->setMassactionIdField('entity_id');
    $this->getMassactionBlock()->setFormFieldName('order_ids');
    $this->getMassactionBlock()->setUseSelectAll(false);

    if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/cancel')) {
        $this->getMassactionBlock()->addItem('cancel_order', array(
             'label'=> Mage::helper('sales')->__('Cancel'),
             'url'  => $this->getUrl('*/sales_order/massCancel'),
        ));
    }

    if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/hold')) {
        $this->getMassactionBlock()->addItem('hold_order', array(
             'label'=> Mage::helper('sales')->__('Hold'),
             'url'  => $this->getUrl('*/sales_order/massHold'),
        ));
    }

    if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/unhold')) {
        $this->getMassactionBlock()->addItem('unhold_order', array(
             'label'=> Mage::helper('sales')->__('Unhold'),
             'url'  => $this->getUrl('*/sales_order/massUnhold'),
        ));
    }

    $this->getMassactionBlock()->addItem('pdfinvoices_order', array(
         'label'=> Mage::helper('sales')->__('Print Invoices'),
         'url'  => $this->getUrl('*/sales_order/pdfinvoices'),
    ));

    $this->getMassactionBlock()->addItem('pdfshipments_order', array(
         'label'=> Mage::helper('sales')->__('Print Packingslips'),
         'url'  => $this->getUrl('*/sales_order/pdfshipments'),
    ));

    $this->getMassactionBlock()->addItem('pdfcreditmemos_order', array(
         'label'=> Mage::helper('sales')->__('Print Credit Memos'),
         'url'  => $this->getUrl('*/sales_order/pdfcreditmemos'),
    ));

    $this->getMassactionBlock()->addItem('pdfdocs_order', array(
         'label'=> Mage::helper('sales')->__('Print All'),
         'url'  => $this->getUrl('*/sales_order/pdfdocs'),
    ));

    $this->getMassactionBlock()->addItem('print_shipping_label', array(
         'label'=> Mage::helper('sales')->__('Print Shipping Labels'),
         'url'  => $this->getUrl('*/sales_order_shipment/massPrintShippingLabel'),
    ));

    return $this;
}

public function getRowUrl($row)
{
    if (Mage::getSingleton('admin/session')->isAllowed        ('sales/order/actions/view')) {
        return $this->getUrl('*/sales_order/view', array('order_id' => $row->getId()));
    }
    return false;
}

public function getGridUrl()
{
    return $this->getUrl('*/*/grid', array('_current'=>true));
}

}

 ?>

Can you please point out the problem?

Thanks,

1

In your installscript you have used halfway through the code:

$this->endSetup();

This basically means that the script stops running from that point on.

Note: this should only be used at the end of the script.

try this: (have not tested this code but i think it should work like this)

<?php

$installer = $this;

$installer->startSetup();
$installer->addAttribute('catalog_product', 'pre_order', array(
    'group' => 'General',
    'type' => 'int', // can be int, varchar, decimal, text, datetime
    'backend' => '', // If you're making an image attribute you'll need to add : catalog/category_attribute_backend_image
    'frontend_input' => '',
    'frontend' => '',
    'label' => 'Is Pre Order',
    'input' => 'boolean', //text, textarea, select, file, image, multiselect
    'class' => '',
    'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, // Scope can be SCOPE_STORE, SCOPE_GLOBAL or SCOPE_WEBSITE
    'visible' => true,
    'frontend_class' => '',
    'required' => false, // or true
    'user_defined' => true, // or false
    'used_in_product_listing' => '1',
    'default' => '',
    'apply_to' => 'simple,configurable,virtual,bundle,downloadable',
));
$installer->addAttribute('catalog_product', 'pre_order_note', array(
    'group' => 'General',
    'type' => 'varchar', // can be int, varchar, decimal, text, datetime
    'backend' => '', // If you're making an image attribute you'll need to add : catalog/category_attribute_backend_image
    'frontend_input' => '',
    'frontend' => '',
    'label' => 'Pre Order Note',
    'input' => 'text', //text, textarea, select, file, image, multiselect
    'class' => '',
    'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, // Scope can be SCOPE_STORE, SCOPE_GLOBAL or SCOPE_WEBSITE
    'visible' => true,
    'frontend_class' => '',
    'required' => false, // or true
    'user_defined' => true, // or false
    'used_in_product_listing' => '1',
    'default' => '',
    'apply_to' => 'simple,configurable,virtual,bundle,downloadable',
));

/**
* Add 'custom_attribute' attribute for entities
*/
$entities = array(
    'quote',
    'quote_item',
    'order',
    'order_item'
);
$entitiesnew = array(
    'quote_item',
    'order_item'
);
$options = array(
    'type'     => Varien_Db_Ddl_Table::TYPE_BOOLEAN,
    'visible'  => true,
    'required' => false,
    'default' => 0
);
$options2 = array(
    'type'     => Varien_Db_Ddl_Table::TYPE_VARCHAR,
    'visible'  => true,
    'required' => false
);
foreach ($entities as $entity) {
    $installer->addAttribute($entity, 'pre_order', $options);   
}
foreach ($entitiesnew as $entitynew) {
    $installer->addAttribute($entitynew, 'pre_order_note', $options2);
}
$installer->endSetup();
?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.