Question

I want to create a new field for every address (say 'new_address_code') in the backend which shouldn't be visible in the frontend. When ever a customer adds a new address through address book or in checkout, the field's value should be generated automatically based on the 'customername'._.'serialNumberOfHisAddresses'. Could any one guide me how to do this. Thanks in advance..

Was it helpful?

Solution

user3066006,I have create an extension which do this

Create an extension: app\code\local\Tdg\Check\etc\config.xml

<?xml version="1.0" encoding="UTF-8"?>
        <config>
        <modules>
            <Tdg_Check>
                <version>1.0.0</version>
            </Tdg_Check>
        </modules>
        <admin>
            <fieldsets>
                <customer_dataflow>
                    <new_address_code><billing>1</billing><shipping>1</shipping></new_address_code>
                </customer_dataflow>
            </fieldsets>
        </admin>
        <global>
            <models>
                <check>
                    <class>Tdg_Check_Model</class>
                </check>
            </models>
            <resources>
                <check_setup>
                    <setup>
                        <module>Tdg_Check</module>
                        <class>Mage_Customer_Model_Entity_Setup</class>

                    </setup>
                    <connection>
                        <use>core_setup</use>
                    </connection>
                </check_setup>
                <check_write>
                    <connection>
                        <use>core_write</use>
                    </connection>
                </check_write>
                <check_read>
                    <connection>
                        <use>core_read</use>
                    </connection>
                </check_read>
            </resources>
            <fieldsets>
                <sales_copy_order_billing_address>
                    <new_address_code><to_order>*</to_order></new_address_code>
                </sales_copy_order_billing_address>
                <sales_copy_order_shipping_address>
                    <new_address_code><to_order>*</to_order></new_address_code>
                </sales_copy_order_shipping_address>
                <sales_convert_quote_address>
                    <new_address_code><to_order_address>*</to_order_address><to_customer_address>*</to_customer_address></new_address_code>
                </sales_convert_quote_address>
                <sales_convert_order_address>
                    <new_address_code><to_quote_address>*</to_quote_address></new_address_code>
                </sales_convert_order_address>
                <customer_address>
                     <new_address_code><to_quote_address>*</to_quote_address></new_address_code>
                </customer_address>
                <checkout_onepage_billing>
                    <new_address_code><to_customer>*</to_customer></new_address_code>
                </checkout_onepage_billing>
            </fieldsets>
            <!-- call of  event basic of customer_save_after -->
            <events>
                <customer_address_save_before>
                    <observers>
                        <myautoincrement>
                            <class>check/observer</class>
                            <method>mymethod</method>
                        </myautoincrement>
                    </observers>
                </customer_address_save_before>
                <customer_address_save_after>
                    <observers>
                        <myautoincrement>
                            <class>check/observer</class>
                            <method>aftermymethod</method>
                        </myautoincrement>
                    </observers>
                </customer_address_save_after>
                <!-- event on checkout -->
            <checkout_submit_all_after>
                <observers>
                    <auto_set_custom_field>
                        <class>check/observer</class>
                        <method>autosetBillingShipfield</method>
                    </auto_set_custom_field>
                </observers>
            </checkout_submit_all_after>


            </events>

        </global>
    </config>

Observer.php(app\code\local\Tdg\Check\Model) is

    <?php
    class Tdg_Check_Model_Observer{
    public  function mymethod($observer)
        {
            /** @var $customerAddress Mage_Customer_Model_Address */
            try{
            $customerAddress = $observer->getCustomerAddress();
            $customer = $customerAddress->getCustomer();
        if (Mage::registry('my_is_new_address')) {
            Mage::unregister('my_is_new_address');
        }


             if ($customerAddress->getId()) {

                 //old address
             }else{
                        Mage::register('my_is_new_address', 'new_address');

                 //new address 
             }
            }catch(Exception $e){
            //Mage::log($e);
            Mage::log(print_r($e->getMessage(), 1), null, 'logfile1.log');
            }
        }
    public  function aftermymethod($observer)
        {
            /** @var $customerAddress Mage_Customer_Model_Address */
            try{
            $customerAddress = $observer->getCustomerAddress();
            $id= (string)$customerAddress->getId();
            $customer = $customerAddress->getCustomer();

            $ObcustomerAddress = $observer->getCustomerAddress();
             if ($customerAddress->getId()) {
            if(Mage::registry('my_is_new_address')){
            if(Mage::registry('my_is_new_address')=='new_address'):

                $customerAddress->setData('new_address_code','aftertesting-'.$customerAddress->getData('firstname').'=myid'.$id);
                 $customerAddress->getResource()->saveAttribute($ObcustomerAddress, 'new_address_code');
endif;
}

                 //old address
             }else{

                $customerAddress->setData('new_address_code','after-testingnew-'.$customerAddress->getData('firstname'));
                 $customerAddress->getResource()->saveAttribute($ObcustomerAddress, 'new_address_code');


                 //new address 
             }
            }catch(Exception $e){
            //Mage::log($e);
            Mage::log(print_r($e->getMessage(), 1), null, 'logfile1.log');
            }
        }
        public function autosetBillingShipfield($Observer){
    $Order=$Observer->getEvent()->getOrder();
    $Quote=$Observer->getEvent()->getQuote();
    if ($Quote->getBillingAddress()->getSaveInAddressBook()&& !is_null($Order->getBillingAddress()->getCustomerAddressId())) {
                 $address = Mage::getModel('customer/address')->load((int)$Order->getBillingAddress()->getCustomerAddressId());
        $SaleaOrderAdd=Mage::getModel('sales/order_address')->load($Order->getBillingAddress()->getId());       
        $SaleaOrderAdd->setData('new_address_code','after-testingnew-'.$Order->getBillingAddress()->getData('firstname').'--'.$address->getId());
        $SaleaOrderAdd->getResource()->saveAttribute($SaleaOrderAdd, 'new_address_code');


    }
    if ($Quote->getShippingAddress()->getSaveInAddressBook()&& !is_null($Order->getShippingAddress()->getCustomerAddressId())) {
                 $address = Mage::getModel('customer/address')->load((int)$Order->getShippingAddress()->getCustomerAddressId());
        $SaleaShipOrderAdd=Mage::getModel('sales/order_address')->load($Order->getShippingAddress()->getId());      

        $SaleaShipOrderAdd->setData('new_address_code','after-testingnew-'.$Order->getShippingAddress()->getDataFirstname().'--'.$address->getId());
        $SaleaShipOrderAdd->getResource()->saveAttribute($SaleaShipOrderAdd, 'new_address_code');

    }

}

    }

And installer mysql4-install-1.0.0.php ( Tdg\Check\sql\check_setup)

<?php
    /* @var $installer Mage_Customer_Model_Entity_Setup */
    $installer = $this;
    $installer->startSetup();
    /* @var $addressHelper Mage_Customer_Helper_Address */
$this->addAttribute('customer_address', 'new_address_code', array(
    'type' => 'varchar',
    'input' => 'text',
    'label' => 'New address code ',
    'global' => 1,
    'visible' => 1,
    'required' => 0,
    'user_defined' => 1,
    'visible_on_front' => 1
));
Mage::getSingleton('eav/config')
    ->getAttribute('customer_address', 'new_address_code')
    ->setData('used_in_forms', array('adminhtml_customer_address'))
    ->save();
    $installer->run("
        ALTER TABLE {$this->getTable('sales_flat_quote_address')} ADD COLUMN `new_address_code` VARCHAR(255) CHARACTER SET utf8 DEFAULT NULL AFTER `fax`;
         ALTER TABLE {$this->getTable('sales_flat_order_address')} ADD COLUMN `new_address_code` VARCHAR(255) CHARACTER SET utf8 DEFAULT NULL AFTER `fax`;
        ");
    $installer->endSetup();
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top