Beispiel #1
0
        public void CallAllRules()
        {
            Rule1         rule1    = new Rule1();
            Rule2         rule2    = new Rule2();
            Rule3         rule3    = new Rule3();
            Rule4         rule4    = new Rule4();
            Rule5         rule5    = new Rule5();
            Rule6         rule6    = new Rule6();
            Rule7         rule7    = new Rule7();
            Rule8         rule8    = new Rule8();
            Rule9         rule9    = new Rule9();
            Rule10        rule10   = new Rule10();
            Rule11        rule11   = new Rule11();
            Rule12        rule12   = new Rule12();
            Rule13        rule13   = new Rule13();
            ReadExcelData readData = new ReadExcelData();

            readData.ReadFromExcelFile("");
            //calls all rules
            int total;

            foreach (var row in Records.records)
            {
                total  = 0;
                total += rule1.Evaluate(row).Score;
                total += rule2.Evaluate(row).Score;
                total += rule3.Evaluate(row).Score;
                total += rule4.Evaluate(row).Score;
                total += rule5.Evaluate(row).Score;
                total += rule6.Evaluate(row).Score;
                total += rule7.Evaluate(row).Score;
                total += rule8.Evaluate(row).Score;
                total += rule9.Evaluate(row).Score;
                total += rule10.Evaluate(row).Score;
                total += rule11.Evaluate(row).Score;
                total += rule12.Evaluate(row).Score;
                total += rule13.Evaluate(row).Score;
                /* call all rules here */
                Console.WriteLine("Total score: " + total);
            }
        }
Beispiel #2
0
        public void RuleTest()
        {
            using (var scope = new TransactionScope())
            {
                using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["PMSDBConnection"].ConnectionString))
                {
                    var uows = new MITD.Domain.Repository.UnitOfWorkScope(
                        new Data.NH.NHUnitOfWorkFactory(() => PMSAdmin.Persistence.NH.PMSAdminSession.GetSession(con)));

                    using (var uow = new NHUnitOfWork(PMSSession.GetSession(con)))
                        using (var uow2 = uows.CurrentUnitOfWork)
                        {
                            con.Open();
                            var pmsAdminService = new PMS.ACL.PMSAdmin.PMSAdminService(
                                new PMSAdmin.Application.UnitService(new PMSAdmin.Persistence.NH.UnitRepository(uows),
                                                                     new PMSAdmin.Persistence.NH.CustomFieldRepository(uows)),
                                new PMSAdmin.Application.JobService(new PMSAdmin.Persistence.NH.JobRepository(uows),
                                                                    new PMSAdmin.Persistence.NH.CustomFieldRepository(uows)),
                                new PMSAdmin.Application.CustomFieldService(new PMSAdmin.Persistence.NH.CustomFieldRepository(uows)),
                                new PMSAdmin.Application.JobPositionService(new PMSAdmin.Persistence.NH.JobPositionRepository(uows)),
                                new PMSAdmin.Application.JobIndexService(new PMSAdmin.Persistence.NH.JobIndexRepository(uows),
                                                                         new PMSAdmin.Persistence.NH.CustomFieldRepository(uows)),
                                new PMSAdmin.Application.UnitIndexService(new PMSAdmin.Persistence.NH.UnitIndexRepository(uows),
                                                                          new PMSAdmin.Persistence.NH.CustomFieldRepository(uows))
                                );
                            EventPublisher publisher = new EventPublisher();
                            var            rep       = new PMS.Persistence.NH.EmployeeRepository(uow);
                            var            periodRep = new PMS.Persistence.NH.PeriodRepository(uow);
                            var            calcRep   = new PMS.Persistence.NH.CalculationRepository(uow);
                            var            policyRep = new MITD.PMS.Persistence.NH.PolicyRepository(uow, new PolicyConfigurator(
                                                                                                        new RuleBasedPolicyEngineService(new LocatorProvider("PMSDbConnection"), publisher)));
                            var provider = new PMS.Application.CalculationDataProvider(rep, pmsAdminService,
                                                                                       new PMS.Persistence.NH.JobIndexPointRepository(uow));
                            var policy = policyRep.GetById(new PolicyId(1));
                            var period = periodRep.GetBy(c => c.Active);
                            var emp    = rep.GetBy(new EmployeeId("150554", period.Id));

                            // if period has no calculation
                            var calculation = new Calculation(calcRep.GetNextId(), period, policy, Guid.NewGuid().ToString(), DateTime.Now, "150554");
                            calcRep.Add(calculation);
                            uow.Commit();

                            // if period has calculation , get it by its identifier
                            //var calculation = calcRep.GetById(new CalculationId(1));

                            MITD.PMSReport.Domain.Model.CalculationData empData;
                            var pathNo = 1;
                            List <SummaryCalculationPoint> calcList = new List <SummaryCalculationPoint>();
                            var session = new CalculatorSession();
                            while (pathNo <= 2)
                            {
                                Utils.Res = new MITD.PMS.RuleContracts.RuleResult();
                                session.AddCalculationPoints(calcList);
                                session.PathNo = pathNo;
                                var data  = provider.Provide(emp, out empData, calculation, true, session);
                                var rule1 = new Rule10();
                                rule1.Execute(data);
                                var rule2 = new Rule11();
                                rule2.Execute(data);
                                var rule3 = new Rule12();
                                rule3.Execute(data);
                                //var rule4 = new Rule13();
                                //rule4.Execute(data);
                                var res = provider.Convert(Utils.Res, empData, emp, period, calculation);
                                calcList = res.CalculationPoints.OfType <SummaryCalculationPoint>().ToList();
                                var jipRep = new JobIndexPointRepository(uow);
                                if (res.EmployeePointsForAdd != null)
                                {
                                    foreach (var point in res.EmployeePointsForAdd)
                                    {
                                        jipRep.Add(point);
                                    }
                                }
                                if (res.EmployeePointsForUpdate != null)
                                {
                                    foreach (var point in res.EmployeePointsForUpdate)
                                    {
                                        var employeePoint = jipRep.GetById(point.Key);
                                        employeePoint.SetValue(point.Value);
                                    }
                                }
                                uow.Commit();
                                pathNo++;
                            }
                        }
                }
            }
        }
Beispiel #3
0
        protected void RunScenario(string title, string input)
        {
            RunScenario(title, () =>
            {
                var lines = input.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

                var reSimpleRule        = new Regex(@"^(\d+): ""(.*)""$");
                var reSingleRule        = new Regex(@"^(\d+): (\d+)$");
                var rePairRule          = new Regex(@"^(\d+): (\d+) (\d+)$");
                var reTripleRule        = new Regex(@"^(\d+): (\d+) (\d+) (\d+)$");
                var reOrPairRule        = new Regex(@"^(\d+): (\d+) (\d+) \| (\d+) (\d+)$");
                var reOrSingleRule      = new Regex(@"^(\d+): (\d+) \| (\d+)$");
                var reOrSingleLeftRule  = new Regex(@"^(\d+): (\d+) \| (\d+) (\d+)$");
                var reOrSingleRightRule = new Regex(@"^(\d+): (\d+) (\d+) \| (\d+)$");

                var rules         = new Dictionary <string, Rule>();
                var matchingRules = true;
                var toCheck       = new List <string>();
                foreach (var line in lines)
                {
                    if (line.Trim() == "X")
                    {
                        matchingRules = false;
                        continue;
                    }

                    if (matchingRules)
                    {
                        var simple = reSimpleRule.Match(line);
                        if (simple.Success)
                        {
                            rules.Add(simple.Groups[1].Value, new SimpleRule(rules, simple.Groups[2].Value));
                        }
                        else
                        {
                            var pair = rePairRule.Match(line);
                            if (pair.Success)
                            {
                                rules.Add(pair.Groups[1].Value, new PairRule(rules, pair.Groups[2].Value, pair.Groups[3].Value));
                            }
                            else
                            {
                                var orPair = reOrPairRule.Match(line);
                                if (orPair.Success)
                                {
                                    rules.Add(orPair.Groups[1].Value, new OrPairRule(rules, orPair.Groups[2].Value, orPair.Groups[3].Value, orPair.Groups[4].Value, orPair.Groups[5].Value));
                                }
                                else
                                {
                                    var orSinglePair = reOrSingleRule.Match(line);
                                    if (orSinglePair.Success)
                                    {
                                        rules.Add(orSinglePair.Groups[1].Value, new OrSingleRule(rules, orSinglePair.Groups[2].Value, orSinglePair.Groups[3].Value));
                                    }
                                    else
                                    {
                                        var orSingleLeft = reOrSingleLeftRule.Match(line);
                                        if (orSingleLeft.Success)
                                        {
                                            rules.Add(orSingleLeft.Groups[1].Value, new OrSingleLeftRule(rules, orSingleLeft.Groups[2].Value, orSingleLeft.Groups[3].Value, orSingleLeft.Groups[4].Value));
                                        }
                                        else
                                        {
                                            var orSingleRight = reOrSingleRightRule.Match(line);
                                            if (orSingleRight.Success)
                                            {
                                                rules.Add(orSingleRight.Groups[1].Value, new OrSingleRightRule(rules, orSingleRight.Groups[2].Value, orSingleRight.Groups[3].Value, orSingleRight.Groups[4].Value));
                                            }
                                            else
                                            {
                                                var orSingle = reSingleRule.Match(line);
                                                if (orSingle.Success)
                                                {
                                                    rules.Add(orSingle.Groups[1].Value, new SingleRule(rules, orSingle.Groups[2].Value));
                                                }
                                                else
                                                {
                                                    var triple = reTripleRule.Match(line);
                                                    if (triple.Success)
                                                    {
                                                        rules.Add(triple.Groups[1].Value, new TripleRule(rules, triple.Groups[2].Value, triple.Groups[3].Value, triple.Groups[4].Value));
                                                    }
                                                    else
                                                    {
                                                        throw new FormatException(line);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        toCheck.Add(line);
                    }
                }

                //Console.WriteLine($"42: {BuildPattern(rules["42"])}");
                //Console.WriteLine($"31: {BuildPattern(rules["31"])}");

                rules["8"] = new Rule8(rules);

                var lastCount = 0;
                for (var i = 1; ; i += 1)
                {
                    rules["11"] = new Rule11(rules, i);
                    var pattern = BuildPattern(rules["0"]);
                    //Console.WriteLine(pattern.ToString());
                    var count = toCheck.Count(i => pattern.IsMatch(i));
                    Console.WriteLine($"With {i} iterations, got: {count}");
                    if (count == lastCount)
                    {
                        break;
                    }

                    lastCount = count;
                }

                // 323 is wrong

                ////var keys = rules.Keys.Select(i => int.Parse(i)).OrderBy(i => i).ToList();
                //var pattern = BuildPattern(rules["0"]);

                //Console.WriteLine(pattern.ToString());

                //var count = toCheck.Count(i => pattern.IsMatch(i));
                //Console.WriteLine(count);
            });
        }