Пример #1
0
        private TaskControl_TimeRange Merge(TaskControl_TimeRange timeRange1, TaskControl_TimeRange timeRange2)
        {
            //ha frodított a sorrend, akkor megfordítva hívom meg
            if (timeRange2.DateTimeStart < timeRange1.DateTimeStart)
            {
                return(Merge(timeRange2, timeRange1));
            }


            var timeRange1End = timeRange1.EndOfTimeRange(TimeUnit);
            var timeRange2End = timeRange2.EndOfTimeRange(TimeUnit);


            //timeRange1 teljesen befedi timeRange2-t, akkor timeRange1-et adom vissza
            if (timeRange1End >= timeRange2End)
            {
                return(timeRange1);
            }


            if (timeRange1End < timeRange2.DateTimeStart)
            {            //Ha nem érnek össze az időszakok, akkor nem lehet mergelni
                throw new Exception($"Merge Error.");
            }
            else
            {            //ha egymásra lógnak, vagy összeérnek az időszakok
                var res = newTaskControl_TimeRange(timeRange1.DateTimeStart, TimeCountBetween(timeRange1.DateTimeStart, timeRange2End));
                return(res);
            }
        }
Пример #2
0
 protected override void RemoveTimeRangeFromList(TaskControl_TimeRange timeRangeToMerge)
 {
     base.RemoveTimeRangeFromList(timeRangeToMerge);
     if (TaskControl_Item != null)
     {
         TaskControl_Item.TimeRanges.Remove(timeRangeToMerge);
     }
 }
Пример #3
0
        /// <summary>
        /// Az adott időintervallumot hozzáadja a listában szereplőkhöz. Ha összeér, vagy belelóg egy vagy több már megjelölt időintervallumba, akkor összevonja az egybeérő időintervallumokat.
        /// </summary>
        public void AddTimeRange(TimeRange timeRange)
        {
            ReloadData();

            if (TimeUnit == TimeUnit.Infinity)
            {
                if (!TimeRanges.Any())
                {
                    AddTimeRangeToList(TaskControl_TimeRange.Infinity());
                }
            }
            else
            {
                var tcTimeRange = newTaskControl_TimeRange(timeRange.DateTimeStart, timeRange.DurationCount);

                /*var prev = TimeRanges.Where(x => x.DateTimeStart <= timeRange.DateTimeStart).OrderByDescending(x => x.DateTimeStart).FirstOrDefault();
                 * var next = TimeRanges.Where(x => x.DateTimeStart >= timeRange.DateTimeStart).OrderBy(x => x.DateTimeStart).FirstOrDefault();
                 * AddTimeRangeToList(timeRange);
                 *
                 * //előző bejegyzéshez vizsgálat+mergelés
                 * MergeInList(timeRange, prev);
                 *
                 * //következő bejegyzéshez vizsgálat+mergelés
                 * MergeInList(timeRange, next);*/


                //kitörlöm az összes intervallumot, amit teljesen befed a hozzáadandó intervallum.
                var toDelete = TimeRanges
                               .Where(x => x.DateTimeStart >= tcTimeRange.DateTimeStart && x.EndOfTimeRange(TimeUnit) <= tcTimeRange.EndOfTimeRange(TimeUnit))
                               .ToList();
                foreach (var tr in toDelete)
                {
                    RemoveTimeRangeFromList(tr);
                }

                //megnézem, van e olyan intervallum, amit a hozzáadandó időszak kezdetével összeér.
                var startIntersecting = TimeRanges
                                        .Where(x => x.DateTimeStart <= tcTimeRange.DateTimeStart && x.EndOfTimeRange(TimeUnit) >= tcTimeRange.DateTimeStart)
                                        .FirstOrDefault();
                //megnézem, van e olyan intervallum, amit a hozzáadandó időszak végével összeér.
                var endIntersecting = TimeRanges
                                      .Where(x => x.DateTimeStart <= tcTimeRange.EndOfTimeRange(TimeUnit) && x.EndOfTimeRange(TimeUnit) >= tcTimeRange.EndOfTimeRange(TimeUnit))
                                      .FirstOrDefault();

                var worktr = newTaskControl_TimeRange(tcTimeRange.DateTimeStart, tcTimeRange.DurationCount);
                // Hozzáadoma listához az új időintervallumot
                AddTimeRangeToList(worktr);

                //megnézem, van e olyan intervallum, amit a hozzáadandó időszak kezdetével összeér. Ha van ilyen, akkor összevonom a hozzáadandó időszakkal.
                var mergedtr = MergeInList(worktr, startIntersecting);

                //megnézem, van e olyan intervallum, amit a hozzáadandó időszak végével összeér. Ha van ilyen, akkor összevonom a hozzáadandó időszakkal.
                MergeInList(mergedtr, endIntersecting);
            }

            //Az új időintervallumot felveszem a listába
            SaveChanges();
        }
Пример #4
0
        private bool Mergeble(TaskControl_TimeRange timeRange1, TaskControl_TimeRange timeRange2)
        {
            //ha frodított a sorrend, akkor megfordítva hívom meg
            if (timeRange2.DateTimeStart < timeRange1.DateTimeStart)
            {
                return(Mergeble(timeRange2, timeRange1));
            }

            return(timeRange1.EndOfTimeRange(TimeUnit) >= timeRange2.DateTimeStart);
        }
Пример #5
0
        private Tuple <TaskControl_TimeRange, TaskControl_TimeRange?> Split(TaskControl_TimeRange timeRange, DateTime splittime)
        {
            if (!Splitable(timeRange, splittime))
            {
                throw new Exception("Cannot split");
            }

            TaskControl_TimeRange timeRange1 = newTaskControl_TimeRange(timeRange.DateTimeStart, TimeCountBetween(timeRange.DateTimeStart, splittime));

            TaskControl_TimeRange timeRange2 = newTaskControl_TimeRange(splittime, TimeCountBetween(splittime, timeRange.EndOfTimeRange(TimeUnit)));

            return(new Tuple <TaskControl_TimeRange, TaskControl_TimeRange?>(timeRange1, timeRange2));
        }
Пример #6
0
        private void SplitInList(TaskControl_TimeRange timeRange, DateTime splittime)
        {
            if (timeRange == null)
            {
                return;
            }

            //ha az időintervallumok összeérnek
            if (Splitable(timeRange, splittime))
            {
                //kiszedem a listából
                RemoveTimeRangeFromList(timeRange);

                //szétbontom
                var splittedTimeRanges = Split(timeRange, splittime);

                //felveszem listába
                AddTimeRangeToList(splittedTimeRanges.Item1);

                AddTimeRangeToList(splittedTimeRanges.Item2);
            }
        }
Пример #7
0
 private bool Splitable(TaskControl_TimeRange timeRange, DateTime splittime)
 {
     return(splittime > timeRange.DateTimeStart && splittime < timeRange.EndOfTimeRange(TimeUnit));
 }
Пример #8
0
        //private void AddTimeRangeToList(TimeRange timeRange) => AddTimeRangeToList(new TaskControl_TimeRange(timeRange.DateTimeStart, timeRange.DurationCount));

        protected virtual void RemoveTimeRangeFromList(TaskControl_TimeRange timeRangeToMerge)
        {
            TimeRanges.Remove(timeRangeToMerge);
        }