Beispiel #1
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 virtual ManagerResponse <GetShippingOptionsResult, List <ShippingOption> > GetShippingPreferences(Cart cart)
        {
            var request = new GetShippingOptionsRequest(cart);
            GetShippingOptionsResult shippingOptions = this.shippingServiceProvider.GetShippingOptions(request);

            if (shippingOptions.Success && shippingOptions.ShippingOptions != null)
            {
                return(new ManagerResponse <GetShippingOptionsResult, List <ShippingOption> >(shippingOptions, shippingOptions.ShippingOptions.ToList()));
            }
            return(new ManagerResponse <GetShippingOptionsResult, List <ShippingOption> >(shippingOptions, null));
        }