in src/Foundation/CommerceServer/code/Managers/CartManager.cs [409:461]
public virtual ManagerResponse<AddShippingInfoResult, CommerceCart> SetShippingMethods([NotNull] CommerceStorefront storefront, [NotNull] IVisitorContext visitorContext, [NotNull] SetShippingMethodsInputModel inputModel)
{
Assert.ArgumentNotNull(storefront, "storefront");
Assert.ArgumentNotNull(visitorContext, "visitorContext");
Assert.ArgumentNotNull(inputModel, "inputModel");
var result = new AddShippingInfoResult { Success = false };
var response = this.GetCurrentCart(storefront, visitorContext, true);
if (!response.ServiceProviderResult.Success || response.Result == null)
{
return new ManagerResponse<AddShippingInfoResult, CommerceCart>(result, response.Result);
}
CommerceParty allShippingParty = null;
var emailPartyList = this.GetEmailAddressPartiesFromShippingMethods(inputModel.ShippingMethods);
var cart = (CommerceCart)response.ServiceProviderResult.Cart;
if ((inputModel.ShippingAddresses != null && inputModel.ShippingAddresses.Any()) || (emailPartyList != null && emailPartyList.Any()))
{
var addPartiesResult = this.SetShippingAddresses(storefront, visitorContext, cart, inputModel.ShippingAddresses, emailPartyList);
if (!addPartiesResult.Success)
{
result.SystemMessages.Add(addPartiesResult.SystemMessages[0]);
return new ManagerResponse<AddShippingInfoResult, CommerceCart>(result, result.Cart as CommerceCart);
}
cart = (CommerceCart)addPartiesResult.Cart;
allShippingParty = (CommerceParty)addPartiesResult.Parties.ElementAt(0);
}
var internalShippingList = inputModel.ShippingMethods.ToShippingInfoList();
var orderPreferenceType = InputModelExtension.GetShippingOptionType(inputModel.OrderShippingPreferenceType);
if (orderPreferenceType != ShippingOptionType.DeliverItemsIndividually)
{
foreach (var shipping in internalShippingList)
{
shipping.LineIDs = (from CommerceCartLine lineItem in cart.Lines select lineItem.ExternalCartLineId).ToList().AsReadOnly();
shipping.PartyID = allShippingParty.ExternalId;
}
}
var cartCache = ContextTypeLoader.CreateInstance<CartCacheHelper>();
cartCache.InvalidateCartCache(visitorContext.GetCustomerId());
result = this.AddShippingInfoToCart(cart, orderPreferenceType, internalShippingList);
if (result.Success && result.Cart != null)
{
cartCache.AddCartToCache(result.Cart as CommerceCart);
}
return new ManagerResponse<AddShippingInfoResult, CommerceCart>(result, result.Cart as CommerceCart);
}