private DateTime ObterDiaDaSemanaDoMes(DateTime dataAtual, PadraoRecorrenciaMensal padraoRecorrenciaMensal, DayOfWeek diaDaSemana) { DateTime primeiroDiaDoMes = ObterPrimeiroDiaDoMes(dataAtual); var quantidadeDeDiasDaSemana = 0; for (DateTime data = primeiroDiaDoMes; quantidadeDeDiasDaSemana < (int)padraoRecorrenciaMensal; data = data.AddDays(1)) { if (data.DayOfWeek == diaDaSemana) { quantidadeDeDiasDaSemana++; dataAtual = data; } } return(dataAtual); }
private IEnumerable <Evento> ObterRecorrenciaMensal(PadraoRecorrenciaMensal padraoRecorrenciaMensal, DateTime dataInicio, DateTime dataFinal, int?diaOcorrencia, int repeteACada, IEnumerable <DayOfWeek> diasDaSemana) { var eventos = new List <Evento>(); var dataAtual = dataInicio; while (dataAtual <= dataFinal) { dataAtual = ObterProximaDataRecorrenciaMensal(dataAtual, padraoRecorrenciaMensal, diasDaSemana, diaOcorrencia); var evento = (Evento)Clone(); evento.DataInicio = dataAtual; evento.DataFim = dataAtual; evento.EventoPaiId = Id; evento.Id = 0; eventos.Add(evento); dataAtual = dataAtual.AddMonths(repeteACada); } return(eventos); }
private DateTime ObterProximaDataRecorrenciaMensal(DateTime dataAtual, PadraoRecorrenciaMensal padraoRecorrenciaMensal, IEnumerable <DayOfWeek> diasDaSemana, int?diaOcorrencia) { if (padraoRecorrenciaMensal != PadraoRecorrenciaMensal.NoDia) { if (diasDaSemana == null) { throw new NegocioException("Os dias da semana são obrigatórios para esse tipo de recorrência."); } if (padraoRecorrenciaMensal == PadraoRecorrenciaMensal.Ultima) { return(ObterUltimoDiaDaSemanaDoMes(dataAtual, diasDaSemana.FirstOrDefault())); } dataAtual = ObterDiaDaSemanaDoMes (dataAtual, padraoRecorrenciaMensal, diasDaSemana.FirstOrDefault()); } else { return(ObterRecorrenciaParaDiaFixo(dataAtual, diaOcorrencia.Value)); } return(dataAtual); }