public override GetCartResult Execute(IUnitOfWork unitOfWork, GetCartParameter parameter, GetCartResult result)
        {
            if (result.Cart.Status == "Saved")
            {
                GetCartPricingResult cartPricing1 = this.pricingPipeline.GetCartPricing(new GetCartPricingParameter(result.Cart)
                {
                    CalculateShipping   = true,
                    CalculateOrderLines = false
                });
            }
            if (!parameter.CalculateShipping || !result.Cart.OrderLines.Any <OrderLine>((Func <OrderLine, bool>)(o => this.orderLineUtilities.GetIsActive(o))))
            {
                return(this.NextHandler.Execute(unitOfWork, parameter, result));
            }
            GetCartPricingResult cartPricing = this.pricingPipeline.GetCartPricing(new GetCartPricingParameter(result.Cart)
            {
                CalculateShipping   = true,
                CalculateOrderLines = false
            });

            if (cartPricing.ResultCode != ResultCode.Success)
            {
                result.CanCheckOut = cartPricing.SubCode == SubCode.PricingShippingNotCalculated && result.CanCheckOut;
                this.CopyMessages((ResultBase)cartPricing, (ResultBase)result);
            }
            return(this.NextHandler.Execute(unitOfWork, parameter, result));
        }
Example #2
0
        public override GetCartResult Execute(IUnitOfWork unitOfWork, GetCartParameter parameter, GetCartResult result)
        {
            if (!result.Cart.OrderLines.Any <OrderLine>())
            {
                return(this.NextHandler.Execute(unitOfWork, parameter, result));
            }
            if (result.Cart.Status != "Cart" && result.Cart.Status != "Saved" && result.Cart.Status != "AwaitingApproval" && result.Cart.Status != "SubscriptionOrder")
            {
                return(this.NextHandler.Execute(unitOfWork, parameter, result));
            }
            if (!parameter.ForceRecalculation)
            {
                DateTimeOffset?lastPricingOn = result.Cart.LastPricingOn;
                if (lastPricingOn.HasValue)
                {
                    lastPricingOn = result.Cart.LastPricingOn;
                    if ((DateTimeOffset)lastPricingOn.Value.DateTime.AddMinutes((double)this.cartSettings.MinutesBeforeRecalculation) > DateTimeProvider.Current.Now)
                    {
                        return(this.NextHandler.Execute(unitOfWork, parameter, result));
                    }
                }
            }
            result.Cart.ShippingCalculationNeededAsOf = DateTimeProvider.Current.Now;
            result.Cart.RecalculateTax = true;
            if (result.Cart.Type != "Quote" && result.Cart.Type != "Job")
            {
                result.Cart.RecalculatePromotions = true;
            }
            GetCartPricingResult cartPricing = this.pricingPipeline.GetCartPricing(new GetCartPricingParameter(result.Cart));

            if (cartPricing.ResultCode == ResultCode.Success)
            {
                result.Cart          = cartPricing.Cart;
                result.CartNotPriced = false;
            }
            else
            {
                result.CanCheckOut   = false;
                result.CartNotPriced = true;
                this.CopyMessages((ResultBase)cartPricing, (ResultBase)result);
            }
            return(this.NextHandler.Execute(unitOfWork, parameter, result));
        }