From adebfa2a935d12f411db2c5e75a12d1f4f06b6cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Mateos?= Date: Wed, 11 Oct 2017 20:17:51 +0200 Subject: [PATCH 1/3] Save region correctly to save sales address from admin --- .../Adminhtml/Order/AddressSave.php | 105 +++++++++++++++++- 1 file changed, 100 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php index c6462c7166f6f..873424aaf5bfe 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php @@ -4,9 +4,32 @@ * Copyright © 2013-2017 Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Sales\Controller\Adminhtml\Order; -class AddressSave extends \Magento\Sales\Controller\Adminhtml\Order +use Magento\Backend\App\Action\Context; +use Magento\Backend\Model\View\Result\Redirect; +use Magento\Directory\Model\RegionFactory; +use Magento\Sales\Api\OrderManagementInterface; +use Magento\Sales\Api\OrderRepositoryInterface; +use Magento\Sales\Api\Data\OrderAddressInterface; +use Magento\Sales\Controller\Adminhtml\Order; +use Magento\Sales\Model\Order\Address; +use Psr\Log\LoggerInterface; +use Magento\Framework\Registry; +use Magento\Framework\App\Response\Http\FileFactory; +use Magento\Framework\Translate\InlineInterface; +use Magento\Framework\View\Result\PageFactory; +use Magento\Framework\Controller\Result\JsonFactory; +use Magento\Framework\View\Result\LayoutFactory; +use Magento\Framework\Controller\Result\RawFactory; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\App\ObjectManager; + +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class AddressSave extends Order { /** * Authorization level of a basic admin session @@ -14,18 +37,71 @@ class AddressSave extends \Magento\Sales\Controller\Adminhtml\Order * @see _isAllowed() */ const ADMIN_RESOURCE = 'Magento_Sales::actions_edit'; + /** + * @var RegionFactory + */ + private $regionFactory; + + /** + * @param Context $context + * @param Registry $coreRegistry + * @param FileFactory $fileFactory + * @param InlineInterface $translateInline + * @param PageFactory $resultPageFactory + * @param JsonFactory $resultJsonFactory + * @param LayoutFactory $resultLayoutFactory + * @param RawFactory $resultRawFactory + * @param OrderManagementInterface $orderManagement + * @param OrderRepositoryInterface $orderRepository + * @param LoggerInterface $logger + * @param RegionFactory|null $regionFactory + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) + */ + public function __construct( + Context $context, + Registry $coreRegistry, + FileFactory $fileFactory, + InlineInterface $translateInline, + PageFactory $resultPageFactory, + JsonFactory $resultJsonFactory, + LayoutFactory $resultLayoutFactory, + RawFactory $resultRawFactory, + OrderManagementInterface $orderManagement, + OrderRepositoryInterface $orderRepository, + LoggerInterface $logger, + RegionFactory $regionFactory = null + ) { + $this->regionFactory = $regionFactory ?: ObjectManager::getInstance()->get(RegionFactory::class); + parent::__construct( + $context, + $coreRegistry, + $fileFactory, + $translateInline, + $resultPageFactory, + $resultJsonFactory, + $resultLayoutFactory, + $resultRawFactory, + $orderManagement, + $orderRepository, + $logger + ); + } /** * Save order address * - * @return \Magento\Backend\Model\View\Result\Redirect + * @return Redirect */ public function execute() { $addressId = $this->getRequest()->getParam('address_id'); - /** @var $address \Magento\Sales\Api\Data\OrderAddressInterface|\Magento\Sales\Model\Order\Address */ - $address = $this->_objectManager->create('Magento\Sales\Api\Data\OrderAddressInterface')->load($addressId); + /** @var $address OrderAddressInterface|Address */ + $address = $this->_objectManager->create( + OrderAddressInterface::class + )->load($addressId); $data = $this->getRequest()->getPostValue(); + $data = $this->updateRegionData($data); $resultRedirect = $this->resultRedirectFactory->create(); if ($data && $address->getId()) { $address->addData($data); @@ -38,15 +114,34 @@ public function execute() ] ); $this->messageManager->addSuccess(__('You updated the order address.')); + return $resultRedirect->setPath('sales/*/view', ['order_id' => $address->getParentId()]); - } catch (\Magento\Framework\Exception\LocalizedException $e) { + } catch (LocalizedException $e) { $this->messageManager->addError($e->getMessage()); } catch (\Exception $e) { $this->messageManager->addException($e, __('We can\'t update the order address right now.')); } + return $resultRedirect->setPath('sales/*/address', ['address_id' => $address->getId()]); } else { return $resultRedirect->setPath('sales/*/'); } } + + /** + * Update region data + * + * @param array $attributeValues + * @return array + */ + private function updateRegionData($attributeValues) + { + if (!empty($attributeValues['region_id'])) { + $newRegion = $this->regionFactory->create()->load($attributeValues['region_id']); + $attributeValues['region_code'] = $newRegion->getCode(); + $attributeValues['region'] = $newRegion->getDefaultName(); + } + + return $attributeValues; + } } From 774bd14f31331cfeb9dac275f465cf0abbaab1a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Mateos?= Date: Thu, 12 Oct 2017 13:28:33 +0200 Subject: [PATCH 2/3] Change alias model address --- .../Magento/Sales/Controller/Adminhtml/Order/AddressSave.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php index 873424aaf5bfe..756c95f94337d 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php @@ -14,7 +14,7 @@ use Magento\Sales\Api\OrderRepositoryInterface; use Magento\Sales\Api\Data\OrderAddressInterface; use Magento\Sales\Controller\Adminhtml\Order; -use Magento\Sales\Model\Order\Address; +use Magento\Sales\Model\Order\Address as ModelOrderAddress; use Psr\Log\LoggerInterface; use Magento\Framework\Registry; use Magento\Framework\App\Response\Http\FileFactory; @@ -96,7 +96,7 @@ public function __construct( public function execute() { $addressId = $this->getRequest()->getParam('address_id'); - /** @var $address OrderAddressInterface|Address */ + /** @var $address OrderAddressInterface|ModelOrderAddress */ $address = $this->_objectManager->create( OrderAddressInterface::class )->load($addressId); From 66337a9a838b93bf66a897046c5631b4f9f6cca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Mateos?= Date: Thu, 12 Oct 2017 19:00:05 +0200 Subject: [PATCH 3/3] Solve error PHP Code Sniffer --- .../Magento/Sales/Controller/Adminhtml/Order/AddressSave.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php index 756c95f94337d..b05c27d6b427f 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php @@ -37,6 +37,7 @@ class AddressSave extends Order * @see _isAllowed() */ const ADMIN_RESOURCE = 'Magento_Sales::actions_edit'; + /** * @var RegionFactory */