/** * Updates an Address Model based on information from an Address Data Object. * * @param AddressModel $addressModel * @param Address $address * @return void */ public function updateAddressModel(AddressModel $addressModel, Address $address) { // Set all attributes $attributes = AddressConverter::toFlatArray($address); foreach ($attributes as $attributeCode => $attributeData) { if (Address::KEY_REGION === $attributeCode && $address->getRegion() instanceof Region) { $addressModel->setDataUsingMethod(Region::KEY_REGION, $address->getRegion()->getRegion()); $addressModel->setDataUsingMethod(Region::KEY_REGION_CODE, $address->getRegion()->getRegionCode()); $addressModel->setDataUsingMethod(Region::KEY_REGION_ID, $address->getRegion()->getRegionId()); } else { $addressModel->setDataUsingMethod($attributeCode, $attributeData); } } // Set customer related data $isBilling = $address->isDefaultBilling(); $addressModel->setIsDefaultBilling($isBilling); $addressModel->setIsDefaultShipping($address->isDefaultShipping()); // Need to use attribute set or future updates can cause data loss if (!$addressModel->getAttributeSetId()) { $addressModel->setAttributeSetId(CustomerMetadataServiceInterface::ATTRIBUTE_SET_ID_ADDRESS); } }