regionFactory = $regionFactory ?: ObjectManager::getInstance()->get(RegionFactory::class); parent::__construct( $context, $coreRegistry, $fileFactory, $translateInline, $resultPageFactory, $resultJsonFactory, $resultLayoutFactory, $resultRawFactory, $orderManagement, $orderRepository, $logger ); } /** * Save order address * * @return Redirect */ public function execute() { $addressId = $this->getRequest()->getParam('address_id'); /** @var $address OrderAddressInterface|AddressModel */ $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); try { $address->save(); $this->_eventManager->dispatch( 'admin_sales_order_address_update', [ 'order_id' => $address->getParentId() ] ); $this->messageManager->addSuccessMessage(__('You updated the order address.')); return $resultRedirect->setPath('sales/*/view', ['order_id' => $address->getParentId()]); } catch (LocalizedException $e) { $this->messageManager->addErrorMessage($e->getMessage()); } catch (\Exception $e) { $this->messageManager->addExceptionMessage($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; } }