public virtual HistoricoPeriodicidade GetPeriodicidadeVigente() { var hoje = DateTime.Now; HistoricoPeriodicidade objetoPeriodoVigente = this.ListaHistoricoPeriodicidade.Find(x => (hoje >= x.DataInicio) && (hoje <= x.DataFinal || x.DataFinal == null)); if (objetoPeriodoVigente == null) { throw new ValidationException("A obrigação " + this.NomeObrigacao + " não possui periodicidade vigente."); } return(objetoPeriodoVigente); }
public virtual DateTime?GetDataVencimento(int mesMonitorado, int anoMonitorado) { HistoricoPeriodicidade historicoPeriodicidadeVigente = this.GetPeriodicidadeVigente(); DateTime dataMonitoramento = new DateTime(anoMonitorado, mesMonitorado, DateTime.DaysInMonth(anoMonitorado, mesMonitorado)); DateTime primeiroDiaDoAno = new DateTime(anoMonitorado, 1, 1); DateTime?dataDeVencimento = null; int diasDeCarencia = historicoPeriodicidadeVigente.DiasCarencia; switch (historicoPeriodicidadeVigente.TipoPeriodicidade) { // case "D": // for (DateTime dataVencimentoObrigacao = primeiroDiaDoAno; dataVencimentoObrigacao <= dataMonitoramento; dataVencimentoObrigacao = dataVencimentoObrigacao.AddMonths (historicoPeriodicidade.Periodicidade)) { // if (dataVencimentoObrigacao.Day == dataMonitoramento.Day) { // dataDeVencimento = dataVencimentoObrigacao.AddDays(diasDeCarencia); // } // } // break; case "M": for (int mes = historicoPeriodicidadeVigente.Periodicidade; mes <= 12; mes += historicoPeriodicidadeVigente.Periodicidade) { if (mes == mesMonitorado) { dataDeVencimento = new DateTime(anoMonitorado, mesMonitorado, DateTime.DaysInMonth(anoMonitorado, mesMonitorado), 23, 59, 59).AddDays(diasDeCarencia); } } break; case "A": if (mesMonitorado == 12) { var ultimoDiaDoAnoAnalisado = new DateTime(anoMonitorado, 12, 31, 23, 59, 59); dataDeVencimento = ultimoDiaDoAnoAnalisado.AddDays(diasDeCarencia); } break; } return(dataDeVencimento); }
public override void ValidarMonitoramento(int mes, int ano) { var dataHoje = DateTime.Now; HistoricoPeriodicidade periodicidade = this.GetPeriodicidadeVigente(); if (ano > dataHoje.Year) { throw new ValidationException("Não é possível gerar pendências para datas futuras."); } else if (ano == dataHoje.Year) { if (mes == dataHoje.AddMonths(-1).Month) { if (dataHoje.Day <= periodicidade.DiasCarencia) { throw new ValidationException("Não é possível gerar pendências antes do dia " + (periodicidade.DiasCarencia + 1) + " para este mês."); } } else if (mes >= dataHoje.Month) { throw new ValidationException("Não é possível gerar pendências para o mês atual ou datas futuras."); } } }