Exemplo n.º 1
0
        public void Init()
        {
            var mockDB = new Mock <DataModel>();
            var list   = new HoursList(mockDB.Object);

            test = list.Create();
        }
Exemplo n.º 2
0
        /// <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());
        }
Exemplo n.º 5
0
        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);
                }
            }
        }
Exemplo n.º 6
0
        /// <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());
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        /// <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();
        }
Exemplo n.º 9
0
        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);
                }
            });
        }