public override void Process(ServicePipelineArgs args) { Assert.ArgumentNotNull(args, nameof(args)); Assert.ArgumentCondition(args.Request is GetPartiesRequest, nameof(args.Request), "args.Request is GetPartiesRequest"); Assert.ArgumentCondition(args.Result is GetPartiesResult, nameof(args.Result), "args.Result is GetPartiesResult"); var request = (GetPartiesRequest)args.Request; var result = (GetPartiesResult)args.Result; Assert.ArgumentNotNull(request.CommerceCustomer, nameof(request.CommerceCustomer)); var partyList = new List <Party>(); Profile customerProfile = null; var response = GetCommerceUserProfile(request.CommerceCustomer.ExternalId, ref customerProfile); if (!response.Success) { result.Success = false; response.SystemMessages.ToList().ForEach(m => result.SystemMessages.Add(m)); return; } var preferredAddress = customerProfile[Commerce.Constants.Profile.GeneralInfo.PreferredAddress].Value as string; var profileValue = customerProfile[Commerce.Constants.Profile.GeneralInfo.AddressList].Value as object[]; if (profileValue != null) { var e = profileValue.Select(i => i.ToString()); var addresIdsList = new ProfilePropertyListCollection <string>(e); foreach (var addressId in addresIdsList) { Profile commerceAddress = null; response = GetCommerceAddressProfile(addressId, ref commerceAddress); if (!response.Success) { result.Success = false; response.SystemMessages.ToList().ForEach(m => result.SystemMessages.Add(m)); return; } var newParty = EntityFactory.Create <CommerceParty>("Party"); var requestTorequestToEntity = new TranslateCommerceAddressProfileToEntityRequest(commerceAddress, newParty); PipelineUtility.RunCommerceConnectPipeline <TranslateCommerceAddressProfileToEntityRequest, CommerceResult>(Constants.Pipelines.TranslateCommerceAddressProfileToEntity, requestTorequestToEntity); if (!string.IsNullOrWhiteSpace(preferredAddress) && preferredAddress.Equals(newParty.ExternalId, StringComparison.OrdinalIgnoreCase)) { newParty.IsPrimary = true; } var address = requestTorequestToEntity.DestinationParty; partyList.Add(address); } } result.Parties = partyList.AsReadOnly(); }
private Party ProcessCommerceParty(AddPartiesResult result, Profile customerProfile, CommerceParty partyToAdd) { Assert.ArgumentNotNull(partyToAdd, nameof(partyToAdd)); Assert.ArgumentNotNull(partyToAdd.Name, nameof(partyToAdd.Name)); Assert.ArgumentNotNull(partyToAdd.ExternalId, nameof(partyToAdd.ExternalId)); Profile addressProfile = null; var response = CreateAddressProfile(partyToAdd.ExternalId, ref addressProfile); if (!response.Success) { result.Success = false; response.SystemMessages.ToList().ForEach(m => result.SystemMessages.Add(m)); return(null); } var requestToCommerceProfile = new TranslateEntityToCommerceAddressProfileRequest(partyToAdd, addressProfile); PipelineUtility.RunCommerceConnectPipeline <TranslateEntityToCommerceAddressProfileRequest, CommerceResult>(Constants.Pipelines.TranslateEntityToCommerceAddressProfile, requestToCommerceProfile); addressProfile.Update(); ProfilePropertyListCollection <string> addressList; var profileValue = customerProfile[Commerce.Constants.Profile.GeneralInfo.AddressList].Value as object[]; if (profileValue != null) { var e = profileValue.Select(i => i.ToString()); addressList = new ProfilePropertyListCollection <string>(e); } else { addressList = new ProfilePropertyListCollection <string>(); } addressList.Add(partyToAdd.ExternalId); customerProfile[Commerce.Constants.Profile.GeneralInfo.AddressList].Value = addressList.Cast <object>().ToArray(); if (partyToAdd.IsPrimary) { customerProfile[Commerce.Constants.Profile.GeneralInfo.PreferredAddress].Value = partyToAdd.ExternalId; } customerProfile.Update(); var newParty = EntityFactory.Create <CommerceParty>("Party"); var requestToEntity = new TranslateCommerceAddressProfileToEntityRequest(addressProfile, newParty); PipelineUtility.RunCommerceConnectPipeline <TranslateCommerceAddressProfileToEntityRequest, CommerceResult>(Constants.Pipelines.TranslateCommerceAddressProfileToEntity, requestToEntity); return(requestToEntity.DestinationParty); }
/// <summary> /// Processes the specified arguments. /// </summary> /// <param name="args">The arguments.</param> public override void Process(Commerce.Pipelines.ServicePipelineArgs args) { Assert.ArgumentNotNull(args, "args"); Assert.ArgumentNotNull(args.Request, "args.request"); Assert.ArgumentNotNull(args.Result, "args.result"); Assert.ArgumentCondition(args.Request is TranslateCommerceAddressProfileToEntityRequest, "args.Request ", "args.Request is TranslateCommerceProfileToEntityRequest"); TranslateCommerceAddressProfileToEntityRequest request = (TranslateCommerceAddressProfileToEntityRequest)args.Request; Assert.ArgumentNotNull(request.SourceProfile, "request.SourceProfile"); Assert.ArgumentNotNull(request.DestinationParty, "request.DestinationParty"); if (request.DestinationParty is CommerceParty) { this.TranslateToCommerceParty(request.SourceProfile, request.DestinationParty as CommerceParty); } else { this.TranslateToCustomParty(request.SourceProfile, request.DestinationParty); } }