// TODO: HIGH: I think the decision to go with events / series etc makes it impossible to use entities here (or public override IEnumerable <DateTime> Occur(RepeatPeriod repeatPeriod, DateTime eventStart, DateTime repeatFrom, DateTime repeatTill) { var occurrences = new List <DateTime>(); var latestTime = eventStart; var effectiveEnd = DateTime.Compare(repeatTill, TimeWhenFinished) < 0 ? repeatTill : TimeWhenFinished; while (latestTime < effectiveEnd) { if (latestTime > repeatFrom) { occurrences.Add(latestTime); } latestTime = latestTime.Add(repeatPeriod.NextOccurence(latestTime).Subtract(latestTime)); } return(occurrences); }
public override IEnumerable <DateTime> Occur(RepeatPeriod repeatPeriod, DateTime eventStart, DateTime repeatFrom, DateTime repeatTill) { var latestDate = eventStart; var occurrences = new List <DateTime>(); var timesToOccur = MaxTimesToOccur; while (timesToOccur > 0 && latestDate <= repeatTill) { if (latestDate > repeatFrom) { occurrences.Add(latestDate); } latestDate = latestDate.Add(repeatPeriod.NextOccurence(latestDate).Subtract(latestDate)); timesToOccur--; } return(occurrences); }
public override IEnumerable <DateTime> Occur(RepeatPeriod repeatPeriod, DateTime eventStart, DateTime repeatFrom, DateTime repeatTill) { var occurrences = new List <DateTime>(); var latestTime = eventStart; // TODO: HIGH : Not very readable code. I would try to hint the reader that we are trying to find the start time // for generating occurances. Possibly encapsulate the logic in RepeatPeriod to find the closest occurance to a given date and start from there. while (latestTime < repeatTill) { if (latestTime > repeatFrom) { occurrences.Add(latestTime); } latestTime = latestTime.Add(repeatPeriod.NextOccurence(latestTime).Subtract(latestTime)); } return(occurrences); }