public ActionResult validarVencimento(int?idContribuicao, DateTime?dtVencimento)
        {
            Contribuicao OContribuicao = this.OContribuicaoBL.carregar(UtilNumber.toInt32(idContribuicao));

            if (OContribuicao == null)
            {
                return(Json(new JsonMessage {
                    error = true, message = "Não foi possível encontrar a cobrança."
                }, JsonRequestBehavior.AllowGet));
            }


            if (!dtVencimento.HasValue)
            {
                return(Json(new JsonMessage {
                    error = true, message = "Data de Vencimento não informada."
                }, JsonRequestBehavior.AllowGet));
            }


            if (OContribuicao.flagVencimentoVariado())
            {
                return(Json(new { error = false, dtVencimento = "", dtInicioVigencia = "", dtFimVigencia = "" }, JsonRequestBehavior.AllowGet));
            }

            var OVencimento = OContribuicao.retornarProximoVencimento(dtVencimento.Value);

            if (OVencimento == null)
            {
                return(Json(new JsonMessage {
                    error = true, message = "A data de vencimento informada é inválida."
                }, JsonRequestBehavior.AllowGet));
            }

            return(Json(new {
                error = false,
                dtVencimento = dtVencimento.exibirData().ToString(),
                dtInicioVigencia = OVencimento.dtInicioVigencia.exibirData().ToString(),
                dtFimVigencia = OVencimento.dtFimVigencia.exibirData().ToString()
            },
                        JsonRequestBehavior.AllowGet));
        }
Esempio n. 2
0
        public ActionResult buscarPreco(int?idContribuicao, int idAssociado)
        {
            Associado OAssociado = this.OAssociadoBL.carregar(idAssociado);

            Contribuicao OContribuicao = this.OContribuicaoBL.carregar(UtilNumber.toInt32(idContribuicao));

            if (OAssociado == null)
            {
                return(Json(new JsonMessage {
                    error = true, message = "Esse método precisa do código do associado para calcular o valor da anuidade."
                }, JsonRequestBehavior.AllowGet));
            }

            if (OContribuicao == null)
            {
                return(Json(new JsonMessage {
                    error = true, message = "Informe a contribuição para calcular o valor."
                }, JsonRequestBehavior.AllowGet));
            }

            var OTabela = OContribuicao.retornarTabelaVigente();

            var OPreco = OTabela.retornarPreco(UtilNumber.toInt32(OAssociado.idTipoAssociado));

            if (OPreco.id == 0)
            {
                return(Json(new JsonMessage {
                    error = true, message = "Não há preço configurado para esse tipo de associado."
                }, JsonRequestBehavior.AllowGet));
            }

            var listaVencimentos = OContribuicao.listaContribuicaoVencimento.Where(x => x.dtExclusao == null).ToList();
            var OVencimento      = new ContribuicaoVencimento();

            if (OContribuicao.idTipoVencimento == TipoVencimentoConst.FIXO_PELA_CONTRIBUICAO)
            {
                OVencimento = OContribuicao.retornarProximoVencimento();
            }

            if (OContribuicao.idTipoVencimento == TipoVencimentoConst.VENCIMENTO_PELA_ADMISSAO_ASSOCIADO)
            {
                var anoVigencia = DateTime.Today.Year;
                var dtCobranca  = OAssociado.dtAdmissao ?? DateTime.Today;

                DateTime?dtVencimentoAdmissao = new DateTime(anoVigencia, dtCobranca.Month, dtCobranca.Day);
                OVencimento = OContribuicao.retornarProximoVencimento(dtVencimentoAdmissao);
            }


            if (OContribuicao.idTipoVencimento == TipoVencimentoConst.VENCIMENTO_PELO_ULTIMO_PAGAMENTO)
            {
                var UltimaContribuicao = OAssociadoContribuicaoBL.listar(OContribuicao.id, idAssociado, null, true, "")
                                         .Select(x => new { x.dtPagamento, x.dtVencimentoOriginal })
                                         .OrderByDescending(x => x.dtPagamento)
                                         .FirstOrDefault();

                var dtUltimaContribuicao = UltimaContribuicao == null ?  DateTime.Today : (UltimaContribuicao.dtPagamento ?? UltimaContribuicao.dtVencimentoOriginal);

                DateTime?dtNovoVencimento = new DateTime(DateTime.Today.Year, dtUltimaContribuicao.Month, dtUltimaContribuicao.Day);

                OVencimento = OContribuicao.retornarProximoVencimento(dtNovoVencimento);
            }

            var dtVencimento = OVencimento.dtVencimento;

            var listaJson = listaVencimentos.Select(x => new {
                x.id,
                dtVencimento = string.Concat(x.diaVencimento.ToString().PadLeft(2, '0'), "/", x.mesVencimento.ToString().PadLeft(2, '0'))
            });

            return(Json(new {
                error = false,
                valor = UtilNumber.toDecimal(OPreco.valorFinal).ToString("F"),
                dtVencimento = dtVencimento.exibirData(),
                listaVencimentos = listaJson,
                flagVencimentoFixo = (listaVencimentos.Count > 0),
                dtInicioVigencia = OVencimento.dtInicioVigencia.exibirData(),
                dtFimVigencia = OVencimento.dtFimVigencia.exibirData(),
                OPreco.flagIsento
            }, JsonRequestBehavior.AllowGet));
        }
        //
        public ContribuicaoVencimento retornarVencimentoFixo(Contribuicao Contribuicao)
        {
            var OVencimento = Contribuicao.retornarProximoVencimento();

            return(OVencimento);
        }
        /// <summary>
        ///Vincular uma contribuicao com o associado
        ///Pode-se informar qual contribuição será vinculada
        ///Se nao for informada nenhuma contribuicao, o sistema irá considerar a contribuicao padrao do associado
        /// </summary>
        public UtilRetorno gerarCobranca(Associado OAssociado, Contribuicao OContribuicao, DateTime?dtVencimento = null, DateTime?dtNovoVencimento = null, bool flagPrimeiraCobranca = false, decimal valorCustomizado = 0)
        {
            if (OAssociado?.TipoAssociado == null)
            {
                return(UtilRetorno.newInstance(true, "O associado informado não foi localizado."));
            }

            int?idContribuicao = OContribuicao?.id;

            if (idContribuicao.toInt() == 0)
            {
            }

            if (OContribuicao == null || !OContribuicao.listaContribuicaoVencimento.Any())
            {
                OContribuicao = this.OContribuicaoBL.carregar(idContribuicao.toInt());
            }

            if (OContribuicao == null)
            {
                return(UtilRetorno.newInstance(true, "A contribuição informada não foi localizada."));
            }

            var TabelaPreco = OContribuicao.retornarTabelaVigente();

            if (TabelaPreco.id == 0)
            {
                return(UtilRetorno.newInstance(true, "Não há tabela de preços configuradas para a contribuição."));
            }

            var Vencimento = OContribuicao.retornarProximoVencimento(dtVencimento);

            var Preco = flagPrimeiraCobranca ? TabelaPreco.retornarPrecoAtual(UtilNumber.toInt32(OAssociado.idTipoAssociado), DateTime.Today) : TabelaPreco.retornarPreco(UtilNumber.toInt32(OAssociado.idTipoAssociado));

            if (!dtVencimento.HasValue)
            {
                dtVencimento = Vencimento.dtVencimento;
            }

            if (flagPrimeiraCobranca)
            {
                dtNovoVencimento = DateTime.Today.AddDays(UtilNumber.toInt32(OAssociado.TipoAssociado.diasPrazoPrimeiraCobranca));

                //Caso o vencimento seja por admissão ou por ultimo pagamento, enviamos a data de vencimento vazia no ato do cadastro.
                //Por este motivo atualizamos a competência com base na data de hoje.
                if (OContribuicao.flagVencimentoVariado() && !Vencimento.dtVencimento.HasValue)
                {
                    dtVencimento = DateTime.Today;

                    Vencimento.dtVencimento = dtNovoVencimento;

                    Vencimento.dtInicioVigencia = dtNovoVencimento;

                    Vencimento.dtFimVigencia = dtNovoVencimento.Value.AddYears(1);
                }
            }

            if (!dtVencimento.HasValue)
            {
                return(UtilRetorno.newInstance(true, "O vencimento não está configurado ou não foi informado para essa contribuição."));
            }

            bool flagVencimentoValido = this.validarVencimento(OContribuicao, dtVencimento.Value);

            if (!flagVencimentoValido)
            {
                return(UtilRetorno.newInstance(true, "O vencimento informado não está dentro das opções válidas para a cobrança informada."));
            }

            AssociadoContribuicao OAssociadoContribuicao = new AssociadoContribuicao();

            this.verificarIsencao(ref OAssociadoContribuicao, Preco, OAssociado);

            OAssociadoContribuicao.idAssociado = OAssociado.id;

            OAssociadoContribuicao.idOrganizacao = OAssociado.idOrganizacao;

            OAssociadoContribuicao.idUnidade = OAssociado.idUnidade;

            OAssociadoContribuicao.idTipoAssociado = UtilNumber.toInt32(OAssociado.idTipoAssociado);

            OAssociadoContribuicao.idContribuicao = idContribuicao.toInt();

            OAssociadoContribuicao.valorOriginal = UtilNumber.toDecimal(Preco.valorFinal);

            OAssociadoContribuicao.valorAtual = valorCustomizado > 0? valorCustomizado : OAssociadoContribuicao.valorOriginal;

            OAssociadoContribuicao.dtVencimentoOriginal = dtVencimento.Value;

            OAssociadoContribuicao.dtVencimentoAtual = dtNovoVencimento ?? OAssociadoContribuicao.dtVencimentoOriginal;

            OAssociadoContribuicao.idContribuicaoVencimento = Vencimento.id;

            OAssociadoContribuicao.dtInicioVigencia = Vencimento.dtInicioVigencia;

            OAssociadoContribuicao.dtFimVigencia = Vencimento.dtFimVigencia;

            return(this.gerarCobranca(OAssociadoContribuicao));
        }