Example #1
0
        private decimal CalculateForBorderMonth(TaxCalculationContext context, IncomeTaxThreshold currentValueIncomeTaxThreshold, IncomeTaxThreshold nextThreshold)
        {
            decimal taxValue = (currentValueIncomeTaxThreshold.ToAmount - context.TotalIncomes) * currentValueIncomeTaxThreshold.Percentage;
            var     remainingValueForNextThreshold = ((context.TotalIncomes + context.CurrentIncome) - nextThreshold.FromAmount) * nextThreshold.Percentage;

            return(taxValue + remainingValueForNextThreshold);
        }
Example #2
0
        private IncomeTaxThreshold GetCurrentValueIncomeTaxThreshold(TaxCalculationContext context, List <IncomeTaxThreshold> incomeTaxThresholds)
        {
            var value  = (context.TotalIncomes + context.CurrentIncome);
            var retval = incomeTaxThresholds.FirstOrDefault(x => x.FromAmount <= context.TotalIncomes && x.ToAmount >= value || x.ToAmount >= context.TotalIncomes);

            return(retval);
        }
Example #3
0
        public decimal Calculate(TaxCalculationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var percentage = GetTaxPercentage();

            return(context.CurrentIncome * percentage);
        }
Example #4
0
        decimal ITaxCalculator.Calculate(TaxCalculationContext context)
        {
            ITaxCalculatorStrategy calculator = null;

            calculator = _componentContext.ResolveKeyed <ITaxCalculatorStrategy>(context.TaxationForm);

            if (calculator == null)
            {
                throw new DomainException($"Tax calculator for {context.TaxationForm} not found");
            }

            return(calculator.Calculate(context));
        }
Example #5
0
        /// <summary>
        /// This driver called that module which followed Builder Design Pattern
        /// </summary>
        /// <param name="selectedMealItems"></param>
        /// <returns></returns>
        public double BuildMealForUser(List <FoodMenuModel> selectedMealItems)
        {
            Console.WriteLine();
            Console.WriteLine("You Selected Below Meal Items");
            Console.WriteLine("_______________________________");
            MealBuilder mealBuilder = new MealBuilder();

            mealBuilder.PrepareMeal(selectedMealItems);
            mealBuilder.meal.ShowItems();
            var foodCost = mealBuilder.meal.GetCost();

            //Calculation of Tax
            var taxCalculationContext = new TaxCalculationContext(new OneStarTaxCalculator());
            var taxAmount             = taxCalculationContext.GetCalculatedTax(foodCost, 0.05, false);
            var totalCostofFood       = foodCost + taxAmount;

            Console.WriteLine("Total Cost(Rs.): {0}", totalCostofFood);
            Console.WriteLine("Total Tax(Rs.): {0}", taxAmount);
            return(totalCostofFood);
        }
Example #6
0
        public decimal Calculate(TaxCalculationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            decimal taxValue = 0;
            List <IncomeTaxThreshold> incomeTaxThresholds = GetIncomeTaxThreshold();

            var currentValueIncomeTaxThreshold =
                GetCurrentValueIncomeTaxThreshold(context, incomeTaxThresholds);

            if (IsLimitValueMonth(currentValueIncomeTaxThreshold, context))
            {
                IncomeTaxThreshold nextThreshold = GetNextIncomeTaxThreshold(incomeTaxThresholds, currentValueIncomeTaxThreshold);
                taxValue = CalculateForBorderMonth(context, currentValueIncomeTaxThreshold, nextThreshold);
            }
            else
            {
                taxValue = CalculateForFullMonth(currentValueIncomeTaxThreshold, context);
            }

            return(Decimal.Round(taxValue, 2));
        }
Example #7
0
        private bool IsLimitValueMonth(IncomeTaxThreshold currentValueIncomeTaxThreshold, TaxCalculationContext context)
        {
            var currentIncomesSum = context.TotalIncomes + context.CurrentIncome;

            return(currentIncomesSum > currentValueIncomeTaxThreshold.ToAmount &&
                   context.TotalIncomes > currentValueIncomeTaxThreshold.FromAmount);
        }
Example #8
0
 private decimal CalculateForFullMonth(IncomeTaxThreshold currentValueIncomeTaxThreshold, TaxCalculationContext context)
 {
     return(context.CurrentIncome * currentValueIncomeTaxThreshold.Percentage);
 }
Example #9
0
        public decimal Calculate_ShouldCalculate_Success(TaxCalculationContext context)
        {
            _taxPercentagesService.Setup(x => x.GetGeneralIncomeTaxThresholds()).Returns(CreateThreshlds());

            return(_calculatorStrategy.Calculate(context));
        }