示例#1
0
        public static decimal CalcularDescontoAnuidade(AssinaturaAnuidadeDao a)
        {
            int     _percentualDesconto = 0;
            decimal _valor = a.Valor;


            // Isenção foi concedida:
            if (a.PagamentoIsento == true)
            {
                _percentualDesconto = 100;
                _valor = 0;
            }
            else
            {
                // Desconto aplicado para Membros CONFI:
                if (a.MembroConfi == true)
                {
                    _percentualDesconto = 100;
                    _valor = 0;
                }
                else
                {
                    // O Desconto somente é aplicado para a Assinatura de Um Ano:
                    if (a.TipoAnuidade == 1)
                    {
                        if (a.MembroDiretoria == true)
                        {
                            _percentualDesconto = 100;
                            _valor = 0;
                        }

                        if (_percentualDesconto == 0)
                        {
                            if (a.AnuidadeAtcOk == true)
                            {
                                _percentualDesconto = 50;
                                _valor = a.Valor > 0 ? a.Valor / 2 : 0;
                            }
                        }
                    }
                }
            }
            return(_valor);
        }
        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 async Task <HttpResponseMessage> Post(AssinaturaAnuidadeDao a)
        {
            HttpResponseMessage response = new HttpResponseMessage();
            var     tsc       = new TaskCompletionSource <HttpResponseMessage>();
            string  resultado = "false";
            decimal _valorDecimal;

            try
            {
                if (a == null)
                {
                    throw new ArgumentNullException("O objeto 'assinaturaAnuidadeDao' está nulo!");
                }

                if (a.AssinaturaAnuidadeId == 0 || a.ValorAnuidadeId != a.ValorAnuidadeIdOriginal || a.CodePS == "")
                {
                    if (a.PagamentoIsento == false)
                    {
                        PagSeguroRepository  r = new PagSeguroRepository();
                        PagSeguroService     s = new PagSeguroService(r);
                        PagSeguroApplication p = new PagSeguroApplication(s);
                        PagSeguroController  pagSeguroController = new PagSeguroController(p);

                        _valorDecimal = Functions.CalcularDescontoAnuidade(a);

                        if (a.MembroConfi == false)
                        {
                            string _valor = _valorDecimal.ToString("F", CultureInfo.InvariantCulture);

                            TokenCheckOutPagSeguro _token = await pagSeguroController.GetTokenCheckOutPessoaId(a.AssociadoId, _valor, "1", a.Exercicio, a.AnoTermino, true, true);

                            if (_token != null)
                            {
                                a.CodePS    = _token.Code;
                                a.DtCodePS  = _token.Date;
                                a.Reference = _token.Reference;
                            }
                        }
                    }
                }

                resultado = _assinaturaAnuidadeApplication.Save(a);

                response = Request.CreateResponse(HttpStatusCode.OK, resultado);
                response.ReasonPhrase = resultado;

                tsc.SetResult(response);

                return(await tsc.Task);
            }
            catch (Exception ex)
            {
                if (ex.GetType().Name == "InvalidOperationException" || ex.Source == "prmToolkit.Validation")
                {
                    response = Request.CreateResponse(HttpStatusCode.NotFound);
                    response.ReasonPhrase = ex.Message;
                }
                else
                {
                    response = Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message);
                    response.ReasonPhrase = ex.Message;
                }
                tsc.SetResult(response);

                return(await tsc.Task);
            }
        }
        public AssinaturaAnuidadeDao GetAssinaturaAnuidadeById(int id)
        {
            List <DbParameter> _parametros = new List <DbParameter>();

            query = @"SELECT AA.AssinaturaAnuidadeId, AA.AssociadoId, AA.ValorAnuidadeId, AA.AnoInicio, 
                        AA.AnoTermino, AA.PercentualDesconto, AA.TipoDesconto, AA.Valor, AA.DtVencimentoPagamento, 
                        AA.DtAssinatura, AA.DtAtualizacao, AA.Ativo, AA.CodePS, AA.DtCodePS, AA.Reference, AA.EmProcessoPagamento,
                        AA.DtInicioProcessamento, AA.PagamentoIsento, AA.PagamentoIsento as PagamentoIsentoBD, AA.DtIsencao, AA.ObservacaoIsencao, P.Nome as NomePessoa, P.CPF, TP.Nome as NomeTP, 
                        A.Exercicio, VA.ValorAnuidadeId, VA.ValorAnuidadeId as ValorAnuidadeIdOriginal, VA.TipoAnuidade, VA.Valor as ValorTipoAnuidade, A.AnuidadeId, TP.TipoPublicoId, 
	                    (SELECT 'AnuidadeAtcOk' =   
		                    Case 
			                    WHEN Count(DAA.DescontoAnuidadeAtcId) > 0 THEN 'TRUE' 
			                    ELSE 'FALSE' 
		                    END 
	                    FROM dbo.AD_Desconto_Anuidade_Atc DAA 
	                    WHERE DAA.AssociadoId = ASO.AssociadoId AND DAA.AnuidadeId = A.AnuidadeId)  AS AnuidadeAtcOk, 
	                    (SELECT 'MembroDiretoria' = 
		                    Case 
			                    WHEN Count(GE.GestaoId) > 0 THEN 'TRUE' 
			                    ELSE 'FALSE' 
		                    END                         
	                    FROM dbo.AD_Gestao GE  
	                    INNER JOIN dbo.AD_Membro_Gestao MG ON GE.GestaoId  = MG.GestaoId 
                        WHERE MG.AssociadoId = ASO.AssociadoId AND (GE.AnoInicial <= A.Exercicio AND GE.AnoFinal >= A.Exercicio) 
                            )  AS MembroDiretoria,
                        (SELECT 'MembroConfi' = 
	                        Case 
		                        WHEN Count(G.GestaoId) > 0 THEN 'TRUE' 
		                        ELSE 'FALSE' 
	                        END  
                        FROM dbo.AD_Gestao G 
                        INNER JOIN dbo.AD_Membro_Gestao MG ON G.GestaoId = MG.GestaoId 
                        INNER JOIN dbo.AD_Cargo_Gestao CG ON MG.CargoGestaoId = CG.CargoGestaoId 
                        WHERE UPPER(CG.Nome) = 'PRESIDENTE' 
                        AND MG.AssociadoId = AA.AssociadoId 
                        ) AS MembroConfi 
                    FROM dbo.AD_Assinatura_Anuidade AA 
                        INNER JOIN dbo.AD_Valor_Anuidade VA ON AA.ValorAnuidadeId = VA.ValorAnuidadeId 
                        INNER JOIN dbo.AD_Anuidade_Tipo_Publico ATP ON VA.AnuidadeTipoPublicoId = ATP.AnuidadeTipoPublicoId 
                        INNER JOIN dbo.AD_Anuidade A ON ATP.AnuidadeId = A.AnuidadeId 
                        INNER JOIN dbo.AD_Associado ASO ON AA.AssociadoId = ASO.AssociadoId 
                        INNER JOIN dbo.AD_Pessoa P ON ASO.PessoaId = P.PessoaId 
                        INNER JOIN dbo.AD_Tipo_Publico TP ON ATP.TipoPublicoId = TP.TipoPublicoId 
                    WHERE AA.AssinaturaAnuidadeId = @id ORDER BY AA.AssociadoId, AA.AssinaturaAnuidadeId ";


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

            _parametros.Add(paramId);
            // 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:
            AssinaturaAnuidadeDao assinaturaAssociadoDao = GetCollection <AssinaturaAnuidadeDao>(cmd)?.FirstOrDefault <AssinaturaAnuidadeDao>();

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

            // Fim Log

            return(assinaturaAssociadoDao);
        }