public Quote GetQuote(Employee employee, string[] dependentNames) { var quoteParameter = new QuoteParameter() { EmployeeName = employee.Name, Dependents = dependentNames }; var rules = _ruleAccessor("All"); var quote = new Quote() { QuoteItems = new List <RuleValue>() }; //apply rules foreach (var rule in rules) { quote.QuoteItems.AddRange(rule.GetDiscount(quoteParameter)); } //aggregate results var totalDiscountAmount = quote.QuoteItems.Sum(x => x.DiscountAmount); var totalAmount = quote.QuoteItems.Sum(x => x.Cost) - totalDiscountAmount; var costPerPaycheck = totalAmount / 26; quote.TotalDiscounts = totalDiscountAmount; quote.Total = totalAmount; quote.CostPerPaycheck = costPerPaycheck; return(quote); }
public List <RuleValue> GetDiscount(QuoteParameter quoteParameter) { //decimal totalDiscount = 0; var quoteItems = new List <RuleValue>(); var employeeQuoteItem = new RuleValue() { ParameterValue = quoteParameter.EmployeeName, Description = _discountName, Cost = _baseAnnualCostPerEmployee, DiscountAmount = 0 }; // 10% discount rule if (quoteParameter.EmployeeName.Trim().ToLower().StartsWith("a")) { decimal discountAmount = _baseAnnualCostPerEmployee * _discountPercent; //totalDiscount += discountAmount; employeeQuoteItem.IsDiscountApplied = true; employeeQuoteItem.DiscountAmount = discountAmount; } quoteItems.Add(employeeQuoteItem); if (quoteParameter.Dependents != null) { foreach (string name in quoteParameter.Dependents) { var quoteItem = new RuleValue() { ParameterValue = name, Description = _discountName, Cost = _annualCostPerDependent, DiscountAmount = 0 }; if (name.Trim().ToLower().StartsWith("a")) { decimal discountAmount = _annualCostPerDependent * _discountPercent; //totalDiscount += discountAmount; quoteItem.IsDiscountApplied = true; quoteItem.DiscountAmount = discountAmount; } quoteItems.Add(quoteItem); } // var numberOfDependentsEligibleForDiscount = quoteParameter.Dependents // .Count(name => name.Trim().ToLower().StartsWith("a")); // // totalDiscount += (_annualCostPerDependent * _discountPercent) * (decimal) numberOfDependentsEligibleForDiscount; } return(quoteItems); }