2013-07-26 4 views
1

В конце покупки у пользователя есть возможность изменить ваш адрес доставки. Я пытаюсь обновить эту информацию, но не работает. Это мой код:Почтовый адрес доставки обновления Magento

$customer = Mage::getModel('customer/session')->getCustomer(); 
$order = Mage::getSingleton('checkout/session')->getLastOrder(); 
$postData = Mage::app()->getRequest()->getPost(); 

$_new_address = array (
    'firstname' => $postData['nombre'], 
    'lastname' => $postData['apellidos'], 
    'street' => array ('0' => $postData['direccion']), 
    'city'  => $postData['localidad'], 
    'region_id' => $postData['provincia_id'], 
    'region' => '', 
    'postcode' => $postData['codigo_postal'], 
    'country_id'=> 'ES', 
    'telephone' => $postData['telefono'] 
); 

$customAddress = Mage::getModel('customer/address'); 
$customAddress->setData($_new_address) 
    ->setCustomerId($customer->getId()) 
    ->setIsDefaultBilling('1') 
    ->setIsDefaultShipping('1') 
    ->setSaveInAddressBook('1'); 

// Save address 
try { 
    $customAddress->save(); 
} catch (Exception $e) { 
    Mage::getSingleton('core/session')->addError($e->getMessage()); 
    header('Location: /'); 
    exit; 
} 

// Update the order 
try { 
    $order->setShippingAddress($customAddress)->save(); 
} catch (Exception $e) { 
    Mage::getSingleton('core/session')->addError($e->getMessage()); 
    header('Location: /'); 
    exit; 
} 

Могу ли я обновить заказ или не разрешено? Может ли кто-нибудь дать мне подсказку?

ответ

3

Моя проблема заключалась в том, что адрес фактуры и адрес доставки в заказе отличаются от того, имеет адреса по умолчанию.

В конце код выглядит следующим образом:

$order = Mage::getSingleton('checkout/session')->getLastOrder(); 

$postData = Mage::app()->getRequest()->getPost(); 

// Try to get shipping and billing address data. 
$orderShippingAddress = $order->getShippingAddress()->getId(); 
$orderShipping = Mage::getModel('sales/order_address')->load($orderShippingAddress); 

$orderBillingAddress = $order->getBillingAddress()->getId(); 
$orderBilling = Mage::getModel('sales/order_address')->load($orderBillingAddress); 

// Updating data. 
$orderShipping->addData($postData); 
$orderBilling->addData($postData); 

try { 
    $orderShipping->implodeStreetAddress()->save(); 
    $orderBilling->implodeStreetAddress()->save(); 
} catch (Exception $e) { 
    Mage::logException($e); 
    Mage::getSingleton('core/session')->addError($e->getMessage()); 
    header('Location: /after/success/envio'); 
    exit; 
} 

Теперь она работает. Спасибо за помощь @ R.S

2

Предполагая, что вы хотите, чтобы обновить адрес доставки для заказа, посмотрите @addressSaveAction() в /app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php

$order = Mage::getSingleton('checkout/session')->getLastOrder(); 

//Get shipping address Id 
$addressId = $order->getShippingAddress()->getId(); 

$address = Mage::getModel('sales/order_address')->load($addressId); 

$data  = $this->getRequest()->getPost(); 

$address->addData($data); 

$address->implodeStreetAddress()->save(); 

Также я 'm не уверен, что если Mage::getSingleton('checkout/session')->getLastOrder() по-прежнему будет содержать действительный идентификатор заказа после того, как вы отправите форму, так как вы будете загружать новую страницу

+0

Да, getLastOrder() все еще содержит действительный идентификатор заказа. – Javier

2

При правильном функционировании оба других ответа имеют чрезмерную загрузку адреса. getShippingAddress уже возвращает экземпляр sales/order_address. Таким образом, процедура может быть упрощена следующим образом:

$order = Mage::getSingleton('checkout/session')->getLastOrder(); 
$data = $this->getRequest()->getPost(); 

$order->getShippingAddress()->addData($data) 
    ->save(); 

Также implodeStreetAddress вызова методы требуется только при использовании многострочного адреса улицы.

Смежные вопросы