//Extension para pegar a tabela de preços vigente para a contribuição public static ContribuicaoPreco retornarPreco(this ContribuicaoTabelaPreco TabelaPreco, int idTipoAssociado) { var Retorno = new ContribuicaoPreco(); if (TabelaPreco == null) { return(Retorno); } Retorno = TabelaPreco.listaPrecos.FirstOrDefault(x => x.idTipoAssociado == idTipoAssociado && x.flagExcluido == "N"); Retorno = Retorno ?? new ContribuicaoPreco(); return(Retorno); }
//Extension para pegar o preço a partir do tipo do associado //Verificar se a cobranca deve ser feita pro-rata e calcular o valor public static ContribuicaoPreco retornarPrecoAtual(this ContribuicaoTabelaPreco TabelaPreco, int idTipoAssociado, DateTime?dtCobranca) { var Preco = new ContribuicaoPreco(); if (TabelaPreco == null) { return(Preco); } Preco = TabelaPreco.listaPrecos.FirstOrDefault(x => x.idTipoAssociado == idTipoAssociado && x.flagExcluido == "N"); Preco = Preco ?? new ContribuicaoPreco(); var OContribuicao = TabelaPreco.Contribuicao; var flagCobrancaProRata = OContribuicao.flagCobrancaProRata == true; var OVencimento = OContribuicao.retornarProximoVencimento(); var dtFimVigencia = OVencimento.dtFimVigencia; if (!dtFimVigencia.HasValue || !dtCobranca.HasValue) { return(Preco); } if (!flagCobrancaProRata || OContribuicao.idTipoVencimento != TipoVencimentoConst.FIXO_PELA_CONTRIBUICAO && Preco.id == 0) { return(Preco); } int qtdeDiasRestante = dtFimVigencia.Value.Date.Subtract(dtCobranca.Value.Date).Days; int qtdeDiasTotal = OContribuicao.PeriodoContribuicao.qtdeDias; decimal valorPorDia = decimal.Divide(UtilNumber.toDecimal(Preco.valorFinal), UtilNumber.toDecimal(qtdeDiasTotal)); decimal valorProRata = decimal.Multiply(valorPorDia, UtilNumber.toDecimal(qtdeDiasRestante)); Preco.valorFinal = valorProRata; return(Preco); }