//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); }
//Extension para pegar a tabela de preços vigente para a contribuição public static ContribuicaoTabelaPreco retornarTabelaVigente(this Contribuicao Item) { var Retorno = new ContribuicaoTabelaPreco(); if (Item == null) { return(Retorno); } Item.listaTabelaPreco = Item.listaTabelaPreco ?? new List <ContribuicaoTabelaPreco>(); Retorno = Item.listaTabelaPreco.Where(x => x.flagExcluido == false && x.dtInicioVigencia <= DateTime.Today) .OrderByDescending(x => x.dtInicioVigencia) .FirstOrDefault(); Retorno = Retorno ?? new ContribuicaoTabelaPreco(); return(Retorno); }
/// <summary> /// Verificar se existe tabela de desconto por antecipacao de pagamentos e retornar a tabela /// </summary> public static List <TituloReceitaDescontoAntecipacao> retornarListaDescontos(this ContribuicaoTabelaPreco OTabelaPreco, int idTipoAssociado, DateTime dtVencimento) { var listaDescontos = new List <TituloReceitaDescontoAntecipacao>(); if (OTabelaPreco == null) { return(listaDescontos); } var Preco = OTabelaPreco.listaPrecos.FirstOrDefault(x => x.idTipoAssociado == idTipoAssociado && x.flagExcluido == "N"); if (Preco == null) { return(listaDescontos); } var listaPrecoDescontos = Preco.listaDesconto.Where(x => x.dtExclusao == null).ToList(); if (!listaPrecoDescontos.Any()) { return(listaDescontos); } foreach (var OPrecoDesconto in listaPrecoDescontos) { var ItemDesconto = new TituloReceitaDescontoAntecipacao(); ItemDesconto.dtLimiteDesconto = dtVencimento.AddDays(-Math.Abs(OPrecoDesconto.qtdeDiasAntecipacao)); ItemDesconto.valor = OPrecoDesconto.valorDesconto; listaDescontos.Add(ItemDesconto); } return(listaDescontos); }