I have the order object. From that I can get the shipping address id. Can anyone suggest how to derive Shipping address by shipping address id?
Magento – How to Get Shipping Address by Shipping Address ID
magento-1.7shipping-address
Related Solutions
Try this one:
Mage::app()->getLocale()->currency(Mage::app()->getStore()->getCurrentCurrencyCode())->getSymbol();
I found the solution from this link here : http://www.magentocommerce.com/boards/viewthread/316685/
In my observer I added below code to change my shipping rates as per country selection in shipping address.
class Pnk_Zones_Model_Observer
{
public function getShippingMethods($observer)
{
$session = Mage::getSingleton('checkout/session');
$quote=Mage::getSingleton('checkout/session')->getQuote();
$quoteid=$quote->getId();
if($quoteid) {
try{
$address=$quote->getShippingAddress();
if($address->getAddressType()=='shipping'){
// echo '<pre>'; print_r($events->getQuoteAddress()->getData()); exit;
//$price=40;
$countryId = $address->getCountry();
//Code to get Shipping rate from my zone module //
$shippingRateCollection = Mage::getModel('zones/zones')->getCollection();
$shippingRateCollection->addFieldToSelect('*');
$shippingRateCollection->getSelect()->where("find_in_set('".$countryId."', `countries`)");
foreach ($shippingRateCollection as $shipping){
$price = $shipping->getShippingRate();
}
// echo "Price = ".$price;
// Find if our shipping has been included.
$rates = $address->collectShippingRates()
->getGroupedAllShippingRates();
foreach ($rates as $carrier) {
foreach ($carrier as $rate) {
// Check with your custom shipping method code
if($rate->getCode() == 'zones'){
$rate->setPrice($price);
$rate->save();
}
}
}
$this->collectTotals($quote,$price);
}
$quote->collectTotals();
} catch (Exception $e) {
Mage::logException($e);
$response['error'] = $e->getMessage();
}
}
}
public function collectTotals($quote,$price){
$quoteid=$quote->getId();
$shippingcode='freeshipping_freeshipping';
if($quoteid) {
try{
$quote->setSubtotal(0);
$quote->setBaseSubtotal(0);
$quote->setSubtotalWithDiscount(0);
$quote->setBaseSubtotalWithDiscount(0);
$quote->setGrandTotal(0);
$quote->setBaseGrandTotal(0);
$quote->getShippingAddress()->setShippingMethod($shippingcode)/* ->collectTotals() */->save();
$quote->save();
foreach ($quote->getAllAddresses() as $address) {
$address->setSubtotal(0);
$address->setBaseSubtotal(0);
$address->setGrandTotal(0);
$address->setBaseGrandTotal(0);
$address->collectTotals();
$quote->setSubtotal((float) $quote->getSubtotal() + $address->getSubtotal());
$quote->setBaseSubtotal((float) $quote->getBaseSubtotal() + $address->getBaseSubtotal());
$quote->setSubtotalWithDiscount(
(float) $quote->getSubtotalWithDiscount() + $address->getSubtotalWithDiscount()
);
$quote->setBaseSubtotalWithDiscount(
(float) $quote->getBaseSubtotalWithDiscount() + $address->getBaseSubtotalWithDiscount()
);
$quote->setGrandTotal((float) $quote->getGrandTotal() + $address->getGrandTotal());
$quote->setBaseGrandTotal((float) $quote->getBaseGrandTotal() + $address->getBaseGrandTotal());
$address->setShippingAmount($price);
$address->setBaseShippingAmount($price);
$address->save();
}
$response['message'] = 'Succcess';
} catch (Exception $e) {
Mage::logException($e);
$response['error'] = $e->getMessage();
}
}
}
}
Best Answer
You could use the order_address object to get the shipping address:
or use
to see what are the methods that can be used on the address object ($address).
hope it solves your prob :)