public static VirtoCommerceCustomerModuleWebModelAddress CopyFrom(this VirtoCommerceCustomerModuleWebModelAddress result, ShopifyModel.Address address, Country[] countries) { result.InjectFrom<NullableAndEnumValueInjecter>(address); result.Organization = address.Company; result.CountryName = address.Country; result.PostalCode = address.Zip; result.Line1 = address.Address1; result.Line2 = address.Address2; result.RegionName = address.Province; result.Name = string.Join(" ", result.FirstName, result.LastName).Trim(); var country = countries.FirstOrDefault(c => string.Equals(c.Name, address.Country, StringComparison.OrdinalIgnoreCase)); if (country != null) { result.CountryCode = country.Code3; if (address.Province != null && country.Regions != null) { var region = country.Regions.FirstOrDefault(r => string.Equals(r.Name, address.Province, StringComparison.OrdinalIgnoreCase)); if (region != null) { result.RegionId = region.Code; } } } return result; }
public async Task<ActionResult> UpdateAddress(string id, shopifyModel.Address formModel) { var contact = await _customerApi.CustomerModuleGetContactByIdAsync(WorkContext.CurrentCustomer.Id); var updateContact = false; if (contact != null) { if (string.IsNullOrEmpty(id)) { // Add new address contact.Addresses.Add(formModel.ToServiceModel(WorkContext.AllCountries)); updateContact = true; } else { int addressIndex; if (int.TryParse(id, NumberStyles.Integer, CultureInfo.InvariantCulture, out addressIndex)) { if (addressIndex > 0 && addressIndex <= contact.Addresses.Count) { if (string.Equals(formModel.Method, "delete", StringComparison.OrdinalIgnoreCase)) { // Delete address contact.Addresses.RemoveAt(addressIndex - 1); updateContact = true; } else { // Update address contact.Addresses[addressIndex].CopyFrom(formModel, WorkContext.AllCountries); updateContact = true; } } } } if (updateContact) { await _customerApi.CustomerModuleUpdateContactAsync(contact); } } return StoreFrontRedirect("~/account/addresses"); }