Beispiel #1
0
        /// <summary>
        /// Atualiza a transação apos o recebimento
        /// </summary>
        public void FinalizarTransacao(CapptaRetornoRecebimento dados)
        {
            using (var transaction = new GDATransaction())
            {
                try
                {
                    transaction.BeginTransaction();

                    if (dados.Estorno)
                    {
                        FinalizarTransacaoEstorno(transaction, dados);
                    }
                    else
                    {
                        FinalizarTransacaoRecebimento(transaction, dados);
                    }

                    transaction.Commit();
                    transaction.Close();
                }
                catch
                {
                    transaction.Rollback();
                    transaction.Close();

                    throw;
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Finaliza uma transação de estorno
        /// </summary>
        private void FinalizarTransacaoEstorno(GDASession session, CapptaRetornoRecebimento dados)
        {
            //Insere a transação de estorno
            if (dados.Sucesso)
            {
                //Necessario usar uma transação a parte, pois o recebimento na cappta ja foi realizado e caso ocorra algum problema na finalização no webglass
                //o mesmo não sera cancelado na cappta, sendo assim tem que ficar registrado no webglass que o recibimento ocorreu com sucesso na cappta
                //apesar de ter ocorrido erro na finalização no webglass
                Instance.InsertComTransacao(new TransacaoCapptaTef()
                {
                    IdReferencia       = dados.IdReferencia,
                    TipoRecebimento    = dados.TipoRecebimento,
                    CheckoutGuid       = dados.CheckoutGuid,
                    CodigoControle     = dados.Recebimentos[0].CodigoAdministrativo,
                    ComprovanteLoja    = dados.Recebimentos[0].Comprovantes.ComprovanteLoja,
                    ComprovanteCliente = dados.Recebimentos[0].Comprovantes.ComprovanteCliente
                });
            }

            #region Cancela o recebimento no webglass

            if (dados.Sucesso || dados.MensagemErro == "Falha ao realizar estorno. Transação não encontrada ou não autorizada.")
            {
                switch (dados.TipoRecebimento)
                {
                case Helper.UtilsFinanceiro.TipoReceb.LiberacaoAVista:
                {
                    if (LiberarPedidoDAO.Instance.ObterSituacao(session, dados.IdReferencia) == LiberarPedido.SituacaoLiberarPedido.Cancelado)
                    {
                        return;
                    }

                    var idNf = LiberarPedidoDAO.Instance.ObterIdNf(session, dados.IdReferencia);

                    if (idNf > 0)
                    {
                        var situacaoNf = NotaFiscalDAO.Instance.ObtemSituacao(session, (uint)idNf);

                        if (situacaoNf == (int)NotaFiscal.SituacaoEnum.Autorizada)
                        {
                            NFeUtils.EnviaXML.EnviaCancelamentoEvt((uint)idNf, "Cancelamento da transação TEF");
                        }
                        else if (situacaoNf == (int)NotaFiscal.SituacaoEnum.Aberta || situacaoNf == (int)NotaFiscal.SituacaoEnum.FalhaEmitir)
                        {
                            NFeUtils.EnviaXML.EnviaInutilizacao((uint)idNf, "Cancelamento da transação TEF");
                        }
                    }

                    LiberarPedidoDAO.Instance.CancelarLiberacao(session, (uint)dados.IdReferencia, "Cancelamento da transação TEF", DateTime.Now, false, false);

                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.Acerto:
                {
                    if (AcertoDAO.Instance.ObtemValorCampo <Situacao>(session, "Situacao", "IdAcerto = " + dados.IdReferencia) == Situacao.Ativo)
                    {
                        ContasReceberDAO.Instance.CancelarAcerto(session, (uint)dados.IdReferencia, "Cancelamento da transação TEF", DateTime.Now, false, false);
                    }

                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.ChequeDevolvido:
                {
                    if (AcertoChequeDAO.Instance.ObtemValorCampo <Situacao>(session, "Situacao", "IdAcertoCheque = " + dados.IdReferencia) == Situacao.Ativo)
                    {
                        AcertoChequeDAO.Instance.CancelarAcertoCheque((uint)dados.IdReferencia, "Cancelamento da transação TEF", DateTime.Now, false, false);
                    }

                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.ContaReceber:
                {
                    if (ContasReceberDAO.Instance.ObtemValorCampo <bool>(session, "Recebida", "idContaR = " + dados.IdReferencia))
                    {
                        ContasReceberDAO.Instance.CancelarConta((uint)dados.IdReferencia, "Cancelamento da transação TEF", DateTime.Now, false, false);
                    }

                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.SinalPedido:
                {
                    if (SinalDAO.Instance.ObtemValorCampo <Situacao>(session, "Situacao", "IdSinal = " + dados.IdReferencia) == Situacao.Ativo)
                    {
                        SinalDAO.Instance.Cancelar(session, (uint)dados.IdReferencia, null, false, false, "Cancelamento da transação TEF", DateTime.Now, false, false);
                    }

                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.Obra:
                {
                    var situacao = ObraDAO.Instance.ObtemSituacao(session, (uint)dados.IdReferencia);

                    if (situacao == Obra.SituacaoObra.Confirmada || situacao == Obra.SituacaoObra.Finalizada)
                    {
                        ObraDAO.Instance.CancelaObra((uint)dados.IdReferencia, "Cancelamento da transação TEF", DateTime.Now, false, false);
                    }

                    break;
                }

                default:
                {
                    break;
                }
                }
            }

            #endregion
        }
Beispiel #3
0
        /// <summary>
        /// Finaliza uma transação de recebimento
        /// </summary>
        private void FinalizarTransacaoRecebimento(GDASession session, CapptaRetornoRecebimento dados)
        {
            if (dados.Sucesso)
            {
                //Insere as transações
                foreach (var receb in dados.Recebimentos)
                {
                    //Necessario usar uma transação a parte, pois o recebimento na cappta ja foi realizado e caso ocorra algum problema na finalização no webglass
                    //o mesmo não sera cancelado na cappta, sendo assim tem que ficar registrado no webglass que o recibimento ocorreu com sucesso na cappta
                    //apesar de ter ocorrido erro na finalização no webglass
                    Instance.InsertComTransacao(new TransacaoCapptaTef()
                    {
                        IdReferencia       = dados.IdReferencia,
                        TipoRecebimento    = dados.TipoRecebimento,
                        CheckoutGuid       = dados.CheckoutGuid,
                        CodigoControle     = receb.CodigoAdministrativo,
                        ComprovanteLoja    = receb.Comprovantes.ComprovanteLoja,
                        ComprovanteCliente = receb.Comprovantes.ComprovanteCliente
                    });

                    #region Atualiza o numero de autorização do cartão nos recebimentos

                    switch (dados.TipoRecebimento)
                    {
                    case Helper.UtilsFinanceiro.TipoReceb.LiberacaoAVista:
                    {
                        PagtoLiberarPedidoDAO.Instance.AtualizarNumAutCartao(session, dados.IdReferencia, receb.PagtoIndex, receb.CodigoAdministrativo);
                        break;
                    }

                    case Helper.UtilsFinanceiro.TipoReceb.Acerto:
                    {
                        PagtoAcertoDAO.Instance.AtualizarNumAutCartao(session, dados.IdReferencia, receb.PagtoIndex, receb.CodigoAdministrativo);
                        break;
                    }

                    case Helper.UtilsFinanceiro.TipoReceb.ChequeDevolvido:
                    {
                        PagtoAcertoChequeDAO.Instance.AtualizarNumAutCartao(session, dados.IdReferencia, receb.PagtoIndex, receb.CodigoAdministrativo);
                        break;
                    }

                    case Helper.UtilsFinanceiro.TipoReceb.ContaReceber:
                    {
                        PagtoContasReceberDAO.Instance.AtualizarNumAutCartao(session, dados.IdReferencia, receb.CodigoAdministrativo);
                        break;
                    }

                    case Helper.UtilsFinanceiro.TipoReceb.SinalPedido:
                    {
                        PagtoSinalDAO.Instance.AtualizarNumAutCartao(session, dados.IdReferencia, receb.PagtoIndex, receb.CodigoAdministrativo);
                        break;
                    }

                    case Helper.UtilsFinanceiro.TipoReceb.Obra:
                    {
                        PagtoObraDAO.Instance.AtualizarNumAutCartao(session, dados.IdReferencia, receb.PagtoIndex, receb.CodigoAdministrativo);
                        break;
                    }

                    default:
                    {
                        break;
                    }
                    }

                    #endregion
                }

                #region Realiza a finalização dos recebimentos

                switch (dados.TipoRecebimento)
                {
                case Helper.UtilsFinanceiro.TipoReceb.LiberacaoAVista:
                {
                    LiberarPedidoDAO.Instance.FinalizarPreLiberacaoAVista(session, dados.IdReferencia);
                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.Acerto:
                {
                    dados.MensagemRetorno = ContasReceberDAO.Instance.FinalizarPreRecebimentoAcerto(session, dados.IdReferencia);
                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.ChequeDevolvido:
                {
                    ChequesDAO.Instance.FinalizarPreQuitacaoChequeDevolvido(session, dados.IdReferencia);
                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.ContaReceber:
                {
                    dados.MensagemRetorno = ContasReceberDAO.Instance.FinalizarPreRecebimentoConta(session, dados.IdReferencia);
                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.SinalPedido:
                {
                    dados.MensagemRetorno = SinalDAO.Instance.FinalizarPreRecebimentoSinalPagamentoAntecipado(session, dados.IdReferencia);
                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.Obra:
                {
                    ObraDAO.Instance.FinalizarPrePagamentoVista(session, dados.IdReferencia, string.Empty);
                    break;
                }

                default:
                    break;
                }

                #endregion
            }
            else
            {
                #region Cancelamento do recebimento

                //Caso ocorra algum erro ao receber na cappta, seja por falta de limite ou erro cancela o pre recebimento no webglass

                switch (dados.TipoRecebimento)
                {
                case Helper.UtilsFinanceiro.TipoReceb.LiberacaoAVista:
                {
                    LiberarPedidoDAO.Instance.CancelarPreLiberacaoAVista(session, DateTime.Now, dados.IdReferencia, string.Format("Falha no recebimento TEF. Motivo: {0}", dados.MensagemErro));
                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.Acerto:
                {
                    ContasReceberDAO.Instance.CancelarPreRecebimentoAcerto(session, DateTime.Now, dados.IdReferencia, string.Format("Falha no recebimento TEF. Motivo: {0}", dados.MensagemErro));
                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.ChequeDevolvido:
                {
                    ChequesDAO.Instance.CancelarPreQuitacaoChequeDevolvido(session, DateTime.Now, dados.IdReferencia, string.Format("Falha no recebimento TEF. Motivo: {0}", dados.MensagemErro));
                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.ContaReceber:
                {
                    ContasReceberDAO.Instance.CancelarPreRecebimentoConta(session, DateTime.Now, dados.IdReferencia, string.Format("Falha no recebimento TEF. Motivo: {0}", dados.MensagemErro));
                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.SinalPedido:
                {
                    SinalDAO.Instance.CancelarPreRecebimentoSinalPagamentoAntecipado(session, dados.IdReferencia, string.Format("Falha no recebimento TEF. Motivo: {0}", dados.MensagemErro));
                    break;
                }

                case Helper.UtilsFinanceiro.TipoReceb.Obra:
                {
                    ObraDAO.Instance.CancelarPrePagamentoVista(session, dados.IdReferencia, string.Format("Falha no recebimento TEF. Motivo: {0}", dados.MensagemErro));
                    break;
                }

                default:
                {
                    break;
                }
                }

                #endregion
            }
        }