Beispiel #1
0
        public IHttpActionResult PostPrecoCorrido([FromBody] CalculoCorridaDTO model)
        {
            var valorTotal = CalculaPrecoCorrida(model);

            // Return
            return(Ok(valorTotal));
        }
Beispiel #2
0
        private static PrecoCorridaDTO CalculaPrecoCorrida(CalculoCorridaDTO model)
        {
            //valor minimo
            //valor do ponto de coleta
            //valor por ponto de entrega
            //valor por km rodado
            //valor de espera(Mais de 10 minutos é cobrado)

            // Busca tarifa cliente
            var tarifa = new TarifaRepositorio().BuscaTarificaCorrida(model.TipoVeiculo);

            // Variaveis Preco
            var valaorPadrao          = Double.Parse(tarifa.ValorContrato?.ToString() ?? "0");
            var valorPontoColeta      = Double.Parse(tarifa.decValorPontoColeta?.ToString() ?? "0");
            var valorPontoEntrega     = Double.Parse(tarifa.decValorPontoExcedente?.ToString() ?? "0");
            var valorEspera           = Double.Parse(tarifa.decValorMinutoParado?.ToString() ?? "0");
            var valorKMAdc            = Double.Parse(tarifa.ValorKMAdicional?.ToString() ?? "0");
            var quantidadeDestinos    = model.Localizacao.Count() - 1;
            var valorPorMinutosEspera = model.MinutosEspera > 10 ? valorEspera * model.MinutosEspera : 0;

            // Distancia de KM
            var googleAPI = new GoogleApiUtil(ConfigurationManager.AppSettings["GoogleApiKey"]);

            // Calcula distancia
            double distanciaMetros = 0;

            // Percorre todas localizacoes
            for (int i = 0; i < model.Localizacao.Length; i++)
            {
                // Localizacoes
                var origem = model.Localizacao[i];

                if (model.Localizacao.Length <= i + 1)
                {
                    break;
                }

                var destino = model.Localizacao[i + 1];

                distanciaMetros += googleAPI.BuscaDistanciaMatrix(new BHJet_CoreGlobal.GoogleUtil.Model.GeoLocalizacaoMatrixModel()
                {
                    Origem = new BHJet_CoreGlobal.GoogleUtil.Model.GeoLocalizacaoModel()
                    {
                        Latitude  = origem.Latitude,
                        Longitude = origem.Longitude
                    },
                    Destino = new BHJet_CoreGlobal.GoogleUtil.Model.GeoLocalizacaoModel()
                    {
                        Latitude  = destino.Latitude,
                        Longitude = destino.Longitude
                    }
                }) ?? 0;
            }

            // Calculo de KM
            double distanciaKM = distanciaMetros.MetroParaKM();

            // Validacao
            if (distanciaKM == 0)
            {
                throw new NullReferenceException("Não foi possível calcular o preço da corrida. Tente novamente mais tarde.");
            }

            // Corrida simples (D1) ou complexa (D+2)
            quantidadeDestinos = quantidadeDestinos >= 2 ? quantidadeDestinos - 1 : 0;

            // Total calculado
            var TOTALCORRIDA = valorPontoColeta + (valorPontoEntrega * quantidadeDestinos) + (valorKMAdc * distanciaKM) + valorPorMinutosEspera;

            // Total
            if (TOTALCORRIDA < valaorPadrao)
            {
                TOTALCORRIDA = valaorPadrao;
            }

            // Return
            return(new PrecoCorridaDTO()
            {
                Preco = TOTALCORRIDA,
                QuantidadeKM = distanciaKM
            });
        }
Beispiel #3
0
 public PrecoCorridaDTO CalculoPrecoCorrida(CalculoCorridaDTO filtro)
 {
     return(this.Post <CalculoCorridaDTO, PrecoCorridaDTO>(new Uri($"{ServicoRotas.Base}{ServicoRotas.Corrida.GetPreco}"), filtro));
 }