Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }