private static void SaveMobileQuoteResponse(QuoteResponseViewModel model, int shoppingCartId)
        {
            CatalogInterfaceClient proxy = null;

            using (proxy = ServiceClientProvider.GetCatalogServiceProxy())
            {
                try
                {
                    var request = new InsertMobileOrderDetailRequest_V01();

                    MobileOrderDetail mobileOrderDetail =
                        MobileOrderProvider.ModelConverter.ConvertOrderViewModelToMobileOrderDetail(model.Order,
                                                                                                    shoppingCartId);
                    mobileOrderDetail.AddressId = model.Order.Shipping != null && model.Order.Shipping.Address != null
                        ? model.Order.Shipping.Address.CloudId
                        : Guid.Empty;
                    mobileOrderDetail.CustomerId  = model.Order.CustomerId;
                    mobileOrderDetail.OrderStatus = "Quoted";

                    request.MobileOrderDetail = mobileOrderDetail;
                    InsertMobileOrderDetailResponse response = proxy.InsertMobileOrderDetail(new InsertMobileOrderDetailRequest1(request)).InsertMobileOrderDetailResult;
                    // Check response for error.
                    if (response == null || response.Status != ServiceResponseStatusType.Success)
                    {
                        LoggerHelper.Error(string.Format("SaveMobileQuoteResponse error Order: {0} Message: {1}",
                                                         model.Order.OrderNumber, response));
                    }
                }
                catch (Exception ex)
                {
                    LoggerHelper.Error(string.Format("SaveMobileQuoteResponse Exception Order: {0} Message: {1}",
                                                     model.Order.OrderNumber, ex));
                }
            }
        }
        public QuoteResponseViewModel Quote(OrderViewModel order, ref List <ValidationErrorViewModel> errors)
        {
            try
            {
                if (null == errors)
                {
                    errors = new List <ValidationErrorViewModel>();
                }
                if (ValidateOrderViewModel(order))
                {
                    if (_mobileQuoteHelper.CheckIfOrderCompleted(order.Id))
                    {
                        errors.Add(
                            new ValidationErrorViewModel
                        {
                            Code   = 109999,
                            Reason = string.Format("order for guid {0} already completed", order.Id)
                        });
                        string countrydup = order.Locale.Substring(3, 2);
                        DualOrderMonthViewModel orderMonthDatadup = _dualOrderMonthProvider.GetDualOrderMonth(countrydup);
                        return(new QuoteResponseViewModel
                        {
                            Order = order,
                            DualOrderMonth =
                                new DualOrderMonthViewModel
                            {
                                PreviousOrderMonthEndDate = orderMonthDatadup != null ? orderMonthDatadup.PreviousOrderMonthEndDate : string.Empty,
                                PreviousOrderMonth = orderMonthDatadup != null ? orderMonthDatadup.PreviousOrderMonth : 0,
                            },
                        });
                    }

                    var shoppingCart = _mobileQuoteHelper.PriceCart(ref order, ref errors, checkSkuAvalability: true, checkUnSupportedAddress: true);
                    if (shoppingCart != null)
                    {
                        var ruleErrors = CheckForError(shoppingCart.RuleResults);
                        if (null != ruleErrors && ruleErrors.Any())
                        {
                            errors.AddRange(ruleErrors);
                        }
                        if (errors != null && errors.Count > 1 && errors.Find(f => f.Code.Equals(110430)) != null)
                        {
                            errors.RemoveAll(e => e.Code.Equals(10416));
                        }
                        string country = order.Locale.Substring(3, 2);
                        DualOrderMonthViewModel orderMonthData = _dualOrderMonthProvider.GetDualOrderMonth(country);
                        var dualOrderMonth = new DualOrderMonthResponseViewModel
                        {
                            PreviousOrderMonth        = orderMonthData != null? orderMonthData.PreviousOrderMonth :0,
                            PreviousOrderMonthEndDate = orderMonthData != null? orderMonthData.PreviousOrderMonthEndDate : string.Empty
                        };
                        var result = new QuoteResponseViewModel
                        {
                            Order          = order,
                            DualOrderMonth =
                                new DualOrderMonthViewModel
                            {
                                PreviousOrderMonthEndDate = dualOrderMonth.PreviousOrderMonthEndDate,
                                PreviousOrderMonth        = dualOrderMonth.PreviousOrderMonth
                            },
                        };
                        SaveMobileQuoteResponse(result, shoppingCart.ShoppingCartID);
                        return(result);
                    }
                }
                errors.Add(
                    new ValidationErrorViewModel
                {
                    Code   = 100416,
                    Reason = "Quote failed"
                });
                return(new QuoteResponseViewModel
                {
                    Order = order,
                });
            }
            catch (Exception ex)
            {
                LoggerHelper.Exception("System.Exception", ex, "Exception in Quote method MobileQuoteProvider");
                errors.Add(
                    new ValidationErrorViewModel
                {
                    Code   = 100416,
                    Reason = "Quote failed"
                });
                return(new QuoteResponseViewModel
                {
                    Order = order,
                });
            }
        }