/// <summary> /// Executes the specified param. /// </summary> /// <param name="param">The param.</param> /// <returns></returns> public override object Execute(Interval param) { AbstractContourBucket bucket = base.CountourGenerator.CurrentBucket; Interval interval = param; if (bucket != null) { double bucketDuration = WorkingCalendar.SubstractDates(interval.End, interval.Start, false); double workValue = bucket.GetEffectiveUnits(base.AssignmentUnits) * bucketDuration; _regularValue += workValue; _overTimeValue += _overTimeUnits * bucketDuration; this.Value = _regularValue + _overTimeValue; #if DEBUG DebugInterval(interval, (long)bucketDuration, (long)workValue); #endif } return this; }
/// <summary> /// Debugs the interval. /// </summary> /// <param name="interval">The interval.</param> /// <param name="duration">The duration.</param> /// <param name="value">The value.</param> private void DebugInterval(Interval interval, long duration, long value) { if (_doc == null) { _doc = new XmlDocument(); _doc.AppendChild(_doc.CreateElement("ss")); } XmlElement element = (XmlElement)_doc.DocumentElement.AppendChild(_doc.CreateElement("WorkInterval")); XmlNode node = element.AppendChild(_doc.CreateElement("Start")); node.InnerText = new DateTime(CalendarHelper.Milis2Tick(interval.Start)).ToString("yyyy-MM-ddTHH:mm:ss"); node = element.AppendChild(_doc.CreateElement("Finish")); node.InnerText = new DateTime(CalendarHelper.Milis2Tick(interval.End)).ToString("yyyy-MM-ddTHH:mm:ss"); node = element.AppendChild(_doc.CreateElement("Value")); node.InnerText = String.Format("PT{0}H{1}M{2}S", value / CalendarHelper.MilisPerHour(), (value % CalendarHelper.MilisPerHour()) / CalendarHelper.MilisPerMinute(), (value % CalendarHelper.MilisPerMinute()) / (CalendarHelper.MilisPerMinute() / 60)); }
/// <summary> /// Moves the next. /// Moves time interval to step amount and move iterator aggregated collection /// Генерирует интервалы задданой длительности на заданном отрезке, и паралельно призводит итерацию /// наложенного генератора интервалов в соответсвии с совпадениями генерируемых интервалов с наложенными /// </summary> /// <returns></returns> public override bool MoveNext() { if (base._finish == true) return false; Interval subInterval = _subIntervalGenerator.GetEnumerator().Current; Interval groupNextInterval = new Interval(); if (Current.Start == subInterval.End || Current.End == subInterval.End) { if (_subIntervalGenerator.GetEnumerator().MoveNext() == false) return false; subInterval = _subIntervalGenerator.GetEnumerator().Current; } base.GetNext(this.Current, ref groupNextInterval); Current.Start = groupNextInterval.Start; Current.End = Math.Min(groupNextInterval.End, subInterval.End); if (Current.End == base.End) base._finish = true; return true; }
/// <summary> /// Ins the range. /// </summary> /// <param name="src">The SRC.</param> /// <param name="dst">The DST.</param> /// <returns></returns> public static bool WholeInRange(Interval checkInterval, Interval inInterval) { return (inInterval.End > checkInterval.End && inInterval.Start < checkInterval.Start); //dst.End > src.Start && dst.Start < src.End }
/// <summary> /// Partials the in range. /// </summary> /// <param name="src">The SRC.</param> /// <param name="dst">The DST.</param> /// <returns></returns> public static bool PartialInRange(Interval checkInterval, Interval inInterval) { return (inInterval.End > checkInterval.Start && inInterval.Start < checkInterval.End); }
/// <summary> /// Intersects the in range. /// </summary> /// <param name="checkInterval">The check interval.</param> /// <param name="inInterval">The in interval.</param> /// <returns></returns> public static bool IntersectInRange(Interval checkInterval, Interval inInterval) { return (WholeInRange(checkInterval, inInterval) || PartialInRange(checkInterval, inInterval)); }
/// <summary> /// Evaluates the specified interval. /// </summary> /// <param name="interval">The interval.</param> /// <returns></returns> public bool Evaluate(Interval interval) { return (interval.Start >= this.Start && interval.End <= this.End); }