Magento Quote – Convert Default Shipping Address into a Quote Address

customerestimatequoteshipping

I'm working on a custom module that will display shipping estimates on the product page. All of my customers are required to sign up and log in (it's a trade-only website), so I have the customer's default shipping address at my disposal (guaranteed). Therefor, I'm going to provide a shipping estimate based on the default shipping address. So far, the only way I've found to convert the customer/address object into a sales_model_quote_address is as follows:

$customerAddressId = Mage::getSingleton('customer/session')->getCustomer()->getDefaultShipping();
$address = Mage::getModel('customer/address')->load($customerAddressId);
$address_data = array (
        'prefix' => $address->getPrefix(),
        'firstname' => $address->getFirstname(),
        'lastname' => $address->getLastname(),
        'street' => $address->getStreet(),
    'city' => $address->getCity(),
    'region_id' => $address->getRegionId(),
    'region' => $address->getRegion(),
    'postcode' => $address->getPostcode(),
    'country_id' => $address->getCountryId(),
    'telephone' => $address->getTelephone(),
    'email' => $address->getEmail()
);

$quoteShippingAddress = new Mage_Sales_Model_Quote_Address();
$quoteShippingAddress->setData($address_data);

This does work, but it seems a bit hacky/messy. Can anyone suggest a sensible alternative?
Thanks in advance.

Best Answer

I was hunting around for this too, and it looks like the quote/address class has a routine that does what we want, called importCustomerAddress:

$quoteShippingAddress->importCustomerAddress($customer->getDefaultShippingAddress());
$quoteShippingAddress->save();
Related Topic