protected GetBenefitsDataResults GetBenefitsDataWithoutEmployeeDiscount()
        {
            var benefitsData = new GetBenefitsDataResults();

            benefitsData.Employee = new Employee {
                Id = 3, FirstName = "David", LastName = "Taylor", NumberOfPayPeriods = 52, Salary = 92000
            };
            benefitsData.Dependent = new List <Dependent>
            {
                new Dependent {
                    Id = 2, FirstName = "Jamie", LastName = "Taylor", Relationship = "Daughter", EmployeeId = 2
                },
                new Dependent {
                    Id = 2, FirstName = "Jamie", LastName = "Taylor", Relationship = "Daughter", EmployeeId = 2
                }
            };
            benefitsData.Benefit = new Benefit {
                Id = 1, EmployeeCost = 1000, DependentCost = 500
            };
            benefitsData.Promotions = new List <Promotions> {
                new Promotions {
                    Id = 1, PromotionName = "Name", PromotionTrigger = "A", DiscountAmount = 0.1M
                }
            };

            return(benefitsData);
        }
        public BenefitsSummary Run(GetBenefitsDataResults data)
        {
            var results = new BenefitsSummary()
            {
                EmployeeFirstName       = data.Employee.FirstName,
                EmployeeLastName        = data.Employee.LastName,
                EmployeeCostOfBenefits  = data.Benefit.EmployeeCost,
                DependentsList          = data.Dependent,
                PromotionsList          = data.Promotions,
                DependentCostOfBenefits = data.Benefit.DependentCost,
                EmployeeFullName        = data.Employee.FirstName + " " + data.Employee.LastName,
                DiscountAmount          = data.Promotions.Select(x => x.DiscountAmount).FirstOrDefault()
            };

            if (data.Promotions != null)
            {
                results.DiscountTrigger = data.Promotions.Select(x => x.PromotionTrigger).FirstOrDefault();
            }

            var currentPromotions = _determinePromotions.Run(results.PromotionsList);

            results.EmployeeDiscountAmount = currentPromotions.Select(x => x.LetterPromo.GetDiscount(results.EmployeeLastName, results.DiscountTrigger, results.DiscountAmount)).FirstOrDefault();



            if (data.Promotions != null)
            {
                results.DiscountAmount = data.Promotions.Select(x => x.DiscountAmount).FirstOrDefault();
            }

            results.EmployeeFullName            = GetEmployeeFullName(data);
            results.DependentCostBeforeDiscount = GetDependentCostBeforeDiscount(data);
            results.TotalCostBeforeDiscount     = GetTotalBeforeDiscount(results);

            //results.EmployeeDiscountAmount = GetLastNameDiscountAmount(results.EmployeeLastName, results.PromotionsList);

            if (results.DependentsList != null)
            {
                results.DependentDiscountAmount = GetLastNameDiscountAmount(results.DependentsList.Select(x => x.LastName), results.PromotionsList);
            }

            results.CalculatedEmployeeDiscount  = CalculateDiscountAmount(results.EmployeeCostOfBenefits, results.EmployeeDiscountAmount);
            results.CalculatedDependentDiscount = CalculateDiscountAmount(results.DependentCostOfBenefits, results.DependentDiscountAmount);

            results.TotalDiscountAmount = GetTotalDiscountAmount(results);
            results.TotalAfterDiscount  = GetTotalAfterDiscount(results);

            return(results);
        }
        public decimal GetDependentCostBeforeDiscount(GetBenefitsDataResults data)
        {
            var value = 0M;

            if (data.Dependent == null || !data.Dependent.Any())
            {
                return(value);
            }

            foreach (Dependent d in data.Dependent)
            {
                value += data.Benefit.DependentCost;
            }

            return(value);
        }
 public string GetEmployeeFullName(GetBenefitsDataResults data)
 {
     return(data.Employee.FirstName + " " + data.Employee.LastName);
 }