public IHttpActionResult PostPrecoCorrido([FromBody] CalculoCorridaDTO model) { var valorTotal = CalculaPrecoCorrida(model); // Return return(Ok(valorTotal)); }
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 }); }
public PrecoCorridaDTO CalculoPrecoCorrida(CalculoCorridaDTO filtro) { return(this.Post <CalculoCorridaDTO, PrecoCorridaDTO>(new Uri($"{ServicoRotas.Base}{ServicoRotas.Corrida.GetPreco}"), filtro)); }