Ejemplo n.º 1
0
        public static string GetStringFromList <T>(IEnumerable <T> list, string separator, int indent, BreakRule lineBreak)
        {
            int    lastBreak = -indent;
            int    itemCount = 0;
            bool   more      = false;
            string indentStr = new String(' ', indent);
            string listBreak = System.Environment.NewLine + indentStr;

            System.Text.StringBuilder builder = new System.Text.StringBuilder();

            IEnumerator <T> e = list.GetEnumerator();

            if (e.MoveNext())
            {
                do
                {
                    T      nt     = e.Current;
                    string addend = nt.ToString();
                    switch (lineBreak)
                    {
                    case BreakRule.never: break;

                    case BreakRule.length:
                        if (builder.Length + addend.Length >= lastBreak + LineLength)
                        {
                            lastBreak = builder.Length;
                            builder.Append(listBreak);
                        }
                        break;

                    default:
                        if (itemCount >= (int)lineBreak)
                        {
                            builder.Append(listBreak);
                            itemCount = 0;
                        }
                        itemCount++;
                        break;
                    }
                    more = e.MoveNext();
                    builder.AppendFormat("{0}{1}", nt.ToString(), (more ? separator : ""));
                } while (more);
            }

            return(builder.ToString());
        }
        public void TestThatWtkfProfileAndPunchRoundRuleAndBreakRuleModelsMapToPunchRoundRulePerPayRuleCorrectly()
        {
            var payRuleCount         = 2;
            var punchRoundRulesCount = 3;
            var breakRulesCount      = 1;
            var wtkProfiles          = new List <WtkProfile>();

            for (int i = 1; i <= payRuleCount; i++)
            {
                var wtkProfile = new WtkProfile
                {
                    PayRule = new PayRule
                    {
                        FullName     = "FullName" + i,
                        PayRuleName  = "PayRuleName" + i,
                        PersonNumber = "PersonNumber" + i
                    },
                    BreakRuleNames = "BreakRuleNames" + i,
                    RoundRuleName  = "RoundRuleName" + i
                };
                wtkProfiles.Add(wtkProfile);
                var wtkProfile2 = new WtkProfile
                {
                    PayRule = new PayRule
                    {
                        FullName     = "FullName2" + i,
                        PayRuleName  = "PayRuleName" + i,
                        PersonNumber = "PersonNumber2" + i
                    },
                    BreakRuleNames = "BreakRuleNames" + i,
                    RoundRuleName  = "RoundRuleName" + i
                };
                wtkProfiles.Add(wtkProfile2);
            }

            var punchRoundRules = new List <PunchRoundRule>();

            for (int i = 1; i <= punchRoundRulesCount; i++)
            {
                var punchRoundRule = new PunchRoundRule
                {
                    Name = "RoundRuleName" + i,
                    InPunchEarlyChangePoint  = new TimeSpan(0, 10 + i, 0),
                    InPunchEarlyInsideRound  = new TimeSpan(0, 11 + i, 0),
                    InPunchEarlyInsideGrace  = new TimeSpan(0, 12 + i, 0),
                    OutPunchEarlyChangePoint = new TimeSpan(0, 10 + i, 0),
                    OutPunchEarlyInsideRound = new TimeSpan(0, 11 + i, 0),
                    OutPunchEarlyInsideGrace = new TimeSpan(0, 12 + i, 0)
                };
                punchRoundRules.Add(punchRoundRule);
            }

            var breakRules = new List <BreakRule>();

            for (int i = 1; i <= breakRulesCount; i++)
            {
                var breakRule = new BreakRule
                {
                    Name                        = "BreakRuleNames" + i,
                    LongChangePoint             = new TimeSpan(0, i, 0),
                    LongGrace                   = new TimeSpan(0, 1 + i, 0),
                    LongRound                   = new TimeSpan(0, 2 + i, 0),
                    ShortChangePoint            = new TimeSpan(0, i, 0),
                    ShortGrace                  = new TimeSpan(0, 1 + i, 0),
                    ShortRound                  = new TimeSpan(0, 2 + i, 0),
                    UseUnscheduledPunchRounding = true
                };
                breakRules.Add(breakRule);
            }

            var mapper = new PunchRoundRuleMapper();

            var results = mapper.Map(wtkProfiles, punchRoundRules, breakRules);

            Assert.NotNull(results);
            Assert.AreEqual(payRuleCount, results.Count);
            for (int i = 1; i <= payRuleCount; i++)
            {
                Assert.AreEqual("FullName" + i, results[i - 1].PayRule.FullName);
                Assert.AreEqual("PersonNumber" + i, results[i - 1].PayRule.PersonNumber);
                Assert.AreEqual("PayRuleName" + i, results[i - 1].PayRule.PayRuleName);

                if (punchRoundRules.Any(s => s.Name.Equals("RoundRuleName" + i, StringComparison.OrdinalIgnoreCase)))
                {
                    Assert.AreEqual("RoundRuleName" + i, results[i - 1].PunchRoundRule.Name);
                    Assert.AreEqual(new TimeSpan(0, 10 + i, 0), results[i - 1].PunchRoundRule.InPunchEarlyChangePoint);
                    Assert.AreEqual(new TimeSpan(0, 11 + i, 0), results[i - 1].PunchRoundRule.InPunchEarlyInsideRound);
                    Assert.AreEqual(new TimeSpan(0, 12 + i, 0), results[i - 1].PunchRoundRule.InPunchEarlyInsideGrace);
                    Assert.AreEqual(new TimeSpan(0, 10 + i, 0), results[i - 1].PunchRoundRule.OutPunchEarlyChangePoint);
                    Assert.AreEqual(new TimeSpan(0, 11 + i, 0), results[i - 1].PunchRoundRule.OutPunchEarlyInsideRound);
                    Assert.AreEqual(new TimeSpan(0, 12 + i, 0), results[i - 1].PunchRoundRule.OutPunchEarlyInsideGrace);
                }
                else
                {
                    Assert.Null(results[i - 1].PunchRoundRule);
                }

                if (breakRules.Any(s => s.Name.Equals("BreakRuleNames" + i, StringComparison.OrdinalIgnoreCase)))
                {
                    Assert.AreEqual("BreakRuleNames" + i, results[i - 1].BreakRule.Name);
                    Assert.AreEqual(new TimeSpan(0, i, 0), results[i - 1].BreakRule.LongChangePoint);
                    Assert.AreEqual(new TimeSpan(0, 1 + i, 0), results[i - 1].BreakRule.LongGrace);
                    Assert.AreEqual(new TimeSpan(0, 2 + i, 0), results[i - 1].BreakRule.LongRound);
                    Assert.AreEqual(new TimeSpan(0, i, 0), results[i - 1].BreakRule.ShortChangePoint);
                    Assert.AreEqual(new TimeSpan(0, 1 + i, 0), results[i - 1].BreakRule.ShortGrace);
                    Assert.AreEqual(new TimeSpan(0, 2 + i, 0), results[i - 1].BreakRule.ShortRound);
                    Assert.AreEqual(true, results[i - 1].BreakRule.UseUnscheduledPunchRounding);
                }
                else
                {
                    Assert.Null(results[i - 1].BreakRule);
                }
            }
        }