private static void DivergenciaPernoiteOcorrenciaWS(Entities.Ocorrencia ocorrencia, DT_CUSTO_ADICIONAL_FRETE_HBSIS_RequestIntegracaoOcorrencia ocorrenciaWS) { DivergenciaPernoite divergenciaPernoite = (DivergenciaPernoite)ocorrencia; ocorrenciaWS.Codigo = divergenciaPernoite.Codigo; ocorrenciaWS.Nome = divergenciaPernoite.Nome; ocorrenciaWS.QuantidadePernoitePrevista = divergenciaPernoite.QuantidadePrevista.ToString(); ocorrenciaWS.QuantidadePernoiteRealizada = divergenciaPernoite.QuantidadeRealizada.ToString(); }
public static DivergenciaPernoite Processar(Rota rota, IEnumerable <Infra.Ocorrencia> ocorrenciasRepouso, IEnumerable <Deposito> depositos) { DivergenciaPernoite divergenciaPernoite = new DivergenciaPernoite(); int quantidadeRealizada = DivergenciaDiariaOcorrencia.Processar(rota).QuantidadeDiariaRealizada - 1; int quantidadePrevista = DivergenciaDiariaOcorrencia.Processar(rota).QuantidadeDiariaPrevista - 1; var pernoites = ObtemPernoites(ocorrenciasRepouso); foreach (var pernoite in pernoites) { decimal latInicioRepouso = pernoite.GetCoordenadasInicioRepouso().lat; decimal lonInicioRepouso = pernoite.GetCoordenadasInicioRepouso().lon; decimal latFimRepouso = pernoite.GetCoordenadasFimRepouso().lat; decimal lonFimRepouso = pernoite.GetCoordenadasFimRepouso().lon; foreach (var deposito in depositos) { if (deposito.PontoInteresse != null) { int metrosRaioDeposito = deposito.PontoInteresse.QtMetrosRaio; decimal latDeposito = deposito.PontoInteresse.NrLatitude; decimal lonDeposito = deposito.PontoInteresse.NrLongitude; (double distInicioRepousoAoDeposito, _) = Coordenada.DistanciaLinhaReta(latInicioRepouso, lonInicioRepouso, latDeposito, lonDeposito); (double distFimRepousoAoDeposito, _) = Coordenada.DistanciaLinhaReta(latFimRepouso, lonFimRepouso, latDeposito, lonDeposito); // Se o motorista estiver dentro do raio de algum dos CDs // (ou seja, dormiu em um CD), // então é desconsiderada a pernoite referente a esse repouso. if (distInicioRepousoAoDeposito <= metrosRaioDeposito || distFimRepousoAoDeposito <= metrosRaioDeposito) { quantidadeRealizada--; break; } } } } divergenciaPernoite.QuantidadeRealizada = quantidadeRealizada < 0 ? 0 : quantidadeRealizada; divergenciaPernoite.QuantidadePrevista = quantidadePrevista < 0 ? 0 : quantidadePrevista; // Não envia o indicador ao WS quando os dias realizados estiverem dentro do previsto if (divergenciaPernoite.QuantidadeRealizada <= divergenciaPernoite.QuantidadePrevista) { divergenciaPernoite.SetExibirOcorrenciaNoXml(false); } return(divergenciaPernoite); }