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); }
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); }
public decimal Calculate(TaxCalculationContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var percentage = GetTaxPercentage(); return(context.CurrentIncome * percentage); }
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)); }
/// <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); }
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)); }
private bool IsLimitValueMonth(IncomeTaxThreshold currentValueIncomeTaxThreshold, TaxCalculationContext context) { var currentIncomesSum = context.TotalIncomes + context.CurrentIncome; return(currentIncomesSum > currentValueIncomeTaxThreshold.ToAmount && context.TotalIncomes > currentValueIncomeTaxThreshold.FromAmount); }
private decimal CalculateForFullMonth(IncomeTaxThreshold currentValueIncomeTaxThreshold, TaxCalculationContext context) { return(context.CurrentIncome * currentValueIncomeTaxThreshold.Percentage); }
public decimal Calculate_ShouldCalculate_Success(TaxCalculationContext context) { _taxPercentagesService.Setup(x => x.GetGeneralIncomeTaxThresholds()).Returns(CreateThreshlds()); return(_calculatorStrategy.Calculate(context)); }