Exemple #1
0
        public bool DeleteReviewProperty(int id)
        {
            RepeatRule r = new RepeatRule();

            r.create_date    = new DateTime();
            r.create_user_id = 001;
            r.end_time       = new DateTime();
            r.id             = 001;
            r.is_delete      = "是";
            r.is_strict      = "否";
            r.modify_date    = new DateTime();
            r.modify_user_id = 001;
            r.name           = "端午";
            r.remark         = "中国传统节日";
            r.start_time     = new DateTime();

            RepeatRule r1 = new RepeatRule();

            r1.create_date    = new DateTime();
            r1.create_user_id = 002;
            r1.end_time       = new DateTime();
            r1.id             = 002;
            r1.is_delete      = "否";
            r1.is_strict      = "否";
            r1.modify_date    = new DateTime();
            r1.modify_user_id = 002;
            r1.name           = "中秋";
            r1.remark         = "中国传统节日";
            r1.start_time     = new DateTime();

            return(false);
        }
Exemple #2
0
        public IList <RepeatRule> QueryMaterialReviewRule(string name, string is_strict, string remark)
        {
            IList <RepeatRule> R  = new BindingList <RepeatRule>();
            RepeatRule         r1 = new RepeatRule();
            RepeatRule         r2 = new RepeatRule();

            r1.name           = "小二";
            r1.is_strict      = "否";
            r1.remark         = "古代酒店、客栈服务员";
            r1.create_date    = new DateTime();
            r1.create_user_id = 1023;
            r1.end_time       = new DateTime();
            r1.id             = 2;
            r1.is_delete      = "是";
            r1.modify_date    = new DateTime();
            r1.modify_user_id = 200089;
            r1.start_time     = new DateTime();

            r2.name           = "小三";
            r2.is_strict      = "是";
            r2.remark         = "全世界女人的公敌";
            r2.create_date    = new DateTime();
            r2.create_user_id = 1045;
            r2.end_time       = new DateTime();
            r2.id             = 45;
            r2.is_delete      = "是";
            r2.modify_date    = new DateTime();
            r2.modify_user_id = 300046;
            r2.start_time     = new DateTime();

            R.Add(r1);
            R.Add(r2);
            return(R);
        }
Exemple #3
0
 internal RepeatStatement(RepeatRule outerInstance, int times, Statement statement, Description testDescription)
 {
     this._outerInstance = outerInstance;
     this.Times          = times;
     this.Statement      = statement;
     this.TestName       = testDescription.DisplayName;
 }
        private void dgvRule_SelectionChanged(object sender, EventArgs e)
        {
            DataGridView dgview = sender as DataGridView;

            if (dgview.SelectedRows.Count > 0)
            {
                RepeatRule rule = dgview.SelectedRows[0].Tag as RepeatRule;
                var        days = rule.GetDays(Year, Month);
                days.AddRange(getBAMonthsAffairDays(Year, Month, rule));

                calendar1.GetSchedules().ForEach(s => {
                    if (s.BackColor != Setting.DutyFieldColor)
                    {
                        s.BackColor = Setting.DutyFieldColor;
                    }
                    if (s.Item != null)
                    {
                        if (days.Any(t => t == s.Start.Day))
                        {
                            s.BackColor = Setting.DutyHilightColor;
                        }
                    }
                });
            }
        }
Exemple #5
0
        public void ParseMultipleOperators()
        {
            var t_Rule = new RepeatRule(new List <IParseRule>
            {
                new OperatorRule("+"),
                new OperatorRule("-")
            });

            var t_Expression = t_Rule.Match(CreateState(
                                                new Token(TokenType.Operator, "+"),
                                                new Token(TokenType.Operator, "-"),
                                                new Token(TokenType.Operator, "+"),
                                                new Token(TokenType.Operator, "-"),
                                                new Token(TokenType.Operator, "+"),
                                                new Token(TokenType.Operator, "-")));

            t_Expression
            .HasError()
            .Should()
            .BeFalse();

            var t_Expressions = t_Expression.Value.Expressions;

            t_Expressions.Should().HaveCount(6);
        }
Exemple #6
0
        private void BarButtonItem_Look_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Rt = (RepeatRule)PartsMange_MaterialReviewRuleManage_MaterialReviewRuleManage_QueryValue_GridView.GetFocusedRow();
            AddReviewRule AR = new AddReviewRule();

            AR.Tag      = "look";
            AR.LookRule = Rt;
            AR.ShowDialog();
        }
Exemple #7
0
        private void PartsMange_MaterialReviewRuleManage_MaterialReviewRuleManage_Look_SimpleButton_Click(object sender, EventArgs e)
        {
            Rt = (RepeatRule)PartsMange_MaterialReviewRuleManage_MaterialReviewRuleManage_QueryValue_GridView.GetFocusedRow();
            AddReviewRule AR = new AddReviewRule();

            AR.Tag      = "look";
            AR.LookRule = Rt;
            AR.ShowDialog();
        }
        public void RepeatOneCharacter()
        {
            var oneCharRule = new LiteralRule("oneChar", null, "g");
            var rule        = new RepeatRule("Repeat", null, oneCharRule, null, null) as IRule;
            var match       = rule.Match(new ExplorerContext("ggggg")).FirstOrDefault();

            Assert.IsNotNull(match, "Success");
            Assert.AreEqual(rule.RuleName, match.Rule.RuleName, "Rule");
            Assert.AreEqual(5, match.Text.Length, "MatchLength");
            Assert.AreEqual(5, ToList(match.ComputeOutput()).Count(), "Contents");
        }
Exemple #9
0
        private static void LoadRulesElement(int year, int month, Person person, XmlElement p)
        {
            RepeatRule rule = null;

            foreach (XmlElement rs in p.ChildNodes)
            {
                foreach (XmlElement r in rs.ChildNodes)
                {
                    switch (r.Name)
                    {
                    case START:
                        rule       = new RepeatRule(year, month, null);
                        rule.Start = DateTime.Parse(r.InnerText);
                        break;

                    case END:
                        if (r.InnerText == "-")
                        {
                            rule.End = DateTime.MaxValue;
                        }
                        else
                        {
                            rule.End = DateTime.Parse(r.InnerText);
                        }
                        break;

                    case REASON:
                        rule.Reason = r.InnerText;
                        break;

                    case ACCESSORY1:
                        rule.Accessory1 = (StandbyList.Accessory) int.Parse(r.InnerText);
                        break;

                    case ACCESSORY2:
                        rule.Accessory2 = (StandbyList.Accessory) int.Parse(r.InnerText);
                        break;

                    case RULECLASS:
                        LoadRuleElement(rule, r);
                        break;

                    case EXHOLIDAY:
                        rule.IsExcludeHoliday = bool.Parse(r.InnerText);
                        break;
                    }
                }
                if (rule != null)
                {
                    person.Requirement.RepeatRule.Add(rule);
                }
            }
        }
        /// <summary>
        /// ルールの削除を実行します
        /// </summary>
        /// <param name="target">削除する対象のルール</param>
        private void DeleteOtherMonthsRules(RepeatRule target)
        {
            // 今月よりも先のルールを匿名型(person, date)の形式でリストする。
            var plist = StandbyLists.Where(sl => new DateTime(sl.Year, sl.Month, DateTime.DaysInMonth(sl.Year, sl.Month)) > new DateTime(Year, Month, DateTime.DaysInMonth(Year, Month))).Select(st => new { person = st.Persons.FirstOrDefault(p => p.ID == Person.ID), date = new DateTime(st.Year, st.Month, 1) });
            // 今月よりも前のルールを匿名型(person, date)の形式でリストする。
            var blist = StandbyLists.Where(li => new DateTime(li.Year, li.Month, 1) < new DateTime(Year, Month, 1)).Select(st => new { person = st.Persons.FirstOrDefault(p => p.ID == Person.ID), date = new DateTime(st.Year, st.Month, 1) });
            var tdays = target.GetDays(Year, Month);

            tdays.AddRange(getBAMonthsAffairDays(Year, Month, target));
            tdays.Where(tday => tday > 0 && DateTime.DaysInMonth(Year, Month) >= tday).ToList().ForEach(tday =>
            {
                // 現在対象の個人のRepeatRuleを書き換え
                var tdate = new DateTime(Year, Month, tday);
                if (!CheckTargetDate(Year, Month, tday))
                {
                    Person[tdate] = PossibleDays.Status.None;
                }
            });
            // 今月より前のルールの終了日(End)を書き換える
            blist.ToList().ForEach(b =>
            {
                if (b.person == null)
                {
                    return;
                }
                var findtarget = b.person.Requirement.RepeatRule.Find(f => f == target);
                if (findtarget != null)
                {
                    findtarget.End = new DateTime(Year, Month, 1).AddDays(-1);
                }
            });
            // 今月より先のルールを削除し、不都合日を削除する
            plist.ToList().ForEach(p =>
            {
                if (p.person == null)
                {
                    return;
                }
                p.person.Requirement.RepeatRule.Remove(target);
                var days = target.GetDays(p.date.Year, p.date.Month);
                days.Where(day => day > 0 && DateTime.DaysInMonth(p.date.Year, p.date.Month) >= day).ToList().ForEach(day =>
                {
                    var tdate = new DateTime(p.date.Year, p.date.Month, day);
                    if (!CheckTargetDate(tdate.Year, tdate.Month, day))
                    {
                        p.person[tdate] = PossibleDays.Status.None;
                    }
                });
            });
            // 個人のRepeatRuleリストからルールを削除します
            Person.Requirement.RepeatRule.Remove(target);
        }
Exemple #11
0
        public IList <RepeatRule> rep()
        {
            IList <RepeatRule> r  = new BindingList <RepeatRule>();
            RepeatRule         R  = new RepeatRule();
            RepeatRule         Ra = new RepeatRule();
            RepeatRule         Rb = new RepeatRule();

            R.name           = "李元霸";
            R.remark         = "吊丝中的战斗机";
            R.is_strict      = "否";
            R.create_date    = new DateTime();
            R.create_user_id = 302090;
            R.end_time       = new DateTime();
            R.id             = 1;
            R.is_delete      = "是";
            R.modify_date    = new DateTime();
            R.modify_user_id = 12;
            R.start_time     = new DateTime();

            Ra.name           = "程咬金";
            Ra.remark         = "二逼中的战斗机";
            Ra.is_strict      = "是";
            Ra.create_date    = new DateTime();
            Ra.create_user_id = 302879;
            Ra.end_time       = new DateTime();
            Ra.id             = 2;
            Ra.is_delete      = "是";
            Ra.modify_date    = new DateTime();
            Ra.modify_user_id = 15;
            Ra.start_time     = new DateTime();

            Rb.name           = "宇文成都";
            Rb.remark         = "战斗机中的战斗机";
            Rb.is_strict      = "是";
            Rb.create_date    = new DateTime();
            Rb.create_user_id = 302400;
            Rb.end_time       = new DateTime();
            Rb.id             = 3;
            Rb.is_delete      = "是";
            Rb.modify_date    = new DateTime();
            Rb.modify_user_id = 18;
            Rb.start_time     = new DateTime();

            r.Add(R);
            r.Add(Ra);
            r.Add(Rb);
            return(r);
        }
Exemple #12
0
        public void RepeatWithSequenceAndInterleave()
        {
            var interleave = new RepeatRule("interleave", null, new LiteralRule(null, null, " "), 0, null);
            var seq        = new SequenceRule("seq", null, new[]
            {
                new TaggedRule(new LiteralRule(null, null, "|")),
                new TaggedRule("t", new LiteralRule(null, null, "a"))
            });
            var rule  = new RepeatRule("rep", null, seq, 1, null);
            var text  = "|a  |  a   | a";
            var match = rule.Match(new ExplorerContext(text, interleave)).FirstOrDefault();

            Assert.IsNotNull(match, "Success");
            Assert.AreEqual(rule.RuleName, match.Rule.RuleName, "Rule");
            Assert.AreEqual(text.Length, match.Text.Length, "MatchLength");
            Assert.AreEqual(3, ToList(match.ComputeOutput()).Count(), "Contents");
        }
Exemple #13
0
        public IList <RepeatRule> LookOverMaterialReviewRule(int id)
        {
            IList <RepeatRule> MR = new BindingList <RepeatRule>();
            RepeatRule         ra = new RepeatRule();
            RepeatRule         rb = new RepeatRule();
            RepeatRule         rc = new RepeatRule();

            ra.name           = "裴元庆";
            ra.remark         = "拿手活:金光泻地";
            ra.is_strict      = "是";
            ra.create_date    = new DateTime();
            ra.create_user_id = 001;
            ra.end_time       = new DateTime();
            ra.id             = 01;
            ra.is_delete      = "否";
            ra.modify_date    = new DateTime();
            ra.modify_user_id = 10001;
            ra.start_time     = new DateTime();

            rb.name           = "罗成";
            rb.remark         = "拿手活:千军斩将";
            rb.is_strict      = "否";
            rb.create_date    = new DateTime();
            rb.create_user_id = 002;
            rb.end_time       = new DateTime();
            rb.id             = 02;
            rb.is_delete      = "否";
            rb.modify_date    = new DateTime();
            rb.modify_user_id = 10002;
            rb.start_time     = new DateTime();

            rc.name           = "李靖";
            rc.remark         = "拿手活:杀手锏";
            rc.is_strict      = "否";
            rc.create_date    = new DateTime();
            rc.create_user_id = 003;
            rc.end_time       = new DateTime();
            rc.id             = 03;
            rc.is_delete      = "否";
            rc.modify_date    = new DateTime();
            rc.modify_user_id = 10003;
            rc.start_time     = new DateTime();

            return(MR);
        }
        private void MenuSetRuleClick(object sender, EventArgs e)
        {
            var form = new FormRule();

            form.Year  = Year;
            form.Month = Month;
            form.Rule  = new RepeatRule(Year, Month, new RepeatRule.MonthRule());
            form.Rule.RuleClass.WeekNumber = RepeatRule.GetWeekNo(calendar1.SelectedDate);
            form.Rule.RuleClass.DayOfWeek  = (RepeatRule.DayOfWeek)calendar1.SelectedDate.DayOfWeek;
            form.Rule.RuleClass.Interval   = 0;
            if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                //Person.Requirement.RepeatRule.Add(form.Rule);
                //AddedRule.Add(form.Rule);
                setDgv(form.Rule);
                setRule(form.Rule);
            }
        }
Exemple #15
0
        private static void LoadRuleElement(RepeatRule rule, XmlElement r)
        {
            foreach (XmlElement cls in r.ChildNodes)
            {
                switch (cls.Name)
                {
                case IDENTIFY:
                    switch ((RepeatRule.Identify) int.Parse(cls.InnerText))
                    {
                    case RepeatRule.Identify.MonthClass:
                        rule.RuleClass = new RepeatRule.MonthRule();
                        break;

                    case RepeatRule.Identify.DayClass:
                    case RepeatRule.Identify.WeekClass:
                    case RepeatRule.Identify.YearClass:
                    default:
                        break;
                    }
                    break;

                case INTERVAL:
                    rule.RuleClass.Interval = int.Parse(cls.InnerText);
                    break;

                case BDOW:
                    rule.RuleClass.IsByDayOfWeek = bool.Parse(cls.InnerText);
                    break;

                case WEEKNO:
                    rule.RuleClass.WeekNumber = (RepeatRule.WeekNo) int.Parse(cls.InnerText);
                    break;

                case DOW:
                    rule.RuleClass.DayOfWeek = (RepeatRule.DayOfWeek) int.Parse(cls.InnerText);
                    break;

                case AFFAIR_BA:
                    rule.RuleClass.AffairBA = (RepeatRule.AffairBA) int.Parse(cls.InnerText);
                    break;
                }
            }
        }
        /// <summary>
        /// 前後の月の不都合日を検索して、今月の不都合日に設定すべき日を取得します
        /// </summary>
        /// <param name="Year">不都合日を取得する対象の年</param>
        /// <param name="Month">不都合日を取得する対象の月</param>
        /// <param name="rule">不都合日を設定するルールを格納したRepeatRuleオブジェクト</param>
        /// <returns></returns>
        private List <int> getBAMonthsAffairDays(int Year, int Month, RepeatRule rule)
        {
            var days      = new List <int>();
            var nextmonth = new DateTime(Year, Month, DateTime.DaysInMonth(Year, Month)).AddDays(1);
            var prevmonth = new DateTime(Year, Month, 1).AddDays(-1);
            var eprevdays = rule.GetDays(prevmonth.Year, prevmonth.Month).Where(t =>
            {
                return(t > DateTime.DaysInMonth(prevmonth.Year, prevmonth.Month));
            }).Select(t =>
            {
                return(new DateTime(prevmonth.Year, prevmonth.Month, 1).AddDays(t - 1).Day);
            });

            var enextdays = rule.GetDays(nextmonth.Year, nextmonth.Month).Where(t => t < 1).Select(t => nextmonth.AddDays(t - 1).Day);

            days.AddRange(eprevdays);
            days.AddRange(enextdays);
            return(days);
        }
        private void setDgv(RepeatRule rule)
        {
            var row = new DataGridViewRow();

            row.CreateCells(dgvRule);
            row.Tag = rule;
            if (rule.RuleClass.Interval != 0)
            {
                if (rule.RuleClass.WeekNumber != RepeatRule.WeekNo.All)
                {
                    row.Cells[(int)RuleIndex.Rule].Value = string.Format("{0}ヶ月おき/第{1}週/{2}", rule.RuleClass.Interval, (int)rule.RuleClass.WeekNumber, rule.RuleClass.DayOfWeek);
                }
                else
                {
                    row.Cells[(int)RuleIndex.Rule].Value = string.Format("{0}ヶ月おき/毎週/{1}", rule.RuleClass.Interval, rule.RuleClass.DayOfWeek);
                }
            }
            else
            {
                if (rule.RuleClass.WeekNumber != RepeatRule.WeekNo.All)
                {
                    row.Cells[(int)RuleIndex.Rule].Value = string.Format("毎月/第{0}週/{1}", (int)rule.RuleClass.WeekNumber, rule.RuleClass.DayOfWeek);
                }
                else
                {
                    row.Cells[(int)RuleIndex.Rule].Value = string.Format("毎月/毎週/{0}", rule.RuleClass.DayOfWeek);
                }
            }
            row.Cells[(int)RuleIndex.Reason].Value = rule.Reason;
            if (rule.End != DateTime.MaxValue)
            {
                row.Cells[(int)RuleIndex.Limit].Value = string.Format("{0}年{1}月~{2}年{3}月", rule.Start.Year, rule.Start.Month, rule.End.Year, rule.End.Month);
            }
            else
            {
                row.Cells[(int)RuleIndex.Limit].Value = string.Format("{0}年{1}月~", rule.Start.Year, rule.Start.Month);
            }
            row.Cells[(int)RuleIndex.AddedAffair].Value = rule.RuleClass.AffairBA.ToString();
            dgvRule.Rows.Add(row);
            dgvRule.Rows[dgvRule.Rows.Count - 1].Selected = true;
        }
        private void DeleteFromCalendar(RepeatRule target)
        {
            // dgvRuleで選択中のRowとそれに対応するRuleを削除する
            dgvRule.Rows.Remove(dgvRule.SelectedRows[0]);
            // 現在表示中のカレンダーの不都合日表示のみ削除する。(実際に削除するのはダイアログがOKされた時)
            var pdays = target.GetDays(Year, Month);

            pdays.AddRange(getBAMonthsAffairDays(Year, Month, target));
            pdays.Where(pday => pday > 0 && pday <= DateTime.DaysInMonth(Year, Month)).ToList().ForEach(pday =>
            {
                var targetdate = new DateTime(Year, Month, pday);
                if (!CheckTargetDate(Year, Month, pday))
                {
                    // 指定した日にちを対象とするルールが存在しなければカレンダーから削除
                    var schedule = calendar1.GetSchedule(targetdate);
                    CalendarControl.Schedule item = new CalendarControl.Schedule();
                    item.Start = targetdate;
                    calendar1.RemoveSchedule(item.Start);
                }
            });
        }
Exemple #19
0
        public void RepeatCharacterWithCardinality()
        {
            var oneCharRule = new LiteralRule("oneChar", null, "g");
            var testSet     = new[]
            {
                Tuple.Create <string, int?, int?, bool>("gg", 2, 2, true),
                Tuple.Create <string, int?, int?, bool>("gg", 1, 2, true),
                Tuple.Create <string, int?, int?, bool>("gg", null, 2, true),
                Tuple.Create <string, int?, int?, bool>("gg", 2, null, true),
                Tuple.Create <string, int?, int?, bool>("ggg", 2, 2, false),
                Tuple.Create <string, int?, int?, bool>("ggg", 2, 3, true),
                Tuple.Create <string, int?, int?, bool>("g", 2, 2, false),
                Tuple.Create <string, int?, int?, bool>("g", 2, 3, false)
            };

            for (int i = 0; i != testSet.Length; ++i)
            {
                var text      = testSet[i].Item1;
                var min       = testSet[i].Item2;
                var max       = testSet[i].Item3;
                var isSuccess = testSet[i].Item4;
                var rule      = new RepeatRule("Repeat", null, oneCharRule, min, max) as IRule;
                var match     = rule.Match(new ExplorerContext(text)).FirstOrDefault();

                if (!isSuccess)
                {
                    Assert.IsTrue(
                        match == null || match.Text.Length != text.Length,
                        $"Test case #{i} should have failed");
                }
                else
                {
                    Assert.IsNotNull(match, $"Success - {i}");
                    Assert.AreEqual(rule.RuleName, match.Rule.RuleName, $"Rule - {i}");
                    Assert.AreEqual(text.Length, match.Text.Length, $"MatchLength - {i}");
                    Assert.AreEqual(text.Length, ToList(match.ComputeOutput()).Count(), $"Contents - {i}");
                }
            }
        }
Exemple #20
0
        public void ParseTrivialMathExpression()
        {
            var t_RepeatRule = new RepeatRule(new List <IParseRule>
            {
                new MultiAttemptRule(new List <IParseRule>
                {
                    new OperatorRule("+"),
                    new OperatorRule("-"),
                    new OperatorRule("*"),
                    new OperatorRule("/"),
                    new OperatorRule("^")
                }),
                new NumericalLiteralRule()
            });

            var t_PatternRule = new RulePatternRule(new List <IParseRule>
            {
                new NumericalLiteralRule(),
                t_RepeatRule
            });

            var t_Expression = t_PatternRule.Match(CreateState(
                                                       new Token(TokenType.Literal, "2"),
                                                       new Token(TokenType.Operator, "+"),
                                                       new Token(TokenType.Literal, "3"),
                                                       new Token(TokenType.Operator, "-"),
                                                       new Token(TokenType.Literal, "4"),
                                                       new Token(TokenType.Operator, "*"),
                                                       new Token(TokenType.Literal, "5"),
                                                       new Token(TokenType.Operator, "/"),
                                                       new Token(TokenType.Literal, "6")));

            t_Expression.HasError().Should().BeFalse();

            var t_Expressions = t_Expression.Value.Expressions;

            t_Expressions.Should().HaveCount(9);
        }
        private void setRule(RepeatRule rule)
        {
            // ルールに則ってカレンダーに不都合日を設定する
            var days = rule.GetDays(Year, Month);

            days.AddRange(getBAMonthsAffairDays(Year, Month, rule));
            days.Where(day => day > 0 && day <= DateTime.DaysInMonth(Year, Month)).ToList().ForEach(day =>
            {
                DateTime target = new DateTime(Year, Month, day);
                var schedule    = calendar1.GetSchedule(target);
                CalendarControl.Schedule item = new CalendarControl.Schedule();

                item.Start = target;
                if (schedule.Count() == 0)
                {
                    item.Item      = "×";
                    item.Alignment = StringAlignment.Center;
                    calendar1.RemoveSchedule(item.Start);
                    calendar1.AddSchedule(item);
                }
            });
            AddedRule.Add(rule);
        }
        private void SetOtherMonthsAffair(RepeatRule rule)
        {
            var list = StandbyLists.Where(p => rule.Start <= new DateTime(p.Year, p.Month, 1) && rule.End > new DateTime(p.Year, p.Month, DateTime.DaysInMonth(p.Year, p.Month))).Select(q => new { date = new DateTime(q.Year, q.Month, 1), person = q.Persons.FirstOrDefault(r => r.ID == Person.ID) });

            list.ToList().ForEach(u =>
            {
                // 現在の月はすでに不都合日設定してあるため、飛ばす。
                if (u.date.Year == Year && u.date.Month == Month)
                {
                    return;
                }
                if (u.person == null)
                {
                    return;
                }
                u.person.Requirement.RepeatRule.Add(rule);
                var days = rule.GetDays(u.date.Year, u.date.Month);
                days.AddRange(getBAMonthsAffairDays(u.date.Year, u.date.Month, rule));
                days.Where(day => day > 0 && day <= DateTime.DaysInMonth(u.date.Year, u.date.Month)).ToList().ForEach(day =>
                {
                    u.person[new DateTime(u.date.Year, u.date.Month, day)] = PossibleDays.Status.Affair;
                });
            });
        }
        private Rule Interpret(Grammar grammar, ISemanticNode node)
        {
            Rule rule = null;

            if (node is BranchSemanticNode branch)
            {
                switch ((EbnfNodeType)branch.NodeType)
                {
                case EbnfNodeType.Group:
                    rule = Interpret(grammar, branch.Children[0]);
                    break;

                case EbnfNodeType.Repeat:
                    rule = new RepeatRule(grammar, Interpret(grammar, branch.Children[0]));
                    break;

                case EbnfNodeType.Optional:
                    rule = new OptionalRule(grammar, Interpret(grammar, branch.Children[0]));
                    break;

                case EbnfNodeType.Not:
                    rule = new NotRule(grammar, Interpret(grammar, branch.Children[0]));
                    break;

                case EbnfNodeType.And:
                    rule = new AndRule(grammar, branch.Children.Select(child => Interpret(grammar, child)));
                    break;

                case EbnfNodeType.Or:
                    rule = new OrRule(grammar, branch.Children.Select(child => Interpret(grammar, child)));
                    break;

                case EbnfNodeType.None:
                    rule = Interpret(grammar, branch.Children.Single());
                    break;

                case EbnfNodeType.Root:
                case EbnfNodeType.Rule:
                case EbnfNodeType.Token:
                default:
                    throw new Exception();
                }
            }
            else if (node is LeafSemanticNode leaf)
            {
                switch ((EbnfNodeType)leaf.NodeType)
                {
                case EbnfNodeType.Identifier:
                    rule = grammar.ReferenceRule(leaf.Value);
                    break;

                case EbnfNodeType.String:
                case EbnfNodeType.Regex:
                    break;

                default:
                    throw new Exception();
                }
            }

            if (rule == null)
            {
                throw new Exception();
            }
            else
            {
                return(rule);
            }
        }
Exemple #24
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            var monthrule = new RepeatRule.MonthRule();

            monthrule.IsByDayOfWeek = true;
            switch (cmbWeekNo.SelectedIndex)
            {
            case 0:
                monthrule.WeekNumber = RepeatRule.WeekNo.First;
                break;

            case 1:
                monthrule.WeekNumber = RepeatRule.WeekNo.Second;
                break;

            case 2:
                monthrule.WeekNumber = RepeatRule.WeekNo.Third;
                break;

            case 3:
                monthrule.WeekNumber = RepeatRule.WeekNo.Forth;
                break;

            case 4:
                monthrule.WeekNumber = RepeatRule.WeekNo.Fifth;
                break;

            case 5:
                monthrule.WeekNumber = RepeatRule.WeekNo.All;
                break;

            default:
                monthrule.WeekNumber = RepeatRule.WeekNo.None;
                break;
            }
            switch (cmbDayOfWeek.SelectedIndex)
            {
            case 0:
                monthrule.DayOfWeek = RepeatRule.DayOfWeek.日;
                break;

            case 1:
                monthrule.DayOfWeek = RepeatRule.DayOfWeek.月;
                break;

            case 2:
                monthrule.DayOfWeek = RepeatRule.DayOfWeek.火;
                break;

            case 3:
                monthrule.DayOfWeek = RepeatRule.DayOfWeek.水;
                break;

            case 4:
                monthrule.DayOfWeek = RepeatRule.DayOfWeek.木;
                break;

            case 5:
                monthrule.DayOfWeek = RepeatRule.DayOfWeek.金;
                break;

            case 6:
                monthrule.DayOfWeek = RepeatRule.DayOfWeek.土;
                break;

            case 7:
                monthrule.DayOfWeek = RepeatRule.DayOfWeek.土日;
                break;

            default:
                break;
            }
            if (radio1.Checked)
            {
                monthrule.AffairBA = RepeatRule.AffairBA.None;
            }
            else if (radio2.Checked)
            {
                monthrule.AffairBA = RepeatRule.AffairBA.Before;
            }
            else if (radio3.Checked)
            {
                monthrule.AffairBA = RepeatRule.AffairBA.After;
            }
            else if (radio4.Checked)
            {
                monthrule.AffairBA = RepeatRule.AffairBA.Both;
            }

            monthrule.Interval = cmbInterval.SelectedIndex;
            Rule       = new RepeatRule(Year, Month, monthrule);
            Rule.Start = dateTimePicker1.Value;
            if (chkUseEnd.Checked)
            {
                Rule.End = dateTimePicker2.Value;
            }
            else
            {
                Rule.End = DateTime.MaxValue;
            }
            Rule.Reason           = txtReason.Text;
            Rule.IsExcludeHoliday = chkHoliday.Checked;
            if (radioNone1.Checked)
            {
                Rule.Accessory1 = Accessory.None;
            }
            else if (radioDay1.Checked)
            {
                Rule.Accessory1 = Accessory.Day;
            }
            else if (radioNight1.Checked)
            {
                Rule.Accessory1 = Accessory.Night;
            }
            else if (radioDayAndNight1.Checked)
            {
                Rule.Accessory1 = Accessory.DayAndNight;
            }
            else if (radioHD1.Checked)
            {
                Rule.Accessory1 = Accessory.HD;
            }

            if (radioNone2.Checked)
            {
                Rule.Accessory2 = Accessory.None;
            }
            else if (radioDay2.Checked)
            {
                Rule.Accessory2 = Accessory.Day;
            }
            else if (radioNight2.Checked)
            {
                Rule.Accessory2 = Accessory.Night;
            }
            else if (radioDayAndNight2.Checked)
            {
                Rule.Accessory2 = Accessory.DayAndNight;
            }
            else if (radioHD2.Checked)
            {
                Rule.Accessory2 = Accessory.HD;
            }
            DialogResult = DialogResult.OK;
            Close();
        }