/// <summary> /// Gets the line shipping options. /// </summary> /// <param name="cart">The cart.</param> /// <param name="allShippingOptions">All shipping options.</param> /// <returns>The list of line shipping options.</returns> protected virtual List <LineShippingOption> GetLineShippingOptions(CommerceCart cart, List <ShippingOption> allShippingOptions) { List <LineShippingOption> lineShippingOptions = new List <LineShippingOption>(); if (cart != null && cart.Lines != null && cart.Lines.Any()) { foreach (CommerceCartLine lineItem in cart.Lines) { List <ShippingOption> shippingOptionsForLine = new List <ShippingOption>(); foreach (var shippingOption in allShippingOptions) { if (shippingOption.ShippingOptionType == ShippingOptionType.ShipToAddress || shippingOption.ShippingOptionType == ShippingOptionType.ElectronicDelivery) { bool add = shippingOption.ShippingOptionType == ShippingOptionType.ElectronicDelivery && !this.CanLineItemBeEmailed(lineItem) ? false : true; if (add) { shippingOptionsForLine.Add(shippingOption); } } } LineShippingOption lineShippingOption = new LineShippingOption(); lineShippingOption.LineId = Guid.Parse(lineItem.ExternalCartLineId).ToString(); lineShippingOption.ShippingOptions = shippingOptionsForLine.AsReadOnly(); lineShippingOptions.Add(lineShippingOption); } } return(lineShippingOptions); }
public override void Process(ServicePipelineArgs args) { // validate args Assert.ArgumentNotNull(args, "args"); Assert.ArgumentNotNull(args.Request, "args.Request"); Assert.ArgumentNotNull(args.Request.RequestContext, "args.Request.RequestContext"); Assert.ArgumentNotNull(args.Result, "args.Result"); GetShippingOptionsRequest request = args.Request as GetShippingOptionsRequest; GetShippingOptionsResult result = args.Result as GetShippingOptionsResult; Assert.IsNotNull(request, "The parameter args.Request was not of the expected type. Expected {0}. Actual {1}.", typeof(GetShippingOptionsRequest).Name, args.Request.GetType().Name); Assert.IsNotNull(result, "The parameter args.Result was not of the expected type. Expected {0}. Actual {1}.", typeof(GetShippingOptionsResult).Name, args.Result.GetType().Name); try { Assert.ArgumentNotNull(request.Cart, "request.Cart"); Assert.IsTrue(request.Cart.Lines.Count > 0, "request.Cart.Lines"); string cartId = request.Cart.ExternalId; List <CartFulfillment> cartFulfillments = Proxy.Execute(this.GetContainer(request.Cart.ShopName, request.Cart.UserId, request.Cart.CustomerId, "", args.Request.CurrencyCode, new DateTime?()).GetCartWithFulfillmentOptions(cartId).Expand("FulfillmentOptions")).ToList(); DataServiceCollection <FulfillmentOption> fulfillmentOptions = cartFulfillments.FirstOrDefault(k => k.TargetId == cartId)?.FulfillmentOptions; if (fulfillmentOptions == null || !fulfillmentOptions.Any()) { result.Success = false; return; } List <ShippingOption> shippingOptions = fulfillmentOptions.Select(this.TranslateShippingOption).ToList(); List <LineShippingOption> lineShippingOptionList = new List <LineShippingOption>(); foreach (CartLine cartLine in request.Cart.Lines) { CartLine line = cartLine; DataServiceCollection <FulfillmentOption> lineFulfillmentOptions = cartFulfillments.FirstOrDefault(k => k.TargetId == line.ExternalCartLineId)?.FulfillmentOptions; if (!lineFulfillmentOptions.Any()) { result.Success = false; return; } List <ShippingOption> lineShippingOptions = lineFulfillmentOptions.Select(this.TranslateShippingOption).ToList(); LineShippingOption lineShippingOption = this.EntityFactory.Create <LineShippingOption>("LineShippingOption"); lineShippingOption.LineId = line.ExternalCartLineId; lineShippingOption.ShippingOptions = lineShippingOptions; lineShippingOptionList.Add(lineShippingOption); } result.ShippingOptions = shippingOptions.AsReadOnly(); result.LineShippingPreferences = lineShippingOptionList.AsReadOnly(); } catch (ArgumentException ex) { result.Success = false; result.SystemMessages.Add(new SystemMessage(ex.Message)); } base.Process(args); }
public void Initialize(LineShippingOption lineShippingOption) { if (lineShippingOption == null) { return; } LineId = lineShippingOption.LineId; var shippingOptionList = new List <ShippingOptionApiModel>(); if (lineShippingOption.ShippingOptions != null) { foreach (var shippingOption in lineShippingOption.ShippingOptions) { var jsonResult = new ShippingOptionApiModel(); jsonResult.Initialize(shippingOption); shippingOptionList.Add(jsonResult); } } ShippingOptions = shippingOptionList; }
/// <summary> /// Initializes the specified line shipping option. /// </summary> /// <param name="lineShippingOption">The line shipping option.</param> public void Initialize(LineShippingOption lineShippingOption) { if (lineShippingOption == null) { return; } this.LineId = lineShippingOption.LineId; var shippingOptionList = new List <ShippingOptionBaseJsonResult>(); if (lineShippingOption.ShippingOptions != null) { foreach (var shippingOption in lineShippingOption.ShippingOptions) { var jsonResult = CommerceTypeLoader.CreateInstance <ShippingOptionBaseJsonResult>(); jsonResult.Initialize(shippingOption); shippingOptionList.Add(jsonResult); } } this.ShippingOptions = shippingOptionList; }
/// <summary> /// Gets the line shipping options. /// </summary> /// <param name="cart">The cart.</param> /// <param name="allShippingOptions">All shipping options.</param> /// <returns>The list of line shipping options.</returns> protected virtual List<LineShippingOption> GetLineShippingOptions(CommerceCart cart, List<ShippingOption> allShippingOptions) { List<LineShippingOption> lineShippingOptions = new List<LineShippingOption>(); if (cart != null && cart.Lines != null && cart.Lines.Any()) { foreach (CommerceCartLine lineItem in cart.Lines) { List<ShippingOption> shippingOptionsForLine = new List<ShippingOption>(); foreach (var shippingOption in allShippingOptions) { if (shippingOption.ShippingOptionType == Sitecore.Reference.Storefront.Connect.Models.ShippingOptionType.ShipToAddress || shippingOption.ShippingOptionType == Sitecore.Reference.Storefront.Connect.Models.ShippingOptionType.ElectronicDelivery) { bool add = shippingOption.ShippingOptionType == Sitecore.Reference.Storefront.Connect.Models.ShippingOptionType.ElectronicDelivery && !this.CanLineItemBeEmailed(lineItem) ? false : true; if (add) { shippingOptionsForLine.Add(shippingOption); } } } LineShippingOption lineShippingOption = new LineShippingOption(); lineShippingOption.LineId = Guid.Parse(lineItem.ExternalCartLineId).ToString(); lineShippingOption.ShippingOptions = shippingOptionsForLine.AsReadOnly(); lineShippingOptions.Add(lineShippingOption); } } return lineShippingOptions; }