/// <summary>
        /// Handles exception thrown from a solve operation.
        /// </summary>
        /// <param name="exception">The exception thrown from a solve operation.</param>
        private void _HandleSolveError(Exception exception)
        {
            Debug.Assert(exception != null);

            var routeException = exception as RouteException;

            if (routeException != null)
            {
                if (routeException.InvalidObjects != null)
                {
                    // exception was thrown because any Routes or Orders are invalid.
                    _ShowSolveValidationResult(routeException.InvalidObjects);
                }
                else
                {
                    _ShowErrorMsg(RoutingCmdHelpers.FormatRoutingExceptionMsg(routeException));
                }

                return;
            }

            // If we have error in sync response - show it.
            var restException = exception as RestException;

            if (restException != null)
            {
                var details = new List <MessageDetail>();

                // If exception has details- process them.
                if (restException.Details != null)
                {
                    foreach (var detail in restException.Details)
                    {
                        var detailMessage = GuidsReplacer.ReplaceGuids(detail, App.Current.Project);
                        details.Add(new MessageDetail(MessageType.Error, detailMessage));
                    }
                }

                // Process exception message.
                var message = GuidsReplacer.ReplaceGuids(exception.Message, App.Current.Project);

                // Show error in messenger.
                App.Current.Messenger.AddError(message, details);

                return;
            }

            Logger.Error(exception);
            CommonHelpers.AddRoutingErrorMessage(exception);
        }
        /// <summary>
        /// Method returns solver error message string
        /// </summary>
        /// <param name="res"></param>
        /// <returns></returns>
        public static string FormatSolverErrorMsg(SolveResult res)
        {
            StringBuilder messageSb = new StringBuilder();

            foreach (ServerMessage msg in res.Messages)
            {
                if (msg.Type == ServerMessageType.Error || msg.Type == ServerMessageType.Warning)
                {
                    messageSb.Append(_FixMessageText(msg.Text));
                }
            }

            // Replace guids with names in message.
            var messageWithNames = GuidsReplacer.ReplaceGuids(messageSb.ToString(), App.Current.Project);

            return(messageWithNames);
        }