public void Init() { var mockDB = new Mock <DataModel>(); var list = new HoursList(mockDB.Object); test = list.Create(); }
/// <summary> /// Create the constraints from the datamodel /// </summary> /// <returns>The created array of XElements</returns> /// <param name="dB">Datamodel.</param> public override XElement[] Create(DataModel dB) { var query = from tf in dB.TimesOff join activity in dB.ClassTeacherSubjects on tf.ItemId equals activity.SubjectId join sub in dB.SubjectGrades on tf.ItemId equals sub.SubjectId where tf.ItemType == 2 && sub.CollectionId == null group new { day = tf.Day, lessonIndex = tf.LessonIndex, tf.ItemId, sub.CollectionId } by tf.ItemId into g select g; var result = new List <XElement>(); var hours = new HoursList(dB); foreach (var item in query) { var array = new bool[Enum.GetValues(typeof(Days)).Length, hours.numberOfHours]; foreach (var set in item) { array[set.day, set.lessonIndex - 1] = true; } result.Add(new ConstraintActivitiesPreferredStartingTimes() { SubjectId = item.First().ItemId, TimeOffArray = array }.ToXelement()); } return(result.ToArray()); }
public FetInputGenerator(DataModel model) { Model = model; // Initialize list objects DaysList = new DaysList(Model); HoursList = new HoursList(Model); TeachersList = new TeachersList(Model); SubjectsList = new SubjectsList(Model); ActivitiesList = new ActivitiesList(Model); YearsList = new YearsList(Model); TimeConstraintsList = new TimeConstraintsList(Model); SpaceConstraintsList = new SpaceConstraintsList(Model); RoomsList = new RoomsList(Model); }
/// <summary> /// Constructor, Intializing RelayCommands and Lists /// </summary> public StopwatchTimersVM() { // Relay commands to handle any task related to FirstStopwatch StartFirstStopwatchCommand = new RelayCommand(() => StartFirstStopwatch()); StopFirstStopwatchCommand = new RelayCommand(() => StopFirstStopwatch()); PauseFirstStopwatchCommand = new RelayCommand(() => PauseFirstStopwatch()); ResetFirstStopwatchCommand = new RelayCommand(() => ResetFirstStopwatch()); EmptyFirstStopWatchListCommand = new RelayCommand(() => EmptyFirstStopwatchList()); // Relay commands to handle any task related to SecondStopwatch StartSecondStopwatchCommand = new RelayCommand(() => StartSecondStopwatch()); StopSecondStopwatchCommand = new RelayCommand(() => StopSecondStopwatch()); PauseSecondStopwatchCommand = new RelayCommand(() => PauseSecondStopwatch()); ResetSecondStopwatchCommand = new RelayCommand(() => ResetSecondStopwatch()); EmptySecondStopWatchListCommand = new RelayCommand(() => EmptySecondStopwatchList()); // Relay commands to handle any task related to ThirdStopwatch StartThirdStopwatchCommand = new RelayCommand(() => StartThirdStopwatch()); StopThirdStopwatchCommand = new RelayCommand(() => StopThirdStopwatch()); PauseThirdStopwatchCommand = new RelayCommand(() => PauseThirdStopwatch()); ResetThirdStopwatchCommand = new RelayCommand(() => ResetThirdStopwatch()); EmptyThirdStopWatchListCommand = new RelayCommand(() => EmptyThirdStopwatchList()); // Filling the HoursList with 0-24 hours for (short i = 0; i <= 99; i++) { HoursList.Add(i); } // Filling the MinutesList and SecondsList with 0-60 minutes for (short i = 0; i <= 60; i++) { MinutesList.Add(i); SecondsList.Add(i); } StartFirstTimerCommand = new RelayCommand(() => StartFirstTimer()); PauseFirstTimerCommand = new RelayCommand(() => PauseFirstTimer()); StopFirstTimerCommand = new RelayCommand(() => StopFirstTimer()); StartSecondTimerCommand = new RelayCommand(() => StartSecondTimer()); PauseSecondTimerCommand = new RelayCommand(() => PauseSecondTimer()); StopSecondTimerCommand = new RelayCommand(() => StopSecondTimer()); StartThirdTimerCommand = new RelayCommand(() => StartThirdTimer()); PauseThirdTimerCommand = new RelayCommand(() => PauseThirdTimer()); StopThirdTimerCommand = new RelayCommand(() => StopThirdTimer()); }
public async Task reloadDataBase() { IPermanentStorageService storage = Mvx.Resolve <IPermanentStorageService>(); INotificationService notifications = Mvx.Resolve <INotificationService>(); var items = await storage.List <MedicationDosage>(); if (items == null) { return; } var medicationList = new List <MedicationDosage>(items); foreach (var item in medicationList) { var dosageHours = new List <TimeSpan>(); var hours = item.Hours.Split(new string[] { ", " }, StringSplitOptions.None); dosageHours = HoursList .Where(h => hours.Contains(h.Name)) .Select(i => i.Hour) .ToList(); if (dosageHours.Count > 0) { item.DosageHours = dosageHours; item.RingUri = ringUri; // szud bi in som separet entity await notifications.CancelAllNotificationsForMedication(item); await storage.SaveAsync <MedicationDosage>(item); await DbHelper.AddNotificationOccurrences(item); await notifications.ScheduleNotifications(item); } } }
/// <summary> /// Gets the data from the datamodel and creates the constraints /// </summary> /// <returns>The created list of constraints</returns> /// <param name="dB">Datamodel</param> public override XElement[] Create(DataModel dB) { var query = from grade in dB.GradesLookup join stage in dB.StagesLookup on grade.StageId equals stage.StageId join weekend in dB.Weekends on stage.SectionId equals weekend.SectionId where grade.IsActive == true select new { grade.GradeName, dayIndex = weekend.DayIndex }; var hours = new HoursList(dB); hours.Create(); var grades = new List <string>(); //A tempeorary list to check for duplicates var result = new List <XElement>(); foreach (var item in query) { // Continue if we've already seen this grade if (grades.Contains(item.GradeName)) { continue; } grades.Add(item.GradeName); var temp = query.Where(x => x.GradeName.Equals(item.GradeName)).Select(x => x.dayIndex); result.Add(new ConstraintPeriodSection { Students = item.GradeName, DaysList = temp.Select(day => (Days)day).ToList(), NumberOfHours = hours.numberOfHours }.ToXelement()); } return(result.ToArray()); }
private DateTime?ComputeNextTime() { // Test Cases: // @"* * * * * * *"; // @"23-37 * * * * * *"; // @"10-36/3 * * * * * *"; // @"10,23,27,33,55 * * * * * *"; // @"13 * * * * * *"; // @"* * * * * 1 *"; // @"1 2 3 5 12 1 *"; // @"1 2 3 * * 0 *"; // @"1 2 15 * * 0 *"; // @"* * * * * 0 *"; // @"20 * * * * 0 *"; // @"1 2 3 17 9 * 2011"; DateTime now = DateTime.Now; DateTime?nextTime = null; for (int y = YearsList.GetIndex(now.Year); y < YearsList.Count; y++) { for (int o = MonthsList.GetIndex(now.Month); o < MonthsList.Count; o++) { for (int d = 0; d < DaysList.Count; d++) { for (int w = WeekdaysList.GetIndex((int)now.DayOfWeek); w < WeekdaysList.Count; w++) { DateTime weekday = DateTime.MinValue; bool dayResult = DateTime.TryParse(string.Format(CultureInfo.InvariantCulture, @"{0}-{1}-{2} {3}:{4}:{5}", YearsList[y], MonthsList[o], DaysList[d], 0, 0, 0), out weekday); if (dayResult && (int)weekday.DayOfWeek == WeekdaysList[w]) { if (WeekdaysList[w] > (int)now.DayOfWeek) { DateTime target = DateTime.MinValue; bool parseResult = DateTime.TryParse(string.Format(CultureInfo.InvariantCulture, @"{0}-{1}-{2} {3}:{4}:{5}", YearsList[y], MonthsList[o], DaysList[d], HoursList[0], MinutesList[0], SecondsList[0]), out target); if (parseResult && target > now) { return(nextTime = target); } } else { for (int h = HoursList.GetIndex(now.Hour); h < HoursList.Count; h++) { for (int m = MinutesList.GetIndex(now.Minute); m < MinutesList.Count; m++) { for (int s = 0; s < SecondsList.Count; s++) { DateTime target = DateTime.MinValue; bool parseResult = DateTime.TryParse(string.Format(CultureInfo.InvariantCulture, @"{0}-{1}-{2} {3}:{4}:{5}", YearsList[y], MonthsList[o], DaysList[d], HoursList[h], MinutesList[m], SecondsList[s]), out target); if (parseResult && target > now) { return(nextTime = target); } } } } } } } } } } return(nextTime); }
/// <summary> /// 编译分析时程表达式 /// </summary> private void BuildExpression() { // Format : "* * * * * * *" // 第1列表示秒数0~59 每 秒用*或者*/1表示 // 第2列表示分钟0~59 每分钟用*或者*/1表示 // 第3列表示小时0~23 每小时用*或者*/1表示 // 第4列表示日期1~31 每 天用*或者*/1表示 // 第5列表示月份1~12 每 月用*或者*/1表示 // 第6列表示星期0~6 每 天用*表示*/1表示 0表示星期天 // 第7列表示月份2000~2099 每年用*或者*/1表示 // * 代表任意 * 每个 // / 代表每隔 /2 每隔2 // - 代表区间 1-7 从1至7 // , 表示单独 1,3 1和3 // 例子: 1-10/2 * * 17 9 * * 描述为 9月17日,在每分钟内,从1-10秒间每隔2秒触发一次 if (string.IsNullOrEmpty(CronExpressionString)) { throw new FormatException("CronExpressionString bad format."); } // 分割字符串 string[] columns = CronExpressionString.Trim().Split(new char[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); // 验证表达式字符串 CronExpressionHelper.ValidateCronExpression(columns); // 构造基础数据 for (int i = 0; i < columns.Length; i++) { string item = columns[i]; switch (i) { case 0: // 秒 SecondsList = CronExpressionHelper.ParseSecondExpression(item); break; case 1: // 分钟 MinutesList = CronExpressionHelper.ParseMinuteExpression(item); break; case 2: // 小时 HoursList = CronExpressionHelper.ParseHourExpression(item); break; case 3: // 日期 DaysList = CronExpressionHelper.ParseDayExpression(item); break; case 4: // 月份 MonthsList = CronExpressionHelper.ParseMonthExpression(item); break; case 5: // 星期 WeekdaysList = CronExpressionHelper.ParseWeekdayExpression(item); break; case 6: // 年份 YearsList = CronExpressionHelper.ParseYearExpression(item); break; default: CronExpressionValidationException.Throw("Maybe validation parsed error."); break; } } if (SecondsList == null || MinutesList == null || HoursList == null || DaysList == null || MonthsList == null || WeekdaysList == null || YearsList == null) { CronExpressionValidationException.Throw("CronExpression parsed collections null."); } // 列表内数据从小到大排序 SecondsList.Sort(); MinutesList.Sort(); HoursList.Sort(); DaysList.Sort(); MonthsList.Sort(); WeekdaysList.Sort(); YearsList.Sort(); }
public SettingsViewModel() { readSettings(); if (settingsData.HoursList == null) { HoursList = new ObservableCollection <TimeItem>() { new TimeItem(Resources.AppResources.MorningLabel) { Hour = TimeSpan.Parse("08:00:00") }, new TimeItem(Resources.AppResources.EveningLabel) { Hour = TimeSpan.Parse("20:00:00") } }; } else { HoursList = new ObservableCollection <TimeItem>(settingsData.HoursList); } var canAdd = this.WhenAnyValue(vm => vm.HoursList.Count, c => c < maxItems); AddHour = ReactiveCommand.Create(() => { var result = UserDialogs.Instance.Prompt(new PromptConfig() .SetInputMode(InputType.Name) .SetTitle(Resources.AppResources.AddHourMessage) .SetPlaceholder(Resources.AppResources.NewHourPlaceHolder) .SetOkText(Resources.AppResources.SaveText) .SetCancelText(Resources.AppResources.CancelText) .SetAction(o => { if (o.Ok) { string newName = string.IsNullOrWhiteSpace(o.Text) ? Resources.AppResources.NewHourPlaceHolder : o.Text; HoursList.Add(new TimeItem(newName)); } })); }, canAdd); RingUri = settingsData.RingUri; SetRingUri = ReactiveCommand.Create <String>(uri => RingUri = uri); this.WindowHours = settingsData.WindowHours; this.SnoozeMinutes = settingsData.SnoozeMinutes; this.SetSnooze = ReactiveCommand.Create <int>(value => this.SnoozeMinutes = value); this.SetWindow = ReactiveCommand.Create <int>(value => this.WindowHours = value); Save = ReactiveCommand.Create(() => { var data = JsonConvert.SerializeObject(new SettingsData() { HoursList = this.HoursList, RingUri = this.ringUri, WindowHours = this.windowHours, SnoozeMinutes = this.snoozeMinutes }); settings.AddOrUpdateValue <string>(key, data); return(true); }); Save.Subscribe(async x => { if (x) { await reloadDataBase(); Mvx.Resolve <IMvxMessenger>().Publish(new SettingsChangeMessage(this, MorningHour, EveningHour, ringUri)); Close(this); } }); }