Example #1
0
        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());
        }
Example #2
0
 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
     });
 }
Example #3
0
        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
            });
        }
Example #4
0
 public static string GetDateString(IPayPeriod payPeriod)
 {
     return(payPeriod.Start.ToString("M") + " - " + payPeriod.End.ToString("M"));
 }
Example #5
0
        public static decimal GetPayPeriodAsAFractionOfAYear(IPayPeriod payPeriod)
        {
            var differenceOfDays = (payPeriod.End - payPeriod.Start).TotalDays;

            return((decimal)differenceOfDays / 365M);
        }
Example #6
0
 public static IncomeTax Generate(ITaxTable taxTable, IGrossIncome grossIncome, IPayPeriod payPeriod)
 {
     return(new IncomeTax()
     {
         Amount = TaxTableCalculator.GetTaxForPeriod(payPeriod, grossIncome, taxTable)
     });
 }