///<summary>
        /// Calculates the bonus.
        ///</summary>
        ///<param name="input">A parameter object representing inputs to the calculation.</param>
        ///<returns> A <see cref="FacebookBonus"/> object.</returns>
        public FacebookBonus Calculate(FacebookBonusCalculationInput input)
        {
            var inputPolicies = input.PoliciesOfCustomer;
            var inputSettings = input.Settings;

            var facebookBonus = new FacebookBonus();

            facebookBonus = CalculateFacebookBonus(inputPolicies, inputSettings);

            return(facebookBonus);
        }
        private static void Main(string[] args)
        {
            var secondPolicy = new Policy()
            {
                PolicyNumber = "P001", Premium = 200, StartDate = new DateTime(2016, 05, 06)
            };
            var firstPolicy = new Policy()
            {
                PolicyNumber = "P002", Premium = 100, StartDate = new DateTime(2017, 08, 11)
            };
            var thirdPolicy = new Policy()
            {
                PolicyNumber = "P003", Premium = 100, StartDate = new DateTime(2017, 09, 12)
            };

            var settings = new FacebookBonusSettings()
            {
                BonusPercentage = 3,
                MaximumBonus    = 10,
                PolicySorter    = new AscendingOrderOfPoliciesStartDate()
            };

            var calculationInput = new FacebookBonusCalculationInput()
            {
                PoliciesOfCustomer = new Policy[] { firstPolicy, secondPolicy, thirdPolicy },
                Settings           = settings
            };

            var facebookBonusCalculator = new FacebookBonusCalculator();

            FacebookBonus facebookBonus = facebookBonusCalculator.Calculate(calculationInput);
            PolicyBonus   policyBonus   = facebookBonus.PolicyBonuses[0];

            Console.WriteLine(policyBonus.PolicyNumber + " " + policyBonus.BonusInPoints);
            var expectedPolicyBonus = new PolicyBonus()
            {
                PolicyNumber = "P001", BonusInPoints = 6
            };

            Console.WriteLine("\n" + facebookBonus.PolicyBonuses.Contains(expectedPolicyBonus));

            Console.ReadLine();
        }
Ejemplo n.º 3
0
        /// <summary>
        ///  Calculates the bonus.
        /// </summary>
        /// <param name="input">A parameter object representing inputs to the calculation.</param>
        /// <returns>A <see cref="FacebookBonus"/> object.</returns>
        public virtual FacebookBonus Calculate(FacebookBonusCalculationInput input)
        {
            // TODO: Implement bonus calculation.
            //throw new NotImplementedException();


            var facebookBonusSetting = input.Settings;
            int sumBonusInPoints     = 0;

            var lstPolicies = input.PoliciesOfCustomer.OrderBy(n => n.StartDate);

            List <PolicyBonus> lstPolicyBonuses = new List <PolicyBonus>();

            foreach (var item in lstPolicies)
            {
                float bonusInPoints           = (float)item.Premium * facebookBonusSetting.BonusPercentage;
                int   bonusInPointsAfterFloor = (int)Math.Floor(bonusInPoints);

                sumBonusInPoints += bonusInPointsAfterFloor;
                PolicyBonus policyBonus = new PolicyBonus {
                    PolicyNumber = item.PolicyNumber, BonusInPoints = bonusInPointsAfterFloor
                };
                lstPolicyBonuses.Add(policyBonus);
                if (sumBonusInPoints > facebookBonusSetting.MaximumBonus)
                {
                    var temp = lstPolicyBonuses.ToList();
                    temp.RemoveAt(temp.Count - 1);
                    lstPolicyBonuses.Last().BonusInPoints = (int)facebookBonusSetting.MaximumBonus - temp.Sum(n => n.BonusInPoints);
                    return(new FacebookBonus {
                        PolicyBonuses = lstPolicyBonuses.ToArray()
                    });
                }
            }
            return(new FacebookBonus {
                PolicyBonuses = lstPolicyBonuses.ToArray()
            });
        }