public static HashSet <Occurrence> GetOccurrences(IRecurrable recurrable, IDateTime periodStart, IDateTime periodEnd, bool includeReferenceDateInResults) { var evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator; if (evaluator == null || recurrable.Start == null) { return(new HashSet <Occurrence>()); } // Ensure the start time is associated with the object being queried var start = recurrable.Start; start.AssociatedObject = recurrable as ICalendarObject; // Change the time zone of periodStart/periodEnd as needed // so they can be used during the evaluation process. periodStart.TzId = start.TzId; periodEnd.TzId = start.TzId; var periods = evaluator.Evaluate(start, DateUtil.GetSimpleDateTimeData(periodStart), DateUtil.GetSimpleDateTimeData(periodEnd), includeReferenceDateInResults); var otherOccurrences = from p in periods let endTime = p.EndTime ?? p.StartTime where endTime.GreaterThan(periodStart) && p.StartTime.LessThanOrEqual(periodEnd) select new Occurrence(recurrable, p); var occurrences = new HashSet <Occurrence>(otherOccurrences); return(occurrences); }
static public IList <Occurrence> GetOccurrences(IRecurrable recurrable, IDateTime periodStart, IDateTime periodEnd, bool includeReferenceDateInResults) { List <Occurrence> occurrences = new List <Occurrence>(); IEvaluator evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator; if (evaluator != null) { // Change the time zone of periodStart/periodEnd as needed // so they can be used during the evaluation process. periodStart = DateUtil.MatchTimeZone(recurrable.Start, periodStart); periodEnd = DateUtil.MatchTimeZone(recurrable.Start, periodEnd); IList <IPeriod> periods = evaluator.Evaluate( recurrable.Start, DateUtil.GetSimpleDateTimeData(periodStart), DateUtil.GetSimpleDateTimeData(periodEnd), includeReferenceDateInResults); foreach (IPeriod p in periods) { // Filter the resulting periods to only contain those between // startTime and endTime. if (p.StartTime.GreaterThanOrEqual(periodStart) && p.StartTime.LessThanOrEqual(periodEnd)) { occurrences.Add(new Occurrence(recurrable, p)); } } occurrences.Sort(); } return(occurrences); }
/// <summary> /// Gets the occurrences. /// </summary> /// <param name="recurrable">The recurrable.</param> /// <param name="periodStart">The period start.</param> /// <param name="periodEnd">The period end.</param> /// <param name="includeReferenceDateInResults"> /// if set to <c>true</c> [include reference date in results]. /// </param> /// <returns></returns> public static IList <Occurrence> GetOccurrences(IRecurrable recurrable, IDateTime periodStart, IDateTime periodEnd, bool includeReferenceDateInResults) { var occurrences = new List <Occurrence>( ); var evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator; if (evaluator != null) { // Ensure the start time is associated with the object being queried var start = recurrable.Start.Copy <IDateTime>( ); start.AssociatedObject = recurrable as ICalendarObject; // Change the time zone of periodStart/periodEnd as needed // so they can be used during the evaluation process. periodStart = DateUtil.MatchTimeZone(start, periodStart); periodEnd = DateUtil.MatchTimeZone(start, periodEnd); ISet <IPeriod> periods = evaluator.Evaluate( start, DateUtil.GetSimpleDateTimeData(periodStart), DateUtil.GetSimpleDateTimeData(periodEnd), includeReferenceDateInResults); // Filter the resulting periods to only contain those // that occur sometime between startTime and endTime. // NOTE: fixes bug #3007244 - GetOccurences not returning long spanning all-day events occurrences.AddRange(from p in periods let endTime = p.EndTime ?? p.StartTime where endTime.GreaterThan(periodStart) && p.StartTime.LessThanOrEqual(periodEnd) select new Occurrence(recurrable, p)); occurrences.Sort( ); } return(occurrences); }
static public IList<Occurrence> GetOccurrences(IRecurrable recurrable, IDateTime periodStart, IDateTime periodEnd, bool includeReferenceDateInResults) { List<Occurrence> occurrences = new List<Occurrence>(); IEvaluator evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator; if (evaluator != null) { // Change the time zone of periodStart/periodEnd as needed // so they can be used during the evaluation process. periodStart = DateUtil.MatchTimeZone(recurrable.Start, periodStart); periodEnd = DateUtil.MatchTimeZone(recurrable.Start, periodEnd); IList<IPeriod> periods = evaluator.Evaluate( recurrable.Start, DateUtil.GetSimpleDateTimeData(periodStart), DateUtil.GetSimpleDateTimeData(periodEnd), includeReferenceDateInResults); foreach (IPeriod p in periods) { // Filter the resulting periods to only contain those // that occur sometime between startTime and endTime. // NOTE: fixes bug #3007244 - GetOccurences not returning long spanning all-day events IDateTime endTime = p.EndTime ?? p.StartTime; if (endTime.GreaterThan(periodStart) && p.StartTime.LessThanOrEqual(periodEnd)) occurrences.Add(new Occurrence(recurrable, p)); } occurrences.Sort(); } return occurrences; }
static public void ClearEvaluation(IRecurrable recurrable) { IEvaluator evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator; if (evaluator != null) { evaluator.Clear(); } }
static public void ClearEvaluation(IRecurrable recurrable) { IEvaluator evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator; if (evaluator != null) evaluator.Clear(); }
public static void ClearEvaluation(IRecurrable recurrable) { var evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator; evaluator?.Clear(); }