Ejemplo n.º 1
0
        private static decimal Calc(Calendar obj, DateTime from, DateTime until, CalcModes what)
        {
            decimal result = 0;
            var     rules  = obj.RulesAndParents();

            while (from <= until)
            {
                CalendarRule foundRule = null;
                // Find YearlyRule
                foundRule = rules.OfType <YearlyCalendarRule>().FirstOrDefault(r => r.AppliesTo(from));
                // Find DayOfWeekRule
                if (foundRule == null)
                {
                    foundRule = rules.OfType <DayOfWeekCalendarRule>().FirstOrDefault(r => r.AppliesTo(from));
                }
                // Find CommonRule
                if (foundRule == null)
                {
                    foundRule = rules.OfType <CommonCalendarRule>().FirstOrDefault(r => r.AppliesTo(from));
                }

                if (foundRule != null)
                {
                    switch (what)
                    {
                    case CalcModes.WorkingHours:
                        result += foundRule.WorkingHours;
                        break;

                    case CalcModes.WorkingDays:
                        if (foundRule.IsWorkingDay)
                        {
                            result++;
                        }
                        break;

                    case CalcModes.OffDays:
                        if (!foundRule.IsWorkingDay)
                        {
                            result++;
                        }
                        break;
                    }
                }
                else
                {
                    Logging.Log.WarnFormat("No Calendar rule found in {0} for {1}", obj.Name, from);
                }

                from = from.AddDays(1);
            }

            return(result);
        }
        public new void CreateSampleModels()
        {
            var calendar = new Calendar("CAL_0000");
            calendar.AddMetadata("a", new MetadataValue("A"));
            calendar.AddMetadata("b", new MetadataValue("B"));
            calendar.AddLocale(new CultureInfo("en"), new CalendarLocale {Name = "Calendar"});
            calendar.AddLocale(new CultureInfo("ko"), new CalendarLocale {Name = "달력"});
            Repository<Calendar>.SaveOrUpdate(calendar);

            var calendarRule = new CalendarRule(calendar, "테스트규칙");
            Repository<CalendarRule>.SaveOrUpdate(calendarRule);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// <paramref name="calendar"/>의 Rules 컬렉션에 <paramref name="rule"/>을 추가합니다.
        /// </summary>
        /// <param name="calendar"></param>
        /// <param name="rule"></param>
        public void AddCalendarRule(Calendar calendar, CalendarRule rule)
        {
            calendar.ShouldNotBeNull("calendar");
            rule.ShouldNotBeNull("rule");

            rule.Calendar = calendar;

            if(calendar.Rules.Contains(rule) == false)
                calendar.Rules.Add(rule);

            Session.SaveOrUpdate(calendar);
            Session.SaveOrUpdate(rule);
        }
Ejemplo n.º 4
0
 public static void ToString(CalendarRule obj, MethodReturnEventArgs<System.String> e)
 {
     e.Result = string.Format("{0}; {1} {2}", obj.Name, obj.WorkingHours, obj.WorkingHours == 1 ? "hour" : "hours");
 }
Ejemplo n.º 5
0
 public static void AppliesTo(CalendarRule obj, MethodReturnEventArgs<System.Boolean> e, System.DateTime date)
 {
     // Abstract
 }
Ejemplo n.º 6
0
        /// <summary>
        /// 특정 날짜를 공휴일로 지정하는 룰을 만듭니다. 
        /// </summary>
        /// <param name="calendar"></param>
        /// <param name="holyday"></param>
        /// <returns></returns>
        public CalendarRule CreateHolyDayCalendarRule(Calendar calendar, DateTime holyday)
        {
            calendar.ShouldNotBeNull("calendar");

            if(log.IsDebugEnabled)
                log.Debug(@"Calendar[{0}] 에 공휴일에 대한 Rule을 추가합니다  공휴일=[{1}]", calendar.Code, holyday);

            var rule = new CalendarRule(calendar, "Holyday");
            rule.RulePeriod.Setup(holyday.StartTimeOfDay(), holyday.EndTimeOfDay());
            rule.DayOrException = 0;
            rule.IsWorking = 0;
            rule.ViewOrder = rule.DayOrException;

            calendar.Rules.Add(rule);
            Session.SaveOrUpdate(rule);

            return rule;
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 특정 Calendar에 CalendarRule을 새로 만든다.
        /// </summary>
        /// <param name="calendar"></param>
        /// <param name="name"></param>
        /// <param name="dayOfWeek"></param>
        /// <param name="isWorking"></param>
        /// <param name="timePeriod"></param>
        /// <returns></returns>
        public CalendarRule CreateCalendarRule(Calendar calendar, string name, DayOfWeek dayOfWeek, int? isWorking, ITimePeriod timePeriod)
        {
            calendar.ShouldNotBeNull("calendar");

            if(log.IsDebugEnabled)
                log.Debug(@"새로운 CalendarRule (Working Time 규칙)을 생성합니다... " +
                          @"calendar={0}, name={1}, dayOfWeek={2}, isWorking={3}, timePeriod={4}",
                          calendar, name, dayOfWeek, isWorking, timePeriod);

            var rule = new CalendarRule(calendar, name);

            if(timePeriod != null && timePeriod.IsAnytime == false)
                rule.RulePeriod.Setup(timePeriod.StartAsNullable, timePeriod.EndAsNullable);

            rule.DayOrException = dayOfWeek.GetHashCode() + 1;
            rule.IsWorking = isWorking;

            calendar.Rules.Add(rule);
            Session.SaveOrUpdate(calendar);

            return Repository<CalendarRule>.SaveOrUpdate(rule);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 특정 Calendar에 CalendarRule을 새로 만든다.
        /// </summary>
        /// <param name="calendar">규칙이 적용될 <see cref="Calendar"/></param>
        /// <param name="name">규칙 명</param>
        /// <returns></returns>
        public CalendarRule CreateCalendarRule(Calendar calendar, string name)
        {
            calendar.ShouldNotBeNull("calendar");
            name.ShouldNotBeWhiteSpace("name");

            if(log.IsDebugEnabled)
                log.Debug(@"새로운 CalendarRule (Working Time 규칙)을 생성합니다. calendar={0}, name={1}", calendar, name);

            var calendarRule = new CalendarRule(calendar, name);

            calendar.Rules.Add(calendarRule);
            Session.SaveOrUpdate(calendar);

            return Repository<CalendarRule>.SaveOrUpdate(calendarRule);
        }
 public CalendarRuleInstanceViewModel(IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent, CalendarRule rule, DateTime dt)
     : base(appCtx, dataCtx, parent)
 {
     this.Rule = rule;
     this.Date = dt.Date;
 }
Ejemplo n.º 10
0
 public static bool CheckValidDate(this CalendarRule obj, DateTime date)
 {
     return((obj.ValidFrom == null || obj.ValidFrom <= date) && (obj.ValidUntil == null || obj.ValidUntil >= date));
 }
Ejemplo n.º 11
0
 public static void AppliesTo(CalendarRule obj, MethodReturnEventArgs <System.Boolean> e, System.DateTime date)
 {
     // Abstract
 }
Ejemplo n.º 12
0
 public static void ToString(CalendarRule obj, MethodReturnEventArgs <System.String> e)
 {
     e.Result = string.Format("{0}; {1} {2}", obj.Name, obj.WorkingHours, obj.WorkingHours == 1 ? "hour" : "hours");
 }
Ejemplo n.º 13
0
 public CalendarRuleInstanceViewModel(IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent, CalendarRule rule, DateTime dt)
     : base(appCtx, dataCtx, parent)
 {
     this.Rule = rule;
     this.Date = dt.Date;
 }