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); }
/// <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); }
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"); }
public static void AppliesTo(CalendarRule obj, MethodReturnEventArgs<System.Boolean> e, System.DateTime date) { // Abstract }
/// <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; }
/// <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); }
/// <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; }
public static bool CheckValidDate(this CalendarRule obj, DateTime date) { return((obj.ValidFrom == null || obj.ValidFrom <= date) && (obj.ValidUntil == null || obj.ValidUntil >= date)); }
public static void AppliesTo(CalendarRule obj, MethodReturnEventArgs <System.Boolean> e, System.DateTime date) { // Abstract }
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"); }
public CalendarRuleInstanceViewModel(IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent, CalendarRule rule, DateTime dt) : base(appCtx, dataCtx, parent) { this.Rule = rule; this.Date = dt.Date; }