public void PeriodLimitsSubtractTest()
        {
            var test = new DateTime(2011, 4, 30);

            var timeRange1 = new TimeRange(new DateTime(2011, 4, 20), new DateTime(2011, 4, 25));
            var timeRange2 = new TimeRange(DateTime.MinValue, new DateTime(2011, 4, 6));

            var calendarDateAdd = new CalendarDateAdd();

            // 예외 기간을 설정합니다. 4월 10일 이전, 4월20일 ~ 4월25일
            //
            calendarDateAdd.ExcludePeriods.Add(timeRange1);
            calendarDateAdd.ExcludePeriods.Add(timeRange2);

            calendarDateAdd.Subtract(test, DurationUtil.Days(1)).Should().Be(test.Subtract(DurationUtil.Days(1)));

            //! 4월 30일로부터 5일전이면 4월25일이지만, 예외기간이 4월20일~4월25일이므로, 4월20일을 반환합니다.
            //
            calendarDateAdd.Subtract(test, DurationUtil.Days(5)).Should().Be(timeRange1.Start);

            //! 4월 30일로부터 20일전이면, 4월10일 이지만 예외기간이 4월20일~4월25일이 있어 4월 5일이 되지만 4월 6일 이전은 예외기간이라 null을 반환합니다.
            //
            calendarDateAdd.Subtract(test, DurationUtil.Days(20)).HasValue.Should().Be.False();

            calendarDateAdd.Add(test, DurationUtil.Days(3)).Should().Be(test.Add(DurationUtil.Days(3)));
        }
Example #2
0
        protected override string GetTitle()
        {
            if (endTime > 0.01)
            {
                string title = null;
                if (endTime - Planetarium.GetUniversalTime() > 0.0)
                {
                    title = (waitingText ?? "Time to completion:") + " " + DurationUtil.StringValue(endTime - Planetarium.GetUniversalTime());
                }
                else
                {
                    title = completionText ?? "Wait time over";
                }

                // Add the string that we returned to the titleTracker.  This is used to update
                // the contract title element in the GUI directly, as it does not support dynamic
                // text.
                titleTracker.Add(title);

                return(title);
            }
            else
            {
                return((preWaitText ?? "Waiting time required:") + " " + DurationUtil.StringValue(duration));
            }
        }
Example #3
0
        protected override string GetNotes()
        {
            if (duration > 0.0 && Root.ContractState == Contract.State.Active)
            {
                if (trackedVessel == null)
                {
                    return("No vessel currently matching parameters.");
                }
                else if (!waiting)
                {
                    return("Active Vessel:");
                }
                else
                {
                    string note = "Time remaining for " + trackedVessel.vesselName + ": " +
                                  DurationUtil.StringValue(completionTime - Planetarium.GetUniversalTime());

                    // Add the string that we returned to the noteTracker.  This is used to update
                    // the contract notes element in the GUI directly, as it does support dynamic
                    // text.
                    noteTracker[notePrefix + note] = note;

                    return(note);
                }
            }

            return(base.GetNotes());
        }
Example #4
0
        protected override string GetTitle()
        {
            // Set the first part of the output
            string output;

            if (!string.IsNullOrEmpty(title))
            {
                output = title;
            }
            else
            {
                // Set the vessel name
                output = "Vessel: ";
                if ((waiting || state == ParameterState.Complete) && trackedVessel != null)
                {
                    output += trackedVessel.vesselName;
                }
                else if (!string.IsNullOrEmpty(define))
                {
                    output += define + " (new)";
                }
                else if (vesselList.Any())
                {
                    bool first = true;
                    foreach (string vesselName in vesselList)
                    {
                        if (!first)
                        {
                            output += " OR ";
                        }
                        output += vesselName;
                        first   = false;
                    }
                }
                else
                {
                    output += "Any";
                }
            }

            // Not yet complete, add duration
            if (state != ParameterState.Complete)
            {
                // Add duration
                if (duration > 0.0)
                {
                    output += "; Duration: " + DurationUtil.StringValue(duration);
                }
            }
            // If we're complete and a custom title hasn't been provided, try to get a better title
            else if (!string.IsNullOrEmpty(title))
            {
                if (ParameterCount == 1)
                {
                    return(GetParameter(0).Title);
                }
            }

            return(output);
        }
Example #5
0
        protected override string GetParameterTitle()
        {
            Vessel currentVessel = CurrentVessel();

            string title = null;

            if (currentVessel != null && endTimes.ContainsKey(currentVessel.id) && endTimes[currentVessel.id] > 0.01 ||
                currentVessel == null && endTime > 0.01)
            {
                double time = currentVessel != null ? endTimes[currentVessel.id] : endTime;
                if (time - Planetarium.GetUniversalTime() > 0.0)
                {
                    title = (waitingText ?? "Time to completion:") + " " + DurationUtil.StringValue(time - Planetarium.GetUniversalTime());
                }
                else
                {
                    title = completionText ?? "Wait time over";
                }
            }
            else
            {
                title = (preWaitText ?? "Waiting time required:") + " " + DurationUtil.StringValue(duration);
            }

            return(title);
        }
Example #6
0
        public void CalendarGetGapTest()
        {
            // simmulation of some reservations
            var periods = new TimePeriodCollection
            {
                new DayRangeCollection(2011, 3, 7, 2),
                new DayRangeCollection(2011, 3, 16, 2)
            };

            // the overall search range
            var limits = new CalendarTimeRange(new DateTime(2011, 3, 4), new DateTime(2011, 3, 21));
            var days   = new DayRangeCollection(limits.Start, limits.Duration.Days + 1);

            // limits의 내부이고, 주말인 DayRange를 추가합니다.
            var excludeDays = days.GetDays().Where(day => limits.HasInside(day) && day.DayOfWeek.IsWeekEnd());

            periods.AddAll(excludeDays.Cast <ITimePeriod>());

            var gapCalculator = new TimeGapCalculator <TimeRange>(new TimeCalendar());
            var gaps          = gapCalculator.GetGaps(periods, limits);

            gaps.Count.Should().Be(4);
            gaps[0].IsSamePeriod(new TimeRange(new DateTime(2011, 3, 4), DurationUtil.Days(1))).Should().Be.True();
            gaps[1].IsSamePeriod(new TimeRange(new DateTime(2011, 3, 9), DurationUtil.Days(3))).Should().Be.True();
            gaps[2].IsSamePeriod(new TimeRange(new DateTime(2011, 3, 14), DurationUtil.Days(2))).Should().Be.True();
            gaps[3].IsSamePeriod(new TimeRange(new DateTime(2011, 3, 18), DurationUtil.Days(1))).Should().Be.True();
        }
        public void PeriodLimitsAddTest()
        {
            var test = new DateTime(2011, 4, 12);

            var timeRange1 = new TimeRange(new DateTime(2011, 4, 20), new DateTime(2011, 4, 25)); // 4월 20일~4월25일
            var timeRange2 = new TimeRange(new DateTime(2011, 4, 30), null);                      // 4월 30일 이후

            var calendarDateAdd = new CalendarDateAdd();

            // 예외 기간을 설정합니다. 4월20일 ~ 4월25일, 4월30일 이후
            //
            calendarDateAdd.ExcludePeriods.Add(timeRange1);
            calendarDateAdd.ExcludePeriods.Add(timeRange2);

            calendarDateAdd.Add(test, DurationUtil.Day).Should().Be(test.Add(DurationUtil.Day));

            //! 4월 12일에 8일을 더하면 4월 20일이지만, 20~25일까지 제외되므로, 4월 25일이 된다.
            //
            calendarDateAdd.Add(test, DurationUtil.Days(8)).Should().Be(timeRange1.End);

            //! 4월 20일에 20일을 더하면, 4월 20~25일 제외 후를 계산하면 4월 30일 이후가 된다. 하지만 4월 30일 이후는 제외가 되므로, 결과값은 null이 된다.
            //
            calendarDateAdd.Add(test, DurationUtil.Days(20)).HasValue.Should().Be.False();

            calendarDateAdd.Subtract(test, DurationUtil.Days(3)).Should().Be(test.Subtract(DurationUtil.Days(3)));
        }
        public void CalendarDateAdd1Test()
        {
            CultureTestData.Default
            .RunEach(culture => {
                var timeCalendar = new TimeCalendar(new TimeCalendarConfig
                {
                    Culture   = culture,
                    EndOffset = TimeSpan.Zero
                });

                var calendarDateAdd = new CalendarDateAdd(timeCalendar);

                //! 주중 8시~18시가 Working Time 이고, 4월 4일은 제외한다
                //
                calendarDateAdd.AddWorkingWeekDays();
                calendarDateAdd.ExcludePeriods.Add(new DayRange(2011, 4, 4, calendarDateAdd.TimeCalendar));
                calendarDateAdd.WorkingHours.Add(new HourRangeInDay(8, 18));

                var start = new DateTime(2011, 4, 1, 9, 0, 0);

                calendarDateAdd.Add(start, DurationUtil.Hours(22)).Should().Be(new DateTime(2011, 4, 6, 11, 0, 0));
                calendarDateAdd.Add(start, DurationUtil.Hours(22), SeekBoundaryMode.Fill).Should().Be(new DateTime(2011, 4,
                                                                                                                   6, 11, 0,
                                                                                                                   0));

                calendarDateAdd.Add(start, DurationUtil.Hours(29)).Should().Be(new DateTime(2011, 4, 7, 8, 0, 0));
                calendarDateAdd.Add(start, DurationUtil.Hours(29), SeekBoundaryMode.Fill).Should().Be(new DateTime(2011, 4,
                                                                                                                   6, 18, 0,
                                                                                                                   0));
            });
        }
        public void IQueryOver_AddIsOverlap_IsOverlap_HasRange()
        {
            var loaded =
                UnitOfWork.CurrentSession.QueryOver <User>().AddIsOverlap(
                    new TimeRange(DateTime.Now.AddHours(-1), DurationUtil.Hours(2)),
                    u => u.ActivePeriod.Start,
                    u => u.ActivePeriod.End);

            Assert.IsTrue(loaded.RowCount() > 0);
            loaded.List().RunEach(log.Debug);
        }
Example #10
0
        public void MillisecondTest()
        {
            DurationUtil.Millisecond.Should().Be(TimeSpan.FromMilliseconds(1));

            DurationUtil.Milliseconds(0).Should().Be(TimeSpan.Zero);
            DurationUtil.Milliseconds(1).Should().Be(TimeSpan.FromMilliseconds(1));
            DurationUtil.Milliseconds(2).Should().Be(TimeSpan.FromMilliseconds(2));

            DurationUtil.Milliseconds(-1).Should().Be(TimeSpan.FromMilliseconds(-1));
            DurationUtil.Milliseconds(-2).Should().Be(TimeSpan.FromMilliseconds(-2));
        }
Example #11
0
        public void WeekTest()
        {
            DurationUtil.Week.Should().Be(TimeSpan.FromDays(TimeSpec.DaysPerWeek));

            DurationUtil.Weeks(0).Should().Be(TimeSpan.Zero);
            DurationUtil.Weeks(1).Should().Be(TimeSpan.FromDays(TimeSpec.DaysPerWeek));
            DurationUtil.Weeks(2).Should().Be(TimeSpan.FromDays(TimeSpec.DaysPerWeek * 2));

            DurationUtil.Weeks(-1).Should().Be(TimeSpan.FromDays(TimeSpec.DaysPerWeek * -1));
            DurationUtil.Weeks(-2).Should().Be(TimeSpan.FromDays(TimeSpec.DaysPerWeek * -2));
        }
        public void QueryOverOf_AddIsOverlap_IsOverlap_HasRange()
        {
            var loaded =
                QueryOver.Of <User>()
                .AddIsOverlap(new TimeRange(DateTime.Now.AddHours(-1), DurationUtil.Hours(2)),
                              u => u.ActivePeriod.Start,
                              u => u.ActivePeriod.End)
                .GetExecutableQueryOver(UnitOfWork.CurrentSession);

            loaded.RowCount().Should().Be.GreaterThan(0);
            loaded.List().RunEach(log.Debug);
        }
        protected void CreateTimerParameter()
        {
            if (duration > 0.0)
            {
                durationParameter = new ParameterDelegate <Vessel>("Duration: " + DurationUtil.StringValue(duration),
                                                                   v => false);
                durationParameter.Optional     = true;
                durationParameter.fakeOptional = true;

                AddParameter(durationParameter);
            }
        }
Example #14
0
        public void IQueryable_AddIsOverlap_IsOverlap_HasRange()
        {
            var loaded =
                Users
                .AddIsOverlap(new TimeRange(DateTime.Now.AddHours(-1), DurationUtil.Hours(2)),
                              u => u.ActivePeriod.Start,
                              u => u.ActivePeriod.End)
                .ToList();

            Assert.IsTrue(loaded.Count > 0);
            loaded.RunEach(log.Debug);
        }
        public void ICriteria_AddIsOverlap_IsOverlap_HasPeriod()
        {
            var loaded =
                Repository <User> .CreateCriteria()
                .AddIsOverlap(new TimeRange(DateTime.Now.AddHours(-1), DurationUtil.Hours(2)),
                              "ActivePeriod.Start",
                              "ActivePeriod.End")
                .List <User>();

            Assert.IsTrue(loaded.Count > 0);
            loaded.RunEach(log.Debug);
        }
Example #16
0
        public void IncludeExclude6Test()
        {
            var dateAdd = new DateAdd();

            dateAdd.IncludePeriods.Add(new TimeRange(new DateTime(2011, 3, 10), new DateTime(2011, 3, 20)));
            dateAdd.ExcludePeriods.Add(new TimeRange(new DateTime(2011, 3, 5), new DateTime(2011, 3, 12)));
            dateAdd.ExcludePeriods.Add(new TimeRange(new DateTime(2011, 3, 18), new DateTime(2011, 3, 30)));

            var test = new DateTime(2011, 3, 10);

            dateAdd.Add(test, TimeSpan.Zero).Should().Be(new DateTime(2011, 3, 12));
            dateAdd.Add(test, DurationUtil.Days(1)).Should().Be(new DateTime(2011, 3, 13));
        }
Example #17
0
        public void AllExcludedTest()
        {
            var test = new DateTime(2011, 4, 12);

            var timeRange = new TimeRange(new DateTime(2011, 4, 10), new DateTime(2011, 4, 20));
            var dateAdd   = new DateAdd();

            dateAdd.IncludePeriods.Add(timeRange);
            dateAdd.ExcludePeriods.Add(timeRange);

            dateAdd.Add(test, TimeSpan.Zero).Should().Not.Have.Value();
            dateAdd.Add(test, DurationUtil.Year(2)).Should().Not.Have.Value();
        }
        protected void CreateTimerParameter()
        {
            if (duration > 0.0)
            {
                durationParameter = new ParameterDelegate <Vessel>(
                    Localizer.Format("#cc.param.VesselParameterGroup.duration", DurationUtil.StringValue(duration)),
                    v => false);
                durationParameter.Optional     = true;
                durationParameter.fakeOptional = true;

                AddParameter(durationParameter);
            }
        }
Example #19
0
        /// <summary> Cache some strings for performance gains (less memory churning) </summary>
        private void InitStrings()
        {
            if (!string.IsNullOrEmpty(KerCon_AllowsInterruptionsUpTo))
            {
                return;
            }

            KerCon_AllowsInterruptionsUpTo = Localizer.Format("#KerCon_AllowsInterruptionsUpTo",             // Allows interruptions up to <<1>>
                                                              DurationUtil.StringValue(allowedDowntime));
            KerCon_TimeStartsAfterAccepting = Localizer.Format("#KerCon_TimeStartsAfterAccepting",           // Time starts <<1>> after accepting the contract"
                                                               Lib.Color(DurationUtil.StringValue(waitDuration), Lib.Kolor.Yellow));
            KerCon_Duration_X = Localizer.Format("#KerCon_Duration_X", DurationUtil.StringValue(duration));
        }
Example #20
0
        public void SecondTest()
        {
            DurationUtil.Second.Should().Be(TimeSpan.FromSeconds(1));

            DurationUtil.Seconds(0).Should().Be(TimeSpan.Zero);
            DurationUtil.Seconds(1).Should().Be(TimeSpan.FromSeconds(1));
            DurationUtil.Seconds(2).Should().Be(TimeSpan.FromSeconds(2));
            DurationUtil.Seconds(-1).Should().Be(TimeSpan.FromSeconds(-1));
            DurationUtil.Seconds(-2).Should().Be(TimeSpan.FromSeconds(-2));

            DurationUtil.Seconds(18).Should().Be(new TimeSpan(0, 0, 0, 18));
            DurationUtil.Seconds(18, 496).Should().Be(new TimeSpan(0, 0, 0, 18, 496));
        }
Example #21
0
        public void MinuteTest()
        {
            DurationUtil.Minute.Should().Be(TimeSpan.FromMinutes(1));

            DurationUtil.Minutes(0).Should().Be(TimeSpan.Zero);
            DurationUtil.Minutes(1).Should().Be(TimeSpan.FromMinutes(1));
            DurationUtil.Minutes(2).Should().Be(TimeSpan.FromMinutes(2));
            DurationUtil.Minutes(-1).Should().Be(TimeSpan.FromMinutes(-1));
            DurationUtil.Minutes(-2).Should().Be(TimeSpan.FromMinutes(-2));

            DurationUtil.Minutes(22).Should().Be(new TimeSpan(0, 0, 22, 0));
            DurationUtil.Minutes(22, 55).Should().Be(new TimeSpan(0, 0, 22, 55));
            DurationUtil.Minutes(22, 55, 496).Should().Be(new TimeSpan(0, 0, 22, 55, 496));
        }
Example #22
0
        public void NoPeriodsTest()
        {
            var test = new DateTime(2011, 4, 12);

            var dateAdd = new DateAdd();

            dateAdd.Add(test, DurationUtil.Zero).Should().Be(test);

            dateAdd.Add(test, DurationUtil.Days(1)).Should().Be(test.AddDays(1));
            dateAdd.Add(test, DurationUtil.Days(-1)).Should().Be(test.AddDays(-1));

            dateAdd.Subtract(test, DurationUtil.Days(1)).Should().Be(test.AddDays(-1));
            dateAdd.Subtract(test, DurationUtil.Days(-1)).Should().Be(test.AddDays(1));
        }
Example #23
0
 public void MonthTest()
 {
     CultureTestData.Default
     .RunEach(culture => {
         var calendar = culture.Calendar;
         for (int i = 1; i <= TimeSpec.MonthsPerYear; i++)
         {
             DurationUtil.Month(currentYear, i).Should().Be(
                 TimeSpan.FromDays(calendar.GetDaysInMonth(currentYear, i)));
             DurationUtil.Month(currentYear, i, calendar).Should().Be(
                 TimeSpan.FromDays(calendar.GetDaysInMonth(currentYear, i)));
         }
     });
 }
Example #24
0
        public void IncludeTest()
        {
            var test = new DateTime(2011, 4, 12);

            var timeRange = new TimeRange(new DateTime(2011, 4, 1), DateTime.MaxValue);

            var dateAdd = new DateAdd();

            dateAdd.IncludePeriods.Add(timeRange);

            dateAdd.Add(test, TimeSpan.Zero).Should().Be(test);
            dateAdd.Add(test, DurationUtil.Days(1)).Should().Be(test.AddDays(1));
            dateAdd.Add(test, DurationUtil.Days(365)).Should().Be(test.AddDays(365));
        }
Example #25
0
        public void IncludeExclude4Test()
        {
            var dateAdd = new DateAdd();

            dateAdd.IncludePeriods.Add(new TimeRange(new DateTime(2011, 3, 10), new DateTime(2011, 3, 20)));
            dateAdd.ExcludePeriods.Add(new TimeRange(new DateTime(2011, 3, 10), new DateTime(2011, 3, 15)));
            dateAdd.ExcludePeriods.Add(new TimeRange(new DateTime(2011, 3, 15), new DateTime(2011, 3, 20)));

            var test = new DateTime(2011, 3, 10);

            Assert.IsNull(dateAdd.Add(test, TimeSpan.Zero));
            Assert.IsNull(dateAdd.Add(test, DurationUtil.Days(1)));
            Assert.IsNull(dateAdd.Add(test, DurationUtil.Days(5)));
        }
Example #26
0
        public void IncludeExclude3Test()
        {
            var dateAdd = new DateAdd();

            dateAdd.ExcludePeriods.Add(new TimeRange(new DateTime(2011, 3, 5), new DateTime(2011, 3, 10)));
            dateAdd.IncludePeriods.Add(new TimeRange(new DateTime(2011, 3, 10), new DateTime(2011, 3, 15)));
            dateAdd.ExcludePeriods.Add(new TimeRange(new DateTime(2011, 3, 15), new DateTime(2011, 3, 20)));

            var test = new DateTime(2011, 3, 10);

            dateAdd.Subtract(test, TimeSpan.Zero).Should().Be(test);
            dateAdd.Add(test, DurationUtil.Days(1)).Should().Be(new DateTime(2011, 3, 11));
            dateAdd.Add(test, DurationUtil.Days(5), SeekBoundaryMode.Fill).Should().Be(test.AddDays(5));
            dateAdd.Add(test, DurationUtil.Days(5)).Should().Not.Have.Value();
        }
Example #27
0
 protected override string GetParameterTitle()
 {
     if (state == ParameterState.Failed)
     {
         return("Time expired!");
     }
     else if (endTime > 0.01)
     {
         return("Time remaining: " + DurationUtil.StringValue(endTime - Planetarium.GetUniversalTime()));
     }
     else
     {
         return("Time limit: " + DurationUtil.StringValue(duration));
     }
 }
Example #28
0
        public void HourTest()
        {
            DurationUtil.Hour.Should().Be(TimeSpan.FromHours(1));

            DurationUtil.Hours(0).Should().Be(TimeSpan.Zero);
            DurationUtil.Hours(1).Should().Be(TimeSpan.FromHours(1));
            DurationUtil.Hours(2).Should().Be(TimeSpan.FromHours(2));
            DurationUtil.Hours(-1).Should().Be(TimeSpan.FromHours(-1));
            DurationUtil.Hours(-2).Should().Be(TimeSpan.FromHours(-2));

            DurationUtil.Hours(23).Should().Be(new TimeSpan(0, 23, 0, 0));
            DurationUtil.Hours(23, 22).Should().Be(new TimeSpan(0, 23, 22, 0));
            DurationUtil.Hours(23, 22, 55).Should().Be(new TimeSpan(0, 23, 22, 55));
            DurationUtil.Hours(23, 22, 55, 496).Should().Be(new TimeSpan(0, 23, 22, 55, 496));
        }
Example #29
0
 protected override string GetParameterTitle()
 {
     if (state == ParameterState.Failed)
     {
         return(Localizer.GetStringByTag("#cc.param.Timer.expired"));
     }
     else if (endTime > 0.01)
     {
         return(Localizer.Format("#cc.param.Timer.active", DurationUtil.StringValue(endTime - Planetarium.GetUniversalTime())));
     }
     else
     {
         return(Localizer.Format("#cc.param.Timer.inactive", DurationUtil.StringValue(duration)));
     }
 }
        public void ExcludeTest()
        {
            DateTime test = new DateTime(2011, 4, 12);

            var timeRange       = new TimeRange(new DateTime(2011, 4, 15), new DateTime(2011, 4, 20));
            var calendarDateAdd = new CalendarDateAdd();

            calendarDateAdd.ExcludePeriods.Add(timeRange);

            calendarDateAdd.Add(test, TimeSpan.Zero).Should().Be(test);
            calendarDateAdd.Add(test, DurationUtil.Days(2)).Should().Be(test.AddDays(2));
            calendarDateAdd.Add(test, DurationUtil.Days(3)).Should().Be(timeRange.End);
            calendarDateAdd.Add(test, DurationUtil.Days(3, 0, 0, 0, 1)).Should().Be(timeRange.End.Add(DurationUtil.Millisecond));
            calendarDateAdd.Add(test, DurationUtil.Days(5)).Should().Be(timeRange.End.AddDays(2));
        }