public static int GetTaxForPeriod(IPayPeriod payPeriod, IGrossIncome grossIncome, ITaxTable taxTable) { var taxBracket = GetTaxBracket(grossIncome, taxTable); var accumulatedTax = taxBracket.AccumulatedTaxFromPreviousBracket; var marginalTax = (grossIncome.AnnualAmount - taxBracket.LowerLimit) * taxBracket.MarginalTaxRate; var totalTax = (accumulatedTax + marginalTax) * DateCalculator.GetPayPeriodAsAFractionOfAYear(payPeriod); return(totalTax.Rounding()); }
public static PaySlip Create(IEmployeeDetails employeeDetails, IPayPeriod payPeriod, IGrossIncome grossIncome, IIncomeTax incomeTax, INetIncome netIncome, ISuper super) { return(new PaySlip() { FullName = FullNameBuilder.Combine(employeeDetails), PayPeriod = DateCalculator.GetDateString(payPeriod), GrossIncome = grossIncome.Amount, IncomeTax = incomeTax.Amount, NetIncome = netIncome.Amount, Super = super.Amount }); }
public static GrossIncome Generate(string annualIncome, IPayPeriod payPeriod) { if (string.IsNullOrWhiteSpace(annualIncome)) { throw new Exception("Annual Salary must be entered"); } var annualIncomeAsANumber = ConvertSalaryStringToNumber(annualIncome); var grossIncomeOverPeriod = (annualIncomeAsANumber * DateCalculator.GetPayPeriodAsAFractionOfAYear(payPeriod)).Rounding(); return(new GrossIncome { Amount = grossIncomeOverPeriod, AnnualAmount = annualIncomeAsANumber }); }
public static string GetDateString(IPayPeriod payPeriod) { return(payPeriod.Start.ToString("M") + " - " + payPeriod.End.ToString("M")); }
public static decimal GetPayPeriodAsAFractionOfAYear(IPayPeriod payPeriod) { var differenceOfDays = (payPeriod.End - payPeriod.Start).TotalDays; return((decimal)differenceOfDays / 365M); }
public static IncomeTax Generate(ITaxTable taxTable, IGrossIncome grossIncome, IPayPeriod payPeriod) { return(new IncomeTax() { Amount = TaxTableCalculator.GetTaxForPeriod(payPeriod, grossIncome, taxTable) }); }