public static OrderCalculationResponse CalculateOrder(OrderCalculationRequest request, bool hasAutoOrder = false) { var result = new OrderCalculationResponse(); if (request.Items.Count() == 0) return result; if (request.Address == null) request.Address = GlobalSettings.Company.Address; if (request.ShipMethodID == 0) request.ShipMethodID = request.Configuration.DefaultShipMethodID; var apirequest = new CalculateOrderRequest(); apirequest.WarehouseID = request.Configuration.WarehouseID; apirequest.CurrencyCode = request.Configuration.CurrencyCode; apirequest.PriceType = request.Configuration.PriceTypeID; apirequest.ShipMethodID = request.ShipMethodID; apirequest.ReturnShipMethods = request.ReturnShipMethods; apirequest.City = request.Address.City; apirequest.State = request.Address.State; apirequest.Zip = request.Address.Zip; apirequest.Country = request.Address.Country; apirequest.Details = request.Items.Select(c => new OrderDetailRequest(c)).ToArray(); if(hasAutoOrder){ apirequest.OrderType = Common.Api.ExigoWebService.OrderType.AutoOrder; } var apiresponse = Exigo.WebService().CalculateOrder(apirequest); result.Subtotal = apiresponse.SubTotal; result.Shipping = apiresponse.ShippingTotal; result.Tax = apiresponse.TaxTotal; result.Discount = apiresponse.DiscountTotal; result.Total = apiresponse.Total; // Assemble the ship methods var shipMethods = new List<ShipMethod>(); if (apiresponse.ShipMethods != null && apiresponse.ShipMethods.Length > 0) { foreach (var shipMethod in apiresponse.ShipMethods) { shipMethods.Add((ShipMethod)shipMethod); } // Ensure that at least one ship method is selected var shipMethodID = (request.ShipMethodID != 0) ? request.ShipMethodID : request.Configuration.DefaultShipMethodID; if (shipMethods.Any(c => c.ShipMethodID == (int)shipMethodID)) { shipMethods.First(c => c.ShipMethodID == shipMethodID).Selected = true; } else { shipMethods.First().Selected = true; } } result.ShipMethods = shipMethods.AsEnumerable(); return result; }