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)); }
/// <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)); }