addressRepository = $addressRepository; $this->formFactory = $formFactory; $this->customerRepository = $customerRepository; $this->dataObjectHelper = $dataObjectHelper; $this->addressDataFactory = $addressDataFactory; $this->logger = $logger; $this->resultJsonFactory = $resultJsonFactory; } /** * Save customer address action * * @return Json */ public function execute(): Json { $customerId = $this->getRequest()->getParam('parent_id', false); $addressId = $this->getRequest()->getParam('entity_id', false); $error = false; try { /** @var \Magento\Customer\Api\Data\CustomerInterface $customer */ $customer = $this->customerRepository->getById($customerId); $addressForm = $this->formFactory->create( 'customer_address', 'adminhtml_customer_address', [], false, false ); $addressData = $addressForm->extractData($this->getRequest()); $addressData = $addressForm->compactData($addressData); $addressData['region'] = [ 'region' => $addressData['region'] ?? null, 'region_id' => $addressData['region_id'] ?? null, ]; $addressToSave = $this->addressDataFactory->create(); $this->dataObjectHelper->populateWithArray( $addressToSave, $addressData, \Magento\Customer\Api\Data\AddressInterface::class ); $addressToSave->setCustomerId($customer->getId()); $addressToSave->setIsDefaultBilling( (bool)$this->getRequest()->getParam('default_billing', false) ); $addressToSave->setIsDefaultShipping( (bool)$this->getRequest()->getParam('default_shipping', false) ); if ($addressId) { $addressToSave->setId($addressId); $message = __('Customer address has been updated.'); } else { $addressToSave->setId(null); $message = __('New customer address has been added.'); } $savedAddress = $this->addressRepository->save($addressToSave); $addressId = $savedAddress->getId(); } catch (NoSuchEntityException $e) { $this->logger->critical($e); $error = true; $message = __('There is no customer with such id.'); } catch (LocalizedException $e) { $error = true; $message = __($e->getMessage()); $this->logger->critical($e); } catch (\Exception $e) { $error = true; $message = __('We can\'t change customer address right now.'); $this->logger->critical($e); } $addressId = empty($addressId) ? null : $addressId; $resultJson = $this->resultJsonFactory->create(); $resultJson->setData( [ 'message' => $message, 'error' => $error, 'data' => [ 'entity_id' => $addressId ] ] ); return $resultJson; } }