/// <summary> /// Gets the shipping methods. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="inputModel">The input model.</param> /// <returns> /// The manager response where the shipping methods are returned in the Result. /// </returns> public ManagerResponse <GetShippingMethodsResult, IReadOnlyCollection <ShippingMethod> > GetShippingMethods([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] GetShippingMethodsInputModel inputModel) { Assert.ArgumentNotNull(storefront, "storefront"); Assert.ArgumentNotNull(visitorContext, "visitorContext"); Assert.ArgumentNotNull(inputModel, "inputModel"); GetShippingMethodsResult result = new GetShippingMethodsResult { Success = false }; var cartResult = this.CartManager.GetCurrentCart(storefront, visitorContext); if (!cartResult.ServiceProviderResult.Success || cartResult.Result == null) { result.SystemMessages.ToList().AddRange(cartResult.ServiceProviderResult.SystemMessages); return(new ManagerResponse <GetShippingMethodsResult, IReadOnlyCollection <ShippingMethod> >(result, null)); } var cart = cartResult.Result; var preferenceType = InputModelExtension.GetShippingOptionType(inputModel.ShippingPreferenceType); var request = new Sitecore.Commerce.Engine.Connect.Services.Shipping.GetShippingMethodsRequest( new ShippingOption { ShippingOptionType = preferenceType }, (inputModel.ShippingAddress != null) ? inputModel.ShippingAddress.ToParty() : null, cart) { Lines = (inputModel.Lines != null) ? inputModel.Lines.ToCommerceCartLines() : null }; result = this.ShippingServiceProvider.GetShippingMethods <GetShippingMethodsRequest, GetShippingMethodsResult>(request); return(new ManagerResponse <GetShippingMethodsResult, IReadOnlyCollection <ShippingMethod> >(result, result.ShippingMethods)); }
public ManagerResponse <GetShippingMethodsResult, IReadOnlyCollection <ShippingMethod> > GetShippingMethods(string userId, GetShippingMethodsInputModel inputModel) { Assert.ArgumentNotNull(inputModel, nameof(inputModel)); var result = new GetShippingMethodsResult { Success = false }; var cartResult = CartManager.GetCart(userId); if (!cartResult.ServiceProviderResult.Success || cartResult.Result == null) { result.SystemMessages.ToList().AddRange(cartResult.ServiceProviderResult.SystemMessages); return(new ManagerResponse <GetShippingMethodsResult, IReadOnlyCollection <ShippingMethod> >(result, null)); } var cart = cartResult.Result; var preferenceType = InputModelExtension.GetShippingOptionType(inputModel.ShippingPreferenceType); var request = new GetDeliveryMethodsRequest( new ShippingOption { ShippingOptionType = preferenceType }, (inputModel.ShippingAddress != null) ? inputModel.ShippingAddress.ToParty() : null) { Cart = cart, Lines = (inputModel.Lines != null) ? inputModel.Lines.ToCommerceCartLines() : null }; result = this.ShippingServiceProvider.GetShippingMethods <GetShippingMethodsRequest, GetShippingMethodsResult>(request); return(new ManagerResponse <GetShippingMethodsResult, IReadOnlyCollection <ShippingMethod> >(result, result.ShippingMethods)); }
/// <summary> /// Sets the shipping methods. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="inputModel">The input model.</param> /// <returns> /// The manager response where the modified CommerceCart is returned in the Result. /// </returns> public virtual ManagerResponse <AddShippingInfoResult, CommerceCart> SetShippingMethods([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext 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)); } var cart = (CommerceCart)response.ServiceProviderResult.Cart; if (inputModel.ShippingAddresses != null && inputModel.ShippingAddresses.Any()) { var cartParties = cart.Parties.ToList(); cartParties.AddRange(inputModel.ShippingAddresses.ToParties()); cart.Parties = cartParties.AsReadOnly(); } 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(); } } var cartCache = CommerceTypeLoader.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)); }
public ManagerResponse <AddShippingInfoResult, CommerceCart> SetShippingMethods(string userId, SetShippingMethodsInputModel inputModel) { Assert.ArgumentNotNull(inputModel, nameof(inputModel)); var result = new AddShippingInfoResult { Success = false }; var response = GetCart(userId, true); if (!response.ServiceProviderResult.Success || response.Result == null) { return(new ManagerResponse <AddShippingInfoResult, CommerceCart>(result, response.Result)); } var cart = (CommerceCart)response.ServiceProviderResult.Cart; if (inputModel.ShippingAddresses != null && inputModel.ShippingAddresses.Any()) { var cartParties = cart.Parties.ToList(); cartParties.AddRange(inputModel.ShippingAddresses.Select(item => item.ToParty()).ToList()); cart.Parties = cartParties.AsReadOnly(); } var internalShippingList = inputModel.ShippingMethods.Select(item => item.ToShippingInfo()).ToList(); 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(); } } CartCacheHelper.InvalidateCartCache(userId); result = AddShippingInfoToCart(cart, orderPreferenceType, internalShippingList); if (result.Success && result.Cart != null) { CartCacheHelper.AddCartToCache(result.Cart as CommerceCart); } return(new ManagerResponse <AddShippingInfoResult, CommerceCart>(result, result.Cart as CommerceCart)); }
/// <summary> /// Gets the shipping methods. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="inputModel">The input model.</param> /// <returns> /// The manager response where the shipping methods are returned in the Result. /// </returns> public ManagerResponse <GetShippingMethodsResult, IReadOnlyCollection <ShippingMethod> > GetShippingMethods([NotNull] CommerceStorefront storefront, [NotNull] IVisitorContext visitorContext, [NotNull] GetShippingMethodsInputModel inputModel) { Assert.ArgumentNotNull(storefront, "storefront"); Assert.ArgumentNotNull(visitorContext, "visitorContext"); Assert.ArgumentNotNull(inputModel, "inputModel"); var errorResult = new GetShippingMethodsResult { Success = false }; var cartResult = this._cartManager.GetCurrentCart(storefront, visitorContext); if (!cartResult.ServiceProviderResult.Success || cartResult.Result == null) { errorResult.SystemMessages.ToList().AddRange(cartResult.ServiceProviderResult.SystemMessages); return(new ManagerResponse <GetShippingMethodsResult, IReadOnlyCollection <ShippingMethod> >(errorResult, null)); } var cart = cartResult.Result; var preferenceType = InputModelExtension.GetShippingOptionType(inputModel.ShippingPreferenceType); if (inputModel.Lines != null && inputModel.Lines.Any()) { // We only support a single line at a time, hence accessing element 0 is ok. preferenceType = InputModelExtension.GetShippingOptionType(inputModel.Lines[0].ShippingPreferenceType); } // TODO: Remove hard coded language - will be fixed in connect. var request = new Helpers.GetShippingMethodsRequest( "en-us", new ShippingOption { ShippingOptionType = preferenceType }, (inputModel.ShippingAddress != null) ? inputModel.ShippingAddress.ToParty() : null) { Cart = cart, Lines = (inputModel.Lines != null) ? inputModel.Lines.ToCommerceCartLines().Cast <CartLine>().ToList() : null }; var result = this._shippingServiceProvider.GetShippingMethods <Helpers.GetShippingMethodsRequest, GetShippingMethodsResult>(request); //Helpers.LogSystemMessages(errorResult.SystemMessages, errorResult); return(new ManagerResponse <GetShippingMethodsResult, IReadOnlyCollection <ShippingMethod> >(result, result.ShippingMethods)); }