in src/Feature/Account/code/Repositories/AccountRepository.cs [134:197]
public AddressListItemJsonResult ModifyAddress(PartyInputModelItem model)
{
var addresses = new List<CommerceParty>();
var userResponse = this.AccountManager.GetUser(Context.User.Name);
var result = new AddressListItemJsonResult(userResponse.ServiceProviderResult);
if (userResponse.ServiceProviderResult.Success && userResponse.Result != null)
{
var commerceUser = userResponse.Result;
var customer = new CommerceCustomer { ExternalId = commerceUser.ExternalId };
var party = new CommerceParty
{
ExternalId = model.ExternalId,
Name = model.Name,
Address1 = model.Address1,
City = model.City,
Country = model.Country,
State = model.State,
ZipPostalCode = model.ZipPostalCode,
PartyId = model.PartyId,
IsPrimary = model.IsPrimary
};
if (string.IsNullOrEmpty(party.ExternalId))
{
// Verify we have not reached the maximum number of addresses supported.
var numberOfAddresses = this.AllAddresses(result).Count;
if (numberOfAddresses >= StorefrontManager.CurrentStorefront.MaxNumberOfAddresses)
{
var message = StorefrontManager.GetSystemMessage(StorefrontConstants.SystemMessages.MaxAddressLimitReached);
result.Errors.Add(string.Format(CultureInfo.InvariantCulture, message, numberOfAddresses));
result.Success = false;
}
else
{
party.ExternalId = Guid.NewGuid().ToString("B");
var response = this.AccountManager.AddParties(this.CurrentStorefront, customer, new List<Sitecore.Commerce.Entities.Party> { party });
result.SetErrors(response.ServiceProviderResult);
if (response.ServiceProviderResult.Success)
{
addresses = this.AllAddresses(result);
}
result.Initialize(addresses, null);
}
}
else
{
var response = this.AccountManager.UpdateParties(this.CurrentStorefront, customer, new List<Sitecore.Commerce.Entities.Party> { party });
result.SetErrors(response.ServiceProviderResult);
if (response.ServiceProviderResult.Success)
{
addresses = this.AllAddresses(result);
}
result.Initialize(addresses, null);
}
}
return result;
}