public AssinaturaAnuidade GetAssinaturaAnuidadeByReference(string reference)
        {
            List <DbParameter> _parametros = new List <DbParameter>();

            query = @"SELECT AssinaturaAnuidadeId, AssociadoId, ValorAnuidadeId, AnoInicio, AnoTermino, 
                        PercentualDesconto, TipoDesconto, Valor, DtVencimentoPagamento, DtAssinatura, 
                        DtAtualizacao, Ativo, CodePS, DtCodePS, Reference, EmProcessoPagamento,
                        DtInicioProcessamento, PagamentoIsento, PagamentoIsento as PagamentoIsentoBD, DtIsencao, ObservacaoIsencao 
                    FROM dbo.AD_Assinatura_Anuidade 
                    WHERE Reference = @reference ";

            // Definição do parâmetros da consulta:
            SqlParameter paramRef = new SqlParameter()
            {
                ParameterName = "@reference", Value = reference
            };

            _parametros.Add(paramRef);
            // Fim da definição dos parâmetros

            // Define o banco de dados que será usando:
            CommandSql cmd = new CommandSql(strConnSql, query, EnumDatabaseType.SqlServer, parametros: _parametros);

            // Obtém os dados do banco de dados:
            AssinaturaAnuidade assinaturaAnuidade = GetCollection <AssinaturaAnuidade>(cmd)?.FirstOrDefault <AssinaturaAnuidade>();

            // Log da consulta:
            string log = logRep.SetLogger(className + "/GetAssinaturaAnuidadeByReference",
                                          "SELECT", "ASSINATURA_ANUIDADE", 0, query, assinaturaAnuidade != null ? "SUCESSO" : "0");

            // Fim Log

            return(assinaturaAnuidade);
        }
 public string Update(int id, AssinaturaAnuidade assinaturaAnuidade)
 {
     return(_assinaturaAnuidadeRepository.Update(id, assinaturaAnuidade));
 }
 public string Insert(AssinaturaAnuidade assinaturaAnuidade)
 {
     return(_assinaturaAnuidadeRepository.Insert(assinaturaAnuidade));
 }
        public string Save(AssinaturaAnuidadeDao a)
        {
            int     _percentualDesconto = 0;
            string  _tipoDesconto       = "0";
            decimal _valor = a.Valor;

            _valor = Functions.CalcularDescontoAnuidade(a);

            // Isenção concedida pela Secretaria:
            if (a.PagamentoIsento == true)
            {
                a.TipoAnuidade      = 1; // isenção para somente para uma anuidade
                _percentualDesconto = 100;
                _tipoDesconto       = "3";

                if (a.PagamentoIsentoBD == false)
                {
                    a.DtCodePS = DateTime.Now; //Atualizo a data para a data da isenção
                }
                if (a.Reference == "")
                {
                    a.Reference = $"ISENTO-A{a.Exercicio}{a.DtCodePS.GetHashCode()}".Replace("-", "");
                }

                if (a.CodePS == "")
                {
                    a.CodePS = $"Isento Pagamento Anuidade {a.Exercicio}{a.DtCodePS.GetHashCode()}".Replace("-", "");
                }
            }
            else
            {
                // Desconto aplicado para Membros CONFI:
                if (a.MembroConfi == true)
                {
                    _percentualDesconto = 100;
                    _tipoDesconto       = "4";

                    if (a.AssinaturaAnuidadeId == 0)
                    {
                        DateTime _date = DateTime.Now;

                        a.CodePS                = "";
                        a.DtCodePS              = _date;
                        a.Reference             = "CONFI-" + $"A{a.Exercicio}{_date.GetHashCode()}".Replace("-", "");
                        a.EmProcessoPagamento   = true;
                        a.DtInicioProcessamento = _date;
                    }
                }
                else
                {
                    // O Desconto somente é aplicado para a Assinatura de Um Ano:
                    if (a.TipoAnuidade == 1)
                    {
                        if (a.MembroDiretoria == true)
                        {
                            _percentualDesconto = 100;
                            _tipoDesconto       = "1";
                        }

                        if (_percentualDesconto == 0)
                        {
                            if (a.AnuidadeAtcOk == true)
                            {
                                _percentualDesconto = 50;
                                _tipoDesconto       = "2";
                            }
                        }
                    }
                }
            }

            AssinaturaAnuidade assinaturaAnuidade = new AssinaturaAnuidade
            {
                AssinaturaAnuidadeId = a.AssinaturaAnuidadeId,
                AssociadoId          = a.AssociadoId,
                ValorAnuidadeId      = a.ValorAnuidadeId,
                AnoInicio            = a.AnoInicio == 0 ? a.Exercicio : a.AnoInicio,
                AnoTermino           = a.AnoTermino == 0 ? a.Exercicio + a.TipoAnuidade : a.AnoTermino,
                PercentualDesconto   = _percentualDesconto,
                TipoDesconto         = _tipoDesconto,
                Valor = _valor,
                DtVencimentoPagamento = a.DtVencimentoPagamento,
                DtAssinatura          = a.DtAssinatura,
                CodePS                = a.CodePS,
                DtCodePS              = a.DtCodePS,
                Reference             = a.Reference,
                EmProcessoPagamento   = a.EmProcessoPagamento,
                DtInicioProcessamento = a.DtInicioProcessamento,
                DtAtualizacao         = a.DtAtualizacao,
                Ativo             = a.Ativo,
                DtIsencao         = a.DtIsencao,
                ObservacaoIsencao = a.ObservacaoIsencao,
                PagamentoIsento   = a.PagamentoIsento,
                PagamentoIsentoBD = a.PagamentoIsentoBD
            };

            try
            {
                if (assinaturaAnuidade.AssinaturaAnuidadeId == 0)
                {
                    // assinaturaAnuidade.Reference = "A" + a.Exercicio + DateTime.Now.GetHashCode();
                    return(_assinaturaAnuidadeService.Insert(assinaturaAnuidade));
                }
                else
                {
                    return(_assinaturaAnuidadeService.Update(assinaturaAnuidade.AssinaturaAnuidadeId, assinaturaAnuidade));
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }
        public string Update(int id, AssinaturaAnuidade a)
        {
            bool   _resultado = false;
            string _msg       = "";
            string _msgIsento = "";

            using (SqlConnection connection = new SqlConnection(strConnSql))
            {
                connection.Open();

                SqlCommand     command = connection.CreateCommand();
                SqlTransaction transaction;

                // Start a local transaction.
                transaction = connection.BeginTransaction("AtualizarAssinaturaAnuidade");

                command.Connection  = connection;
                command.Transaction = transaction;

                try
                {
                    // Passou a ter isenção:
                    if (a.PagamentoIsento == true & a.PagamentoIsentoBD == false)
                    {
                        a.DtIsencao = DateTime.Now;
                    }

                    string _data = "";
                    if (a.DtInicioProcessamento != null)
                    {
                        _data = " DtInicioProcessamento = @DtInicioProcessamento, ";
                    }

                    string _data2 = "";
                    if (a.DtIsencao != null)
                    {
                        _data2 = " DtIsencao = @DtIsencao, ";
                    }

                    command.CommandText = "" +
                                          "UPDATE dbo.AD_Assinatura_Anuidade " +
                                          "SET ValorAnuidadeId = @ValorAnuidadeId, " +
                                          "   AnoInicio = @AnoInicio, AnoTermino = @AnoTermino, " +
                                          "   PercentualDesconto  = @PercentualDesconto, TipoDesconto = @TipoDesconto, " +
                                          "   Valor = @Valor, DtVencimentoPagamento = @DtVencimentoPagamento, " +
                                          "   DtAtualizacao = @DtAtualizacao, CodePS = @CodePS, DtCodePS = @DtCodePS, " +
                                          "   Reference = @Reference, EmProcessoPagamento = @EmProcessoPagamento, " +
                                          "   " + _data + "" + _data2 + "Ativo = @Ativo, PagamentoIsento = @PagamentoIsento, ObservacaoIsencao = @ObservacaoIsencao " +
                                          "WHERE AssinaturaAnuidadeId = @id";

                    command.Parameters.AddWithValue("ValorAnuidadeId", a.ValorAnuidadeId);
                    command.Parameters.AddWithValue("AnoInicio", a.AnoInicio);
                    command.Parameters.AddWithValue("AnoTermino", a.AnoTermino);
                    command.Parameters.AddWithValue("PercentualDesconto", a.PercentualDesconto);
                    command.Parameters.AddWithValue("TipoDesconto", a.TipoDesconto);
                    command.Parameters.AddWithValue("Valor", a.Valor);
                    command.Parameters.AddWithValue("DtVencimentoPagamento", a.DtVencimentoPagamento);
                    command.Parameters.AddWithValue("DtAtualizacao", DateTime.Now);
                    command.Parameters.AddWithValue("CodePS", a.CodePS);
                    command.Parameters.AddWithValue("DtCodePS", a.DtCodePS);
                    command.Parameters.AddWithValue("Reference", a.Reference);
                    command.Parameters.AddWithValue("EmProcessoPagamento", a.EmProcessoPagamento);
                    command.Parameters.AddWithValue("Ativo", a.Ativo);
                    command.Parameters.AddWithValue("PagamentoIsento ", a.PagamentoIsento);
                    command.Parameters.AddWithValue("ObservacaoIsencao ", a.ObservacaoIsencao);

                    command.Parameters.AddWithValue("id", id);

                    if (_data != "")
                    {
                        command.Parameters.AddWithValue("DtInicioProcessamento", a.DtInicioProcessamento);
                    }

                    if (_data2 != "")
                    {
                        command.Parameters.AddWithValue("DtIsencao", a.DtIsencao);
                    }

                    int x = command.ExecuteNonQuery();
                    _resultado = x > 0;

                    _msg = x > 0 ? "Atualização realizada com sucesso" : "Atualização NÃO realizada com sucesso";

                    transaction.Commit();

                    if (x > 0)
                    {
                        Recebimento recebimento = new Recebimento();

                        recebimento = new Recebimento
                        {
                            AssinaturaAnuidadeId = a.AssinaturaAnuidadeId,
                            DtVencimento         = a.DtVencimentoPagamento,
                            StatusPS             = 0,
                            GrossAmountPS        = 0,
                            DiscountAmountPS     = 0,
                            FeeAmountPS          = 0,
                            NetAmountPS          = 0,
                            ExtraAmountPS        = 0,
                            StatusFBTC           = "3",
                            OrigemEmissaoTitulo  = "2",
                            NotificationCodePS   = a.Reference,
                            Ativo = a.PagamentoIsento
                        };

                        //Avaliar se houve alteração na isenção
                        if (a.PagamentoIsento == true & a.PagamentoIsentoBD == false)
                        {
                            RecebimentoRepository recebimentoRepository = new RecebimentoRepository();
                            _msgIsento = recebimentoRepository.UpdateRecebimentoIsencao(0, recebimento);
                        }

                        // desativo os dados na tabela de pagamento:
                        if (a.PagamentoIsento == false & a.PagamentoIsentoBD == true)
                        {
                            RecebimentoRepository recebimentoRepository = new RecebimentoRepository();
                            _msgIsento = recebimentoRepository.DeleteRecebimentoIsencao(a.AssinaturaAnuidadeId, 0);
                        }
                    }

                    // Log do UPDATE ASSINATURA_ANUIDADE:
                    StringBuilder sb = new StringBuilder();
                    sb.Append("Parâmetros: ");

                    for (int z = 0; z < command.Parameters.Count; z++)
                    {
                        sb.Append(command.Parameters[z].ParameterName + ": " + command.Parameters[z].Value + ", ");
                    }

                    _instrucaoSql = sb.ToString();
                    _result       = x > 0 ? "SUCESSO" : "FALHA";

                    string log = logRep.SetLogger(className + "/Update",
                                                  "UPDATE", "ASSINATURA_ANUIDADE", id, _instrucaoSql, _result);
                    //Fim do Log
                }
                catch (Exception ex)
                {
                    try
                    {
                        transaction.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        _msg = $"ATENÇÃO: Ocorreu um erro ao tentar ATUALIZAR ASSINATURA_ANUIDADE: Commit Exception Type:{ex2.GetType()}. Erro:{ex2.Message}";
                        // throw new Exception($"Rollback Exception Type:{ex2.GetType()}. Erro:{ex2.Message}");
                    }

                    string log = logRep.SetLogger(className + "/Update",
                                                  "UPDATE", "ASSINATURA_ANUIDADE", 0, ex.Message, "FALHA");

                    _msg = $"ATENÇÃO: Ocorreu um erro ao tentar ATUALIZAR ASSINATURA_ANUIDADE: Commit Exception Type:{ex.GetType()}. Erro:{ex.Message}";
                    // throw new Exception($"Commit Exception Type:{ex.GetType()}. Erro:{ex.Message}");
                }
                finally
                {
                    connection.Close();
                }
            }
            return(_msg);
        }
        public string Insert(AssinaturaAnuidade a)
        {
            bool   _resultado = false;
            string _msg       = "";
            string _msgIsento = "";
            Int32  id         = 0;
            string _ident     = "";

            using (SqlConnection connection = new SqlConnection(strConnSql))
            {
                connection.Open();

                SqlCommand     command = connection.CreateCommand();
                SqlTransaction transaction;

                // Start a local transaction.
                transaction = connection.BeginTransaction("IncluirAssinaturaAnuidade");

                command.Connection  = connection;
                command.Transaction = transaction;

                try
                {
                    // Passou a ter isenção:
                    if (a.PagamentoIsento == true)
                    {
                        a.DtIsencao = DateTime.Now;
                    }

                    string _dtIsencao      = a.DtIsencao != null ? ", DtIsencao ": "";
                    string _paramDtIsencao = a.DtIsencao != null ? ", @DtIsencao " : "";

                    command.CommandText = "" +
                                          "INSERT into dbo.AD_Assinatura_Anuidade (AssociadoId , ValorAnuidadeId,  AnoInicio, " +
                                          "       AnoTermino, PercentualDesconto, TipoDesconto, Valor, DtVencimentoPagamento, DtAssinatura, DtAtualizacao, " +
                                          "       CodePS, DtCodePS, Reference, PagamentoIsento, ObservacaoIsencao " + _dtIsencao + ") " +
                                          "VALUES (@AssociadoId , @ValorAnuidadeId,  @AnoInicio, " +
                                          "       @AnoTermino, @PercentualDesconto, @TipoDesconto, @Valor, @DtVencimentoPagamento, @DtAssinatura, @DtAtualizacao, " +
                                          "       @CodePS, @DtCodePS, @Reference, @PagamentoIsento, @ObservacaoIsencao " + _paramDtIsencao + ") " +
                                          "SELECT CAST(scope_identity() AS int) ";

                    command.Parameters.AddWithValue("AssociadoId", a.AssociadoId);
                    command.Parameters.AddWithValue("ValorAnuidadeId", a.ValorAnuidadeId);
                    command.Parameters.AddWithValue("AnoInicio", a.AnoInicio);
                    command.Parameters.AddWithValue("AnoTermino", a.AnoTermino);
                    command.Parameters.AddWithValue("PercentualDesconto", a.PercentualDesconto);
                    command.Parameters.AddWithValue("TipoDesconto", a.TipoDesconto);
                    command.Parameters.AddWithValue("Valor", a.Valor);
                    command.Parameters.AddWithValue("DtVencimentoPagamento", a.DtVencimentoPagamento);
                    command.Parameters.AddWithValue("DtAssinatura", DateTime.Now);
                    command.Parameters.AddWithValue("DtAtualizacao", DateTime.Now);
                    command.Parameters.AddWithValue("CodePS", a.CodePS);
                    command.Parameters.AddWithValue("DtCodePS", a.DtCodePS);
                    command.Parameters.AddWithValue("Reference", a.Reference);
                    command.Parameters.AddWithValue("PagamentoIsento", a.PagamentoIsento);
                    command.Parameters.AddWithValue("ObservacaoIsencao", a.ObservacaoIsencao);

                    if (_dtIsencao != "")
                    {
                        command.Parameters.AddWithValue("DtIsencao", a.DtIsencao);
                    }

                    id         = (Int32)command.ExecuteScalar();
                    _resultado = id > 0;

                    _ident = _ident.PadLeft(10 - id.ToString().Length, '0') + id.ToString();

                    _msg = id > 0 ? $"{_ident}Inclusão realizada com sucesso" : $"{_ident}Inclusão Não realizada com sucesso";

                    transaction.Commit();

                    if (id > 0)
                    {
                        //é isento:
                        if (a.PagamentoIsento == true)
                        {
                            Recebimento recebimento = new Recebimento
                            {
                                AssinaturaAnuidadeId = id,
                                DtVencimento         = a.DtVencimentoPagamento,
                                StatusPS             = 0,
                                GrossAmountPS        = 0,
                                DiscountAmountPS     = 0,
                                FeeAmountPS          = 0,
                                NetAmountPS          = 0,
                                ExtraAmountPS        = 0,
                                StatusFBTC           = "3",
                                OrigemEmissaoTitulo  = "2",
                                NotificationCodePS   = a.Reference,
                                Ativo = true
                            };

                            RecebimentoRepository recebimentoRepository = new RecebimentoRepository();

                            _msgIsento = recebimentoRepository.InsertRecebimentoIsencao(recebimento);
                        }
                    }

                    // Log da Inserção ASSINATURA_ANUIDADE:
                    StringBuilder sb = new StringBuilder();
                    sb.Append("Parâmetros: ");

                    for (int z = 0; z < command.Parameters.Count; z++)
                    {
                        sb.Append(command.Parameters[z].ParameterName + ": " + command.Parameters[z].Value + ", ");
                    }

                    _instrucaoSql = sb.ToString();
                    _result       = id > 0 ? "SUCESSO" : "FALHA";

                    string log = logRep.SetLogger(className + "/Insert",
                                                  "INSERT", "ASSINATURA_ANUIDADE", id, _instrucaoSql, _result);
                    //Fim do Log
                }
                catch (Exception ex)
                {
                    // Attempt to roll back the transaction.
                    try
                    {
                        transaction.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        _msg = $"ATENÇÃO: Ocorreu um erro ao tentar INCLUIR ASSINATURA_ANUIDADE: Commit Exception Type:{ex2.GetType()}. Erro:{ex2.Message}";
                        //throw new Exception($"Rollback Exception Type:{ex2.GetType()}. Erro:{ex2.Message}");
                    }

                    string log = logRep.SetLogger(className + "/Insert",
                                                  "INSERT", "ASSINATURA_ANUIDADE", 0, ex.Message, "FALHA");

                    _msg = $"ATENÇÃO: Ocorreu um erro ao tentar INCLUIR ASSINATURA_ANUIDADE: Commit Exception Type:{ex.GetType()}. Erro:{ex.Message}";
                    // throw new Exception($"Commit Exception Type:{ex.GetType()}. Erro:{ex.Message}");
                }
                finally
                {
                    connection.Close();
                }
            }
            return(_msg);
        }