Пример #1
0
        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);
                        }
                    }
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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());
        }
Пример #4
0
        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);
                }
            }
        }
Пример #5
0
        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);
                }
            }
        }
Пример #6
0
        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;
            }
        }