Magento does not save billing city programmatically
-
12-12-2019 - |
Question
I have an external application and I have to update the billing and shipping details of an existing order. The problem is that the billing city doesn't get saved with the rest of the data. I'm using Magento 1.8. The code was inspired by this thread: Change shipping and billing address from order programmatically
$order = Mage::getModel('sales/order')->load($orderId);
$shippingAddress = Mage::getModel('sales/order_address')->load($order->getShippingAddress()->getId());
$billingAddress = Mage::getModel('sales/order_address')->load($order->getBillingAddress()->getId());
$shippingAddress = Mage::getModel('sales/order_address')
->setFirstname("value")
->setLastname("value")
->setCompany("value")
->setStreet("value"))
->setCity("value")
->setRegion("value")
->setPostcode("value")
->setTelephone("value")->save();
$billingAddress = Mage::getModel('sales/order_address')
->setFirstname("value")
->setLastname("value")
->setCompany("value")
->setStreet("value"))
->setCity("value")
->setRegion("value")
->setPostcode("value")
->setTelephone("value")->save();
Solution
Deni,you have already loaded shipping Address and Billing address from order
So you don't need create new Mage::getModel('sales/order_address')
object You just need to edit address object
$shippingAddress = Mage::getModel('sales/order_address')->load($order->getShippingAddress()->getId());
$billingAddress = Mage::getModel('sales/order_address')->load($order->getBillingAddress()->getId());
/* here i have edit exiting order shipping objects */
$shippingAddress ->
->setFirstname("value")
->setLastname("value")
->setCompany("value")
->setStreet("value"))
->setCity("value")
->setRegion("value")
->setPostcode("value")
->setTelephone("value")->save();
$billingAddres
->setFirstname("value")
->setLastname("value")
->setCompany("value")
->setStreet("value"))
->setCity("value")
->setRegion("value")
->setPostcode("value")
->setTelephone("value")->save();
You need to add ->setRegionId() for get region if you region id of this country
OTHER TIPS
Try this in place of your code snippet:
$order = Mage::getModel('sales/order')->load($orderId);
$orderAddress = Mage::getModel('sales/order_address');
$shippingAddress = $orderAddress->load($order->getShippingAddress()->getId();
$billingAddress = $orderAddress->load($order->getBillingAddress()->getId();
$shippingAddress /* = Mage::getModel('sales/order_address') */
->setFirstname("value")
->setLastname("value")
->setCompany("value")
->setStreet("value")
->setCity("value")
->setRegion("value")
->setPostcode("value")
->setTelephone("value")->save();
$billingAddress /* = Mage::getModel('sales/order_address') */
->setFirstname("value")
->setLastname("value")
->setCompany("value")
->setStreet("value")
->setCity("value")
->setRegion("value")
->setPostcode("value")
->setTelephone("value")->save();
Here is the complete working code, I also included a custom shipping and billing attribute in case someone needs it:
Mage::app('default');
$order = Mage::getModel('sales/order')->loadByIncrementId($_POST['nr_comanda']);
$shippingAddress = Mage::getModel('sales/order_address')->load($order->getShippingAddress()->getId());
$billingAddress = Mage::getModel('sales/order_address')->load($order->getBillingAddress()->getId());
$shippingAddress
->setCompany($_POST[''])
->setFirstname($_POST[''])
->setLastname($_POST[''])
->setTelephone($_POST[''])
->setStreet($_POST[''])
->setCity($_POST[''])
->setRegion($_POST[''])
->setData('custom_attribute', '123')
->setPostcode($_POST[''])->save();
$billingAddress
->setCompany($_POST[''])
->setFirstname($_POST[''])
->setLastname($_POST[''])
->setTelephone($_POST[''])
->setStreet($_POST[''])
->setCity($_POST[''])
->setRegion($_POST[''])
->setData('custom_attribute', '123')
->setPostcode($_POST[''])->save();