private decimal CalculateSalary(ManagerEmployee manager)
        {
            var longevityBonus = _arguments.BaseRate * GetLongevityBonus(manager.ExperienceYears,
                                                                         _arguments.ManagerBonusPerYear,
                                                                         _arguments.ManagerBonusLimit);

            var leadershipBonus = manager.Subordinates.Sum(CalculateSalary)
                                  * _arguments.ManagerLeadershipBonus;

            return(_arguments.BaseRate + longevityBonus + leadershipBonus);
        }
        public void TestManager()
        {
            var c              = new SalaryCalculator(SalaryArgs);
            var m              = new ManagerEmployee("John Doe", DateTime.Now, null);
            var e              = new Employee("Jane Doe", DateTime.Now, m);
            var eSalary        = c.CalculateSalary(e);
            var actualSalary   = c.CalculateSalary(m);
            var expectedSalary = SalaryArgs.BaseRate + SalaryArgs.ManagerLeadershipBonus * eSalary;

            Assert.AreEqual(expectedSalary, actualSalary);
        }
        public void TestSales()
        {
            var c              = new SalaryCalculator(SalaryArgs);
            var s              = new SalesEmployee("John Doe", DateTime.Now, null);
            var m              = new ManagerEmployee("Jane Doe", DateTime.Now, s);
            var e              = new Employee("John Smith", DateTime.Now, m);
            var eSalary        = c.CalculateSalary(e);
            var mSsalary       = c.CalculateSalary(m);
            var actualSalary   = c.CalculateSalary(s);
            var expectedSalary = SalaryArgs.BaseRate + SalaryArgs.SalesLeadershipBonus * (eSalary + mSsalary);

            Assert.AreEqual(expectedSalary, actualSalary);
        }
        public void TestTotal()
        {
            var c            = new SalaryCalculator(SalaryArgs);
            var s            = new SalesEmployee("John Doe", DateTime.Now, null);
            var m            = new ManagerEmployee("Jane Doe", DateTime.Now, s);
            var e            = new Employee("John Smith", DateTime.Now, m);
            var eSalary      = c.CalculateSalary(e);
            var mSsalary     = c.CalculateSalary(m);
            var sSalary      = c.CalculateSalary(s);
            var actualSalary = c.CalculateSalary(new List <Employee> {
                s, m, e
            });
            var expectedSalary = eSalary + mSsalary + sSalary;

            Assert.AreEqual(expectedSalary, actualSalary);
        }
Exemple #5
0
        private static void Hire()
        {
            var r         = new Random();
            var start     = Employee.CompanyFoundationDate;
            var totalDays = (DateTime.Now - start).TotalDays;

            var president = new SalesEmployee("John Smith", start);

            Staff.Add(president);

            var productionVisePresident = new ManagerEmployee("Jack Doe", start, president);

            Staff.Add(productionVisePresident);

            for (var i = 0; i < 5; i++)
            {
                var pmName = $"pm{i:D4}";
                var pmDate = start.AddDays(r.NextDouble() * totalDays);
                var pm     = new ManagerEmployee(pmName, pmDate, productionVisePresident);
                Staff.Add(pm);
                for (var j = 0; j < 5; j++)
                {
                    var peName = $"pe{i:D2}{j:D2}";
                    var peDate = start.AddDays(r.NextDouble() * totalDays);
                    Staff.Add(new Employee(peName, peDate, pm));
                }
            }

            var salesVicePresident = new SalesEmployee("Mary Good", start, president);

            Staff.Add(salesVicePresident);

            for (var i = 0; i < 5; i++)
            {
                var smName = $"sm{i:D4}";
                var smDate = start.AddDays(r.NextDouble() * totalDays);
                var sm     = new ManagerEmployee(smName, smDate, salesVicePresident);
                Staff.Add(sm);
                for (var j = 0; j < 5; j++)
                {
                    var seName = $"se{i:D2}{j:D2}";
                    var seDate = start.AddDays(r.NextDouble() * totalDays);
                    Staff.Add(new Employee(seName, seDate, sm));
                }
            }
        }