示例#1
0
        /// <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;
        }
示例#2
0
        /// <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));
        }
示例#3
0
        /// <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;
        }
示例#4
0
文件: Interval.cs 项目: 0anion0/IBN
 /// <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
 }
示例#5
0
文件: Interval.cs 项目: 0anion0/IBN
 /// <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);
 }
示例#6
0
文件: Interval.cs 项目: 0anion0/IBN
 /// <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));
 }
示例#7
0
 /// <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);
 }