public void CancelarDetalhesDuplicados(DetalheViagem viagemAgendada) { var detalhesACancelarBancoDados = DataBaseConnection.HandleExecution(_listarViagensASeremCanceladasQuery.Execute, viagemAgendada).ToList(); var detalhesParaCancelar = new List <DetalheViagem>(); detalhesParaCancelar.AddRange(_retorno.ViagensParaRetorno.Where(c => c.StatusDetalheViagem == StatusDetalheViagem.Criada)); foreach (var dv in detalhesACancelarBancoDados) { if (!_retorno.ViagensParaRetorno.Any(c => c.Id == dv.Id)) { detalhesParaCancelar.Add(dv); } } foreach (var detalheViagem in detalhesParaCancelar) { if (detalheViagem.StatusDetalheViagemId != (int)StatusDetalheViagem.CanceladaDuplicidade) { detalheViagem.StatusDetalheViagemId = (int)StatusDetalheViagem.CanceladaDuplicidade; detalheViagem.DataCancelamento = DateTime.Now; if (detalheViagem.PracaId != viagemAgendada.PracaId) { if (!_retorno.ViagensParaRetorno.Any(c => c == detalheViagem)) { _retorno.ViagensParaRetorno.Add(detalheViagem); } } } } }
private DetalheViagem AvaliarSituacaoValePedagio(List <DetalheViagem> listaDetalheViagens) { Log.Info($"Validando o valor da passagem com o valor agendado para o detalheTrnId: {_passagemPendenteEdi.DetalheTrnId}"); DetalheViagem detalheViagem = null; foreach (var viagem in listaDetalheViagens) { if (_passagemPendenteEdi.Valor != viagem.ValorPassagem) { continue; } detalheViagem = viagem; break; } if (detalheViagem == null) { if (!AvaliarSituacaoRecusa()) { var v = listaDetalheViagens.FirstOrDefault(); throw new EdiTransacaoParceiroException(CodigoRetornoTransacaoTRF.ValorNaoCorrespondenteCAT, _passagemPendenteEdi, (v?.Id ?? 0).TryToInt()); } detalheViagem = listaDetalheViagens.FirstOrDefault(); } return(detalheViagem); }
private IList <DetalheViagem> RecriarEstruturaAgendamento(PassagemPendenteArtesp passagemPendenteArtesp) { var retorno = new List <DetalheViagem>(); var filtroParaPlacaDataPassagemETransacaoIdOriginal = new PlacaDataPassagemETransacaoIdOriginalFilter() { Placa = passagemPendenteArtesp.Placa, DataPassagem = passagemPendenteArtesp.DataPassagem, TransacaoIdOriginal = passagemPendenteArtesp.TransacaoPassagemIdAnterior }; var viagens = DataBaseConnection.HandleExecution(_viagemAgendadaOriginalQuery.Execute, filtroParaPlacaDataPassagemETransacaoIdOriginal); foreach (var agendamento in viagens) { // update retorno.Add(new DetalheViagem { Id = agendamento.Id, CodigoPracaRoadCard = agendamento.CodigoPracaRoadCard, DataCancelamento = agendamento.DataCancelamento, PracaId = agendamento.PracaId, Sequencia = agendamento.Sequencia, StatusDetalheViagemId = (int)StatusDetalheViagem.CanceladaPorReenvio, // 5 ValorPassagem = agendamento.ValorPassagem, Viagem = new Viagem() { Id = agendamento.ViagemId, CnpjEmbarcador = agendamento.CnpjEmbarcador, CodigoViagemParceiro = agendamento.CodigoViagemParceiro, Embarcador = agendamento.Embarcador } }); var detalheCopia = new DetalheViagem { Id = null, PracaId = agendamento.PracaId, CodigoPracaRoadCard = agendamento.CodigoPracaRoadCard, Sequencia = agendamento.Sequencia, ValorPassagem = agendamento.ValorPassagem, StatusDetalheViagemId = (int)StatusDetalheViagem.Criada, // 1 Viagem = new Viagem() { Id = agendamento.ViagemId, CnpjEmbarcador = agendamento.CnpjEmbarcador, CodigoViagemParceiro = agendamento.CodigoViagemParceiro, Embarcador = agendamento.Embarcador } }; retorno.Add(detalheCopia); // insert } return(retorno.ToList()); }
public void Validate() { var viagens = ObterViagemAgendada(_passagemPendenteEdi.StatusCobranca.Equals(StatusCobranca.Confirmacao)); DetalheViagem detalheConsumido = null; if (viagens != null && viagens.Any()) { var detalhesAgendamento = viagens; detalheConsumido = AvaliarSituacaoValePedagio(detalhesAgendamento); if (detalheConsumido != null) { ValePedagioEdiDto.ViagensParaRetorno.Add(detalheConsumido); } } var ehTransacaoProvisoria = _passagemPendenteEdi.StatusCobranca.Equals(StatusCobranca.Provisoria); if (detalheConsumido != null) { if (ehTransacaoProvisoria) { if (detalheConsumido.StatusDetalheViagem != StatusDetalheViagem.Criada) { throw new EdiDomainException(TransacaoProvisoriaInvalida, _passagemPendenteEdi); } detalheConsumido.StatusDetalheViagemId = (int)StatusDetalheViagem.AguardandoTransacaoDefinitiva; } else { if (detalheConsumido.StatusDetalheViagem == StatusDetalheViagem.Utilizada) { throw new DomainException(TransacaoInvalida); } detalheConsumido.StatusDetalheViagemId = (int)StatusDetalheViagem.Utilizada; } if (_passagemPendenteEdi.StatusCobranca != StatusCobranca.Confirmacao) { CancelarDetalhesDuplicados(detalheConsumido); } } }
public void CancelarDetalhesDuplicados(DetalheViagem viagemAgendada) { var listarViagensASeremCanceladas = new ListarViagensASeremCanceladasQuery(); var viagensACancelar = listarViagensASeremCanceladas.Execute(viagemAgendada); foreach (var viagem in viagensACancelar) { if (viagem.Id != viagemAgendada.Id) { if (viagem.StatusDetalheViagemId == (int)StatusDetalheViagem.CanceladaDuplicidade) { return; } viagem.StatusDetalheViagemId = (int)StatusDetalheViagem.CanceladaDuplicidade; viagem.DataCancelamento = DateTime.Now; //save ValePedagioEdiDto.ViagensParaRetorno.Add(viagem); } } }
private MotivoNaoCompensado UtilizarViagensAgendadas(PassagemPendenteArtesp passagemPendenteArtesp, out int?viagemNaoCompensadaId) { long?viagemId = null; viagemNaoCompensadaId = null; if (_retorno.ViagensParaRetorno != null && _retorno.ViagensParaRetorno.Any()) { viagemId = _retorno.ViagensParaRetorno.FirstOrDefault().Viagem.Id; } var listaViagens = ObterViagensAgendadas(passagemPendenteArtesp, viagemId); if (_retorno.ViagensParaRetorno != null && _retorno.ViagensParaRetorno.Any()) { listaViagens.AddRange(_retorno.ViagensParaRetorno.Where(c => c.StatusDetalheViagem == StatusDetalheViagem.Criada && c.PracaId == passagemPendenteArtesp.Praca.Id)); } var motivoNaoCompensado = MotivoNaoCompensado.SemMotivoNaoCompensado; DetalheViagem viagemAgendada = null; if (listaViagens != null && listaViagens.Count > 0) { if (passagemPendenteArtesp.NumeroReenvio > 0) { var qtdRecusasValePedagio = DataBaseConnection.HandleExecution(_numeroVezesRecusadoParamValePedagioFinanceiroQuery.Execute); var passagemOriginal = DataBaseConnection.HandleExecution(_passagemImediatamenteAnteriorQuery.Execute, passagemPendenteArtesp); if (passagemOriginal != null && passagemPendenteArtesp.NumeroReenvio > passagemOriginal.NumeroReenvio) { viagemAgendada = listaViagens.FirstOrDefault(x => x.ValorPassagem == passagemPendenteArtesp.Valor); if (viagemAgendada == null && passagemPendenteArtesp.NumeroReenvio > qtdRecusasValePedagio) { viagemAgendada = listaViagens.FirstOrDefault(); } else if (viagemAgendada == null) { viagemNaoCompensadaId = listaViagens.FirstOrDefault().Viagem.Id.TryToInt(); return(MotivoNaoCompensado.ValorInvalido); } } else { viagemNaoCompensadaId = listaViagens.FirstOrDefault().Viagem.Id.TryToInt(); return(MotivoNaoCompensado.ValorInvalido); } } else { viagemAgendada = listaViagens.FirstOrDefault(x => x.ValorPassagem == passagemPendenteArtesp.Valor); if (viagemAgendada == null) { throw new TransacaoParceiroException(MotivoNaoCompensado.ValorInvalido, listaViagens.FirstOrDefault().Viagem.Id.TryToInt(), passagemPendenteArtesp); } } } try { if (viagemAgendada == null) { if (_retorno.ViagensParaRetorno.Any(c => c.StatusDetalheViagem == StatusDetalheViagem.Criada)) { return(motivoNaoCompensado); } return(motivoNaoCompensado); } if (viagemAgendada.StatusDetalheViagemId == (int)StatusDetalheViagem.Utilizada) { throw new DomainException("Detalhe de Viagem já possuí transação."); } viagemAgendada.StatusDetalheViagemId = (int)(StatusDetalheViagem.Utilizada); if (!_retorno.ViagensParaRetorno.Any(c => c == viagemAgendada)) { _retorno.ViagensParaRetorno.Add(viagemAgendada); // save } CancelarDetalhesDuplicados(viagemAgendada); passagemPendenteArtesp.ValePedagio = true; return(motivoNaoCompensado); } catch (Exception ex) { if (listaViagens != null) { var ret = listaViagens.FirstOrDefault(); if (ret != null) { Log.Debug(string.Format("Erro ao atribuir transação à viagem id:{0}", ret.Id), ex); } } if (listaViagens != null) { var ret = listaViagens.FirstOrDefault(); if (ret != null) { throw new DomainException(string.Format("Erro ao atribuir transação à viagem id:{0}", ret.Id)); } } throw; } }