Exemple #1
0
        /// <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);
        }
Exemple #2
0
        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;
        }