private static void AdicionalMeiaPernoiteOcorrenciaWS(Entities.Ocorrencia ocorrencia, DT_CUSTO_ADICIONAL_FRETE_HBSIS_RequestIntegracaoOcorrencia ocorrenciaWS) { AdicionalMeiaPernoite adicionalMeiaPernoite = (AdicionalMeiaPernoite)ocorrencia; ocorrenciaWS.Codigo = adicionalMeiaPernoite.Codigo; ocorrenciaWS.Nome = adicionalMeiaPernoite.Nome; ocorrenciaWS.HouveDivergencia = adicionalMeiaPernoite.HouveDivergencia.ToString(); }
public static AdicionalMeiaPernoite Processar(IEnumerable <Infra.Ocorrencia> ocorrencias, IEnumerable <Infra.Deposito> depositos, Rota rota) { _adicionalMeiaPernoite = new AdicionalMeiaPernoite(); if (rota.UnidadeNegocio != null && rota.UnidadeNegocio.DtHoraLimRestanteRetorno.HasValue && rota.UnidadeNegocio.QtQuilometroRestante.HasValue) { bool validacaoDistanciaMotoristaDeposito = true; double qtMetrosRestante = Convert.ToDouble(rota.UnidadeNegocio.QtQuilometroRestante.Value * 1000); var ultimaOcorrenciaAntesDoHorarioLimite = ocorrencias .Where(ocorrencia => ocorrencia.IdOcorrencia != (short)TipoOcorrencia.ChegadaRevenda && ocorrencia.DtInclusao.TimeOfDay <= rota.UnidadeNegocio.DtHoraLimRestanteRetorno.Value.TimeOfDay) .OrderByDescending(ocorrencia => ocorrencia.DtInclusao) .First(); foreach (var deposito in depositos) { (double distanciaMetros, int tempo) = Coordenada.Distancia(Convert.ToDouble(ultimaOcorrenciaAntesDoHorarioLimite.NrLatitude), Convert.ToDouble(ultimaOcorrenciaAntesDoHorarioLimite.NrLongitude), Convert.ToDouble(deposito.PontoInteresse.NrLatitude), Convert.ToDouble(deposito.PontoInteresse.NrLongitude)); if (deposito.IdAtivo && distanciaMetros <= qtMetrosRestante) { validacaoDistanciaMotoristaDeposito = false; break; } } var divergenciaDiaria = DivergenciaDiariaOcorrencia.Processar(rota); _adicionalMeiaPernoite.HouveDivergencia = Convert.ToInt16(validacaoDistanciaMotoristaDeposito && divergenciaDiaria.QuantidadeDiariaRealizada > 0); } return(_adicionalMeiaPernoite); }