public virtual ManagerResponse SetShippingMethods()

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);
        }