public PartialViewResult CalcularCusto(string id)
        {
            ViewBag.Title = Resources.MapaController_HttpGet_Action_CalcularCusto_ViewBag_Title; //"Calcular custo para o trajeto:"

            var request = new EncontrarMapaPorRequest()
            {
                Mapa = new MapaDto()
                {
                    Id = id
                }
            };
            var response = _mapaServices.EncontrarMapaPor(request);

            if (response.Success)
            {
                ViewBag.MessageType = "alert-warning";
                ViewBag.Message     = Resources.MapaController_HttpGet_Action_CalcularCusto_ViewBag_Message;//"Utilize esta ferramenta para calcular o menor trajeto e seu custo.";

                var origens  = response.Mapa.Rotas.ConvertToListRotaOrigemViewMode();
                var destinos = response.Mapa.Rotas.ConvertToListRotaDestinoViewMode();

                IFormatProvider culture = Thread.CurrentThread.CurrentCulture;

                var model = new CalculoCustoViewModel()
                {
                    Id               = id,
                    NomeMapa         = response.Mapa.NomeMapa,
                    Origens          = origens,
                    Destinos         = destinos,
                    AutonomiaVeiculo = (0m).ToString("n", culture),
                    ValorCombustivel = (0m).ToString("n", culture),
                };

                return(PartialView("CalcularCustoPartialView", model));
            }
            else
            {
                ViewBag.MessageType = "alert-danger";
                ViewBag.Message     = response.Message;

                return(PartialView("SucessoPartialView"));
            }
        }
        public PartialViewResult CalcularCusto(CalculoCustoViewModel model, FormCollection forms)
        {
            ViewBag.Title = Resources.MapaController_HttpPost_Action_CalcularCusto_ViewBag_Title;//"Calculadora de Rota e Custo:";

            model.Origem  = forms["Origens"];
            model.Destino = forms["Destinos"];

            //Fix to compromise the calculation if one of the states was not set
            //Selecione
            if (model.Origem.Equals(Resources.SelectList_Null_Item))
            {
                model.Origem = string.Empty;
            }

            //Selecione
            if (model.Destino.Equals(Resources.SelectList_Null_Item))
            {
                model.Destino = string.Empty;
            }

            var request = new CalcularMelhorRotaRequest()
            {
                Problema = new ProblemaDto()
                {
                    Id               = model.Id,
                    NomeMapa         = model.NomeMapa,
                    Origem           = model.Origem,
                    Destino          = model.Destino,
                    AutonomiaVeiculo = model.AutonomiaVeiculo,
                    ValorCombustivel = model.ValorCombustivel,
                }
            };
            var response = _mapaServices.CalcularRota(request);

            if (response.Success)
            {
                ViewBag.MessageType = "alert-success";
                ViewBag.Message     = response.Message;

                var caminho = new StringBuilder();
                foreach (var state in response.MelhorCaminho)
                {
                    caminho.Append(state);
                    caminho.Append(" > ");
                }

                var resultado = new ResultadoCustoViewModel()
                {
                    Id         = model.Id,
                    NomeMapa   = model.NomeMapa,
                    Caminho    = caminho.ToString(),
                    CustoTotal = response.CustoTotal
                };
                return(PartialView("ResultadoCustoPartialView", resultado));
            }
            else
            {
                ViewBag.Title = Resources.MapaController_HttpPost_Action_CalcularCusto_ViewBag_Title;//"Calculadora de Rota e Custo:";


                response.Rules.ForEach(x => ModelState.AddModelError(x.Key, x.Value));
                var requestMapa = new EncontrarMapaPorRequest()
                {
                    Mapa = new MapaDto()
                    {
                        Id = model.Id, NomeMapa = model.NomeMapa
                    }
                };
                var responseMapa = _mapaServices.EncontrarMapaPor(requestMapa);
                if (responseMapa.Success)
                {
                    ViewBag.MessageType = "alert-warning";
                    ViewBag.Message     = response.Message;

                    var origens  = responseMapa.Mapa.Rotas.ConvertToListRotaOrigemViewMode();
                    var destinos = responseMapa.Mapa.Rotas.ConvertToListRotaDestinoViewMode();
                    model.Destinos = destinos;
                    model.Origens  = origens;
                    return(PartialView("CalcularCustoPartialView", model));
                }
                else
                {
                    ViewBag.MessageType = "alert-danger";
                    ViewBag.Message     = response.Message;

                    return(PartialView("SucessoPartialView"));
                }
            }
        }