PageRenderTime 62ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php

https://bitbucket.org/claudiu_marginean/magento-hg-mirror
PHP | 754 lines | 565 code | 47 blank | 142 comment | 65 complexity | 8f61616424e7ab71a6c93c5334eaccd9 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, LGPL-2.1, GPL-2.0, WTFPL
  1. <?php
  2. /**
  3. * Magento
  4. *
  5. * NOTICE OF LICENSE
  6. *
  7. * This source file is subject to the Open Software License (OSL 3.0)
  8. * that is bundled with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://opensource.org/licenses/osl-3.0.php
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@magentocommerce.com so we can send you a copy immediately.
  14. *
  15. * DISCLAIMER
  16. *
  17. * Do not edit or add to this file if you wish to upgrade Magento to newer
  18. * versions in the future. If you wish to customize Magento for your
  19. * needs please refer to http://www.magentocommerce.com for more information.
  20. *
  21. * @category Mage
  22. * @package Mage_Adminhtml
  23. * @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
  24. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  25. */
  26. /**
  27. * Adminhtml sales orders controller
  28. *
  29. * @category Mage
  30. * @package Mage_Adminhtml
  31. * @author Magento Core Team <core@magentocommerce.com>
  32. */
  33. class Mage_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Controller_Action
  34. {
  35. /**
  36. * Array of actions which can be processed without secret key validation
  37. *
  38. * @var array
  39. */
  40. protected $_publicActions = array('view', 'index');
  41. /**
  42. * Additional initialization
  43. *
  44. */
  45. protected function _construct()
  46. {
  47. $this->setUsedModuleName('Mage_Sales');
  48. }
  49. /**
  50. * Init layout, menu and breadcrumb
  51. *
  52. * @return Mage_Adminhtml_Sales_OrderController
  53. */
  54. protected function _initAction()
  55. {
  56. $this->loadLayout()
  57. ->_setActiveMenu('sales/order')
  58. ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
  59. ->_addBreadcrumb($this->__('Orders'), $this->__('Orders'));
  60. return $this;
  61. }
  62. /**
  63. * Initialize order model instance
  64. *
  65. * @return Mage_Sales_Model_Order || false
  66. */
  67. protected function _initOrder()
  68. {
  69. $id = $this->getRequest()->getParam('order_id');
  70. $order = Mage::getModel('sales/order')->load($id);
  71. if (!$order->getId()) {
  72. $this->_getSession()->addError($this->__('This order no longer exists.'));
  73. $this->_redirect('*/*/');
  74. $this->setFlag('', self::FLAG_NO_DISPATCH, true);
  75. return false;
  76. }
  77. Mage::register('sales_order', $order);
  78. Mage::register('current_order', $order);
  79. return $order;
  80. }
  81. /**
  82. * Orders grid
  83. */
  84. public function indexAction()
  85. {
  86. $this->_title($this->__('Sales'))->_title($this->__('Orders'));
  87. $this->_initAction()
  88. ->renderLayout();
  89. }
  90. /**
  91. * Order grid
  92. */
  93. public function gridAction()
  94. {
  95. $this->loadLayout(false);
  96. $this->renderLayout();
  97. }
  98. /**
  99. * View order detale
  100. */
  101. public function viewAction()
  102. {
  103. $this->_title($this->__('Sales'))->_title($this->__('Orders'));
  104. if ($order = $this->_initOrder()) {
  105. $this->_initAction();
  106. $this->_title(sprintf("#%s", $order->getRealOrderId()));
  107. $this->renderLayout();
  108. }
  109. }
  110. /**
  111. * Notify user
  112. */
  113. public function emailAction()
  114. {
  115. if ($order = $this->_initOrder()) {
  116. try {
  117. $order->sendNewOrderEmail();
  118. $this->_getSession()->addSuccess($this->__('The order email has been sent.'));
  119. } catch (Mage_Core_Exception $e) {
  120. $this->_getSession()->addError($e->getMessage());
  121. } catch (Exception $e) {
  122. $this->_getSession()->addError($this->__('Failed to send the order email.'));
  123. Mage::logException($e);
  124. }
  125. }
  126. $this->_redirect('*/sales_order/view', array('order_id' => $order->getId()));
  127. }
  128. /**
  129. * Cancel order
  130. */
  131. public function cancelAction()
  132. {
  133. if ($order = $this->_initOrder()) {
  134. try {
  135. $order->cancel()
  136. ->save();
  137. $this->_getSession()->addSuccess(
  138. $this->__('The order has been cancelled.')
  139. );
  140. }
  141. catch (Mage_Core_Exception $e) {
  142. $this->_getSession()->addError($e->getMessage());
  143. }
  144. catch (Exception $e) {
  145. $this->_getSession()->addError($this->__('The order has not been cancelled.'));
  146. Mage::logException($e);
  147. }
  148. $this->_redirect('*/sales_order/view', array('order_id' => $order->getId()));
  149. }
  150. }
  151. /**
  152. * Hold order
  153. */
  154. public function holdAction()
  155. {
  156. if ($order = $this->_initOrder()) {
  157. try {
  158. $order->hold()
  159. ->save();
  160. $this->_getSession()->addSuccess(
  161. $this->__('The order has been put on hold.')
  162. );
  163. }
  164. catch (Mage_Core_Exception $e) {
  165. $this->_getSession()->addError($e->getMessage());
  166. }
  167. catch (Exception $e) {
  168. $this->_getSession()->addError($this->__('The order was not put on hold.'));
  169. }
  170. $this->_redirect('*/sales_order/view', array('order_id' => $order->getId()));
  171. }
  172. }
  173. /**
  174. * Unhold order
  175. */
  176. public function unholdAction()
  177. {
  178. if ($order = $this->_initOrder()) {
  179. try {
  180. $order->unhold()
  181. ->save();
  182. $this->_getSession()->addSuccess(
  183. $this->__('The order has been released from holding status.')
  184. );
  185. }
  186. catch (Mage_Core_Exception $e) {
  187. $this->_getSession()->addError($e->getMessage());
  188. }
  189. catch (Exception $e) {
  190. $this->_getSession()->addError($this->__('The order was not unheld.'));
  191. }
  192. $this->_redirect('*/sales_order/view', array('order_id' => $order->getId()));
  193. }
  194. }
  195. /**
  196. * Manage payment state
  197. *
  198. * Either denies or approves a payment that is in "review" state
  199. */
  200. public function reviewPaymentAction()
  201. {
  202. try {
  203. if (!$order = $this->_initOrder()) {
  204. return;
  205. }
  206. $action = $this->getRequest()->getParam('action', '');
  207. switch ($action) {
  208. case 'accept':
  209. $order->getPayment()->accept();
  210. $message = $this->__('The payment has been accepted.');
  211. break;
  212. case 'deny':
  213. $order->getPayment()->deny();
  214. $message = $this->__('The payment has been denied.');
  215. break;
  216. case 'update':
  217. $order->getPayment()
  218. ->registerPaymentReviewAction(Mage_Sales_Model_Order_Payment::REVIEW_ACTION_UPDATE, true);
  219. $message = $this->__('Payment update has been made.');
  220. break;
  221. default:
  222. throw new Exception(sprintf('Action "%s" is not supported.', $action));
  223. }
  224. $order->save();
  225. $this->_getSession()->addSuccess($message);
  226. } catch (Mage_Core_Exception $e) {
  227. $this->_getSession()->addError($e->getMessage());
  228. } catch (Exception $e) {
  229. $this->_getSession()->addError($this->__('Failed to update the payment.'));
  230. Mage::logException($e);
  231. }
  232. $this->_redirect('*/sales_order/view', array('order_id' => $order->getId()));
  233. }
  234. /**
  235. * Add order comment action
  236. */
  237. public function addCommentAction()
  238. {
  239. if ($order = $this->_initOrder()) {
  240. try {
  241. $response = false;
  242. $data = $this->getRequest()->getPost('history');
  243. $notify = isset($data['is_customer_notified']) ? $data['is_customer_notified'] : false;
  244. $visible = isset($data['is_visible_on_front']) ? $data['is_visible_on_front'] : false;
  245. $order->addStatusHistoryComment($data['comment'], $data['status'])
  246. ->setIsVisibleOnFront($visible)
  247. ->setIsCustomerNotified($notify);
  248. $comment = trim(strip_tags($data['comment']));
  249. $order->save();
  250. $order->sendOrderUpdateEmail($notify, $comment);
  251. $this->loadLayout('empty');
  252. $this->renderLayout();
  253. }
  254. catch (Mage_Core_Exception $e) {
  255. $response = array(
  256. 'error' => true,
  257. 'message' => $e->getMessage(),
  258. );
  259. }
  260. catch (Exception $e) {
  261. $response = array(
  262. 'error' => true,
  263. 'message' => $this->__('Cannot add order history.')
  264. );
  265. }
  266. if (is_array($response)) {
  267. $response = Mage::helper('core')->jsonEncode($response);
  268. $this->getResponse()->setBody($response);
  269. }
  270. }
  271. }
  272. /**
  273. * Generate invoices grid for ajax request
  274. */
  275. public function invoicesAction()
  276. {
  277. $this->_initOrder();
  278. $this->getResponse()->setBody(
  279. $this->getLayout()->createBlock('adminhtml/sales_order_view_tab_invoices')->toHtml()
  280. );
  281. }
  282. /**
  283. * Generate shipments grid for ajax request
  284. */
  285. public function shipmentsAction()
  286. {
  287. $this->_initOrder();
  288. $this->getResponse()->setBody(
  289. $this->getLayout()->createBlock('adminhtml/sales_order_view_tab_shipments')->toHtml()
  290. );
  291. }
  292. /**
  293. * Generate creditmemos grid for ajax request
  294. */
  295. public function creditmemosAction()
  296. {
  297. $this->_initOrder();
  298. $this->getResponse()->setBody(
  299. $this->getLayout()->createBlock('adminhtml/sales_order_view_tab_creditmemos')->toHtml()
  300. );
  301. }
  302. /**
  303. * Generate order history for ajax request
  304. */
  305. public function commentsHistoryAction()
  306. {
  307. $this->_initOrder();
  308. $this->getResponse()->setBody(
  309. $this->getLayout()->createBlock('adminhtml/sales_order_view_tab_history')->toHtml()
  310. );
  311. }
  312. /**
  313. * Cancel selected orders
  314. */
  315. public function massCancelAction()
  316. {
  317. $orderIds = $this->getRequest()->getPost('order_ids', array());
  318. $countCancelOrder = 0;
  319. $countNonCancelOrder = 0;
  320. foreach ($orderIds as $orderId) {
  321. $order = Mage::getModel('sales/order')->load($orderId);
  322. if ($order->canCancel()) {
  323. $order->cancel()
  324. ->save();
  325. $countCancelOrder++;
  326. } else {
  327. $countNonCancelOrder++;
  328. }
  329. }
  330. if ($countNonCancelOrder) {
  331. if ($countCancelOrder) {
  332. $this->_getSession()->addError($this->__('%s order(s) cannot be canceled', $countNonCancelOrder));
  333. } else {
  334. $this->_getSession()->addError($this->__('The order(s) cannot be canceled'));
  335. }
  336. }
  337. if ($countCancelOrder) {
  338. $this->_getSession()->addSuccess($this->__('%s order(s) have been canceled.', $countCancelOrder));
  339. }
  340. $this->_redirect('*/*/');
  341. }
  342. /**
  343. * Hold selected orders
  344. */
  345. public function massHoldAction()
  346. {
  347. $orderIds = $this->getRequest()->getPost('order_ids', array());
  348. $countHoldOrder = 0;
  349. $countNonHoldOrder = 0;
  350. foreach ($orderIds as $orderId) {
  351. $order = Mage::getModel('sales/order')->load($orderId);
  352. if ($order->canHold()) {
  353. $order->hold()
  354. ->save();
  355. $countHoldOrder++;
  356. } else {
  357. $countNonHoldOrder++;
  358. }
  359. }
  360. if ($countNonHoldOrder) {
  361. if ($countHoldOrder) {
  362. $this->_getSession()->addError($this->__('%s order(s) were not put on hold.', $countNonHoldOrder));
  363. } else {
  364. $this->_getSession()->addError($this->__('No order(s) were put on hold.'));
  365. }
  366. }
  367. if ($countHoldOrder) {
  368. $this->_getSession()->addSuccess($this->__('%s order(s) have been put on hold.', $countHoldOrder));
  369. }
  370. $this->_redirect('*/*/');
  371. }
  372. /**
  373. * Unhold selected orders
  374. */
  375. public function massUnholdAction()
  376. {
  377. $orderIds = $this->getRequest()->getPost('order_ids', array());
  378. $countUnholdOrder = 0;
  379. $countNonUnholdOrder = 0;
  380. foreach ($orderIds as $orderId) {
  381. $order = Mage::getModel('sales/order')->load($orderId);
  382. if ($order->canUnhold()) {
  383. $order->unhold()
  384. ->save();
  385. $countUnholdOrder++;
  386. } else {
  387. $countNonUnholdOrder++;
  388. }
  389. }
  390. if ($countNonUnholdOrder) {
  391. if ($countUnholdOrder) {
  392. $this->_getSession()->addError($this->__('%s order(s) were not released from holding status.', $countNonUnholdOrder));
  393. } else {
  394. $this->_getSession()->addError($this->__('No order(s) were released from holding status.'));
  395. }
  396. }
  397. if ($countUnholdOrder) {
  398. $this->_getSession()->addSuccess($this->__('%s order(s) have been released from holding status.', $countUnholdOrder));
  399. }
  400. $this->_redirect('*/*/');
  401. }
  402. /**
  403. * Change status for selected orders
  404. */
  405. public function massStatusAction()
  406. {
  407. }
  408. /**
  409. * Print documents for selected orders
  410. */
  411. public function massPrintAction()
  412. {
  413. $orderIds = $this->getRequest()->getPost('order_ids');
  414. $document = $this->getRequest()->getPost('document');
  415. }
  416. /**
  417. * Print invoices for selected orders
  418. */
  419. public function pdfinvoicesAction(){
  420. $orderIds = $this->getRequest()->getPost('order_ids');
  421. $flag = false;
  422. if (!empty($orderIds)) {
  423. foreach ($orderIds as $orderId) {
  424. $invoices = Mage::getResourceModel('sales/order_invoice_collection')
  425. ->setOrderFilter($orderId)
  426. ->load();
  427. if ($invoices->getSize() > 0) {
  428. $flag = true;
  429. if (!isset($pdf)){
  430. $pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoices);
  431. } else {
  432. $pages = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoices);
  433. $pdf->pages = array_merge ($pdf->pages, $pages->pages);
  434. }
  435. }
  436. }
  437. if ($flag) {
  438. return $this->_prepareDownloadResponse(
  439. 'invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $pdf->render(),
  440. 'application/pdf'
  441. );
  442. } else {
  443. $this->_getSession()->addError($this->__('There are no printable documents related to selected orders.'));
  444. $this->_redirect('*/*/');
  445. }
  446. }
  447. $this->_redirect('*/*/');
  448. }
  449. /**
  450. * Print shipments for selected orders
  451. */
  452. public function pdfshipmentsAction(){
  453. $orderIds = $this->getRequest()->getPost('order_ids');
  454. $flag = false;
  455. if (!empty($orderIds)) {
  456. foreach ($orderIds as $orderId) {
  457. $shipments = Mage::getResourceModel('sales/order_shipment_collection')
  458. ->setOrderFilter($orderId)
  459. ->load();
  460. if ($shipments->getSize()) {
  461. $flag = true;
  462. if (!isset($pdf)){
  463. $pdf = Mage::getModel('sales/order_pdf_shipment')->getPdf($shipments);
  464. } else {
  465. $pages = Mage::getModel('sales/order_pdf_shipment')->getPdf($shipments);
  466. $pdf->pages = array_merge ($pdf->pages, $pages->pages);
  467. }
  468. }
  469. }
  470. if ($flag) {
  471. return $this->_prepareDownloadResponse(
  472. 'packingslip'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $pdf->render(),
  473. 'application/pdf'
  474. );
  475. } else {
  476. $this->_getSession()->addError($this->__('There are no printable documents related to selected orders.'));
  477. $this->_redirect('*/*/');
  478. }
  479. }
  480. $this->_redirect('*/*/');
  481. }
  482. /**
  483. * Print creditmemos for selected orders
  484. */
  485. public function pdfcreditmemosAction(){
  486. $orderIds = $this->getRequest()->getPost('order_ids');
  487. $flag = false;
  488. if (!empty($orderIds)) {
  489. foreach ($orderIds as $orderId) {
  490. $creditmemos = Mage::getResourceModel('sales/order_creditmemo_collection')
  491. ->setOrderFilter($orderId)
  492. ->load();
  493. if ($creditmemos->getSize()) {
  494. $flag = true;
  495. if (!isset($pdf)){
  496. $pdf = Mage::getModel('sales/order_pdf_creditmemo')->getPdf($creditmemos);
  497. } else {
  498. $pages = Mage::getModel('sales/order_pdf_creditmemo')->getPdf($creditmemos);
  499. $pdf->pages = array_merge ($pdf->pages, $pages->pages);
  500. }
  501. }
  502. }
  503. if ($flag) {
  504. return $this->_prepareDownloadResponse(
  505. 'creditmemo'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $pdf->render(),
  506. 'application/pdf'
  507. );
  508. } else {
  509. $this->_getSession()->addError($this->__('There are no printable documents related to selected orders.'));
  510. $this->_redirect('*/*/');
  511. }
  512. }
  513. $this->_redirect('*/*/');
  514. }
  515. /**
  516. * Print all documents for selected orders
  517. */
  518. public function pdfdocsAction(){
  519. $orderIds = $this->getRequest()->getPost('order_ids');
  520. $flag = false;
  521. if (!empty($orderIds)) {
  522. foreach ($orderIds as $orderId) {
  523. $invoices = Mage::getResourceModel('sales/order_invoice_collection')
  524. ->setOrderFilter($orderId)
  525. ->load();
  526. if ($invoices->getSize()){
  527. $flag = true;
  528. if (!isset($pdf)){
  529. $pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoices);
  530. } else {
  531. $pages = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoices);
  532. $pdf->pages = array_merge ($pdf->pages, $pages->pages);
  533. }
  534. }
  535. $shipments = Mage::getResourceModel('sales/order_shipment_collection')
  536. ->setOrderFilter($orderId)
  537. ->load();
  538. if ($shipments->getSize()){
  539. $flag = true;
  540. if (!isset($pdf)){
  541. $pdf = Mage::getModel('sales/order_pdf_shipment')->getPdf($shipments);
  542. } else {
  543. $pages = Mage::getModel('sales/order_pdf_shipment')->getPdf($shipments);
  544. $pdf->pages = array_merge ($pdf->pages, $pages->pages);
  545. }
  546. }
  547. $creditmemos = Mage::getResourceModel('sales/order_creditmemo_collection')
  548. ->setOrderFilter($orderId)
  549. ->load();
  550. if ($creditmemos->getSize()) {
  551. $flag = true;
  552. if (!isset($pdf)){
  553. $pdf = Mage::getModel('sales/order_pdf_creditmemo')->getPdf($creditmemos);
  554. } else {
  555. $pages = Mage::getModel('sales/order_pdf_creditmemo')->getPdf($creditmemos);
  556. $pdf->pages = array_merge ($pdf->pages, $pages->pages);
  557. }
  558. }
  559. }
  560. if ($flag) {
  561. return $this->_prepareDownloadResponse(
  562. 'docs'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf',
  563. $pdf->render(), 'application/pdf'
  564. );
  565. } else {
  566. $this->_getSession()->addError($this->__('There are no printable documents related to selected orders.'));
  567. $this->_redirect('*/*/');
  568. }
  569. }
  570. $this->_redirect('*/*/');
  571. }
  572. /**
  573. * Atempt to void the order payment
  574. */
  575. public function voidPaymentAction()
  576. {
  577. if (!$order = $this->_initOrder()) {
  578. return;
  579. }
  580. try {
  581. $order->getPayment()->void(
  582. new Varien_Object() // workaround for backwards compatibility
  583. );
  584. $order->save();
  585. $this->_getSession()->addSuccess($this->__('The payment has been voided.'));
  586. } catch (Mage_Core_Exception $e) {
  587. $this->_getSession()->addError($e->getMessage());
  588. } catch (Exception $e) {
  589. $this->_getSession()->addError($this->__('Failed to void the payment.'));
  590. Mage::logException($e);
  591. }
  592. $this->_redirect('*/*/view', array('order_id' => $order->getId()));
  593. }
  594. /**
  595. * Acl check for admin
  596. *
  597. * @return bool
  598. */
  599. protected function _isAllowed()
  600. {
  601. $action = strtolower($this->getRequest()->getActionName());
  602. switch ($action) {
  603. case 'hold':
  604. $aclResource = 'sales/order/actions/hold';
  605. break;
  606. case 'unhold':
  607. $aclResource = 'sales/order/actions/unhold';
  608. break;
  609. case 'email':
  610. $aclResource = 'sales/order/actions/email';
  611. break;
  612. case 'cancel':
  613. $aclResource = 'sales/order/actions/cancel';
  614. break;
  615. case 'view':
  616. $aclResource = 'sales/order/actions/view';
  617. break;
  618. case 'addcomment':
  619. $aclResource = 'sales/order/actions/comment';
  620. break;
  621. case 'creditmemos':
  622. $aclResource = 'sales/order/actions/creditmemo';
  623. break;
  624. case 'reviewpayment':
  625. $aclResource = 'sales/order/actions/review_payment';
  626. break;
  627. default:
  628. $aclResource = 'sales/order';
  629. break;
  630. }
  631. return Mage::getSingleton('admin/session')->isAllowed($aclResource);
  632. }
  633. /**
  634. * Export order grid to CSV format
  635. */
  636. public function exportCsvAction()
  637. {
  638. $fileName = 'orders.csv';
  639. $grid = $this->getLayout()->createBlock('adminhtml/sales_order_grid');
  640. $this->_prepareDownloadResponse($fileName, $grid->getCsvFile());
  641. }
  642. /**
  643. * Export order grid to Excel XML format
  644. */
  645. public function exportExcelAction()
  646. {
  647. $fileName = 'orders.xml';
  648. $grid = $this->getLayout()->createBlock('adminhtml/sales_order_grid');
  649. $this->_prepareDownloadResponse($fileName, $grid->getExcelFile($fileName));
  650. }
  651. /**
  652. * Order transactions grid ajax action
  653. *
  654. */
  655. public function transactionsAction()
  656. {
  657. $this->_initOrder();
  658. $this->loadLayout(false);
  659. $this->renderLayout();
  660. }
  661. /**
  662. * Edit order address form
  663. */
  664. public function addressAction()
  665. {
  666. $addressId = $this->getRequest()->getParam('address_id');
  667. $address = Mage::getModel('sales/order_address')
  668. ->getCollection()
  669. ->getItemById($addressId);
  670. if ($address) {
  671. Mage::register('order_address', $address);
  672. $this->loadLayout();
  673. $this->renderLayout();
  674. } else {
  675. $this->_redirect('*/*/');
  676. }
  677. }
  678. /**
  679. * Save order address
  680. */
  681. public function addressSaveAction()
  682. {
  683. $addressId = $this->getRequest()->getParam('address_id');
  684. $address = Mage::getModel('sales/order_address')->load($addressId);
  685. $data = $this->getRequest()->getPost();
  686. if ($data && $address->getId()) {
  687. $address->addData($data);
  688. try {
  689. $address->implodeStreetAddress()
  690. ->save();
  691. $this->_getSession()->addSuccess(Mage::helper('sales')->__('The order address has been updated.'));
  692. $this->_redirect('*/*/view', array('order_id'=>$address->getParentId()));
  693. return;
  694. } catch (Mage_Core_Exception $e) {
  695. $this->_getSession()->addError($e->getMessage());
  696. } catch (Exception $e) {
  697. $this->_getSession()->addException(
  698. $e,
  699. Mage::helper('sales')->__('An error occurred while updating the order address. The address has not been changed.')
  700. );
  701. }
  702. $this->_redirect('*/*/address', array('address_id'=>$address->getId()));
  703. } else {
  704. $this->_redirect('*/*/');
  705. }
  706. }
  707. }