public async Task <PaySlipDetail> GetPaySlipDetailFromSalaryInfo(SalaryInfo salaryInfo) { var rates = await taxingRuleDao.GetCurrentTaxingRates(); var suitableRate = rates.FirstOrDefault(x => x.TaxableIncomeBottom <= salaryInfo.AnnuaSalary && (x.TaxableIncomeTop >= salaryInfo.AnnuaSalary || x.TaxableIncomeTop == -1)); if (suitableRate == null) { throw new Exception($"Error in finding suitable tax rate for {salaryInfo.AnnuaSalary}"); } var baseTax = suitableRate.TaxBase; var extraTax = (int)((salaryInfo.AnnuaSalary - suitableRate.TaxableIncomeBottom) * suitableRate.TaxRatio); var incomeTax = (int)Math.Round((double)(baseTax + extraTax) / 12, MidpointRounding.ToEven); var grossIncome = (int)Math.Round((double)salaryInfo.AnnuaSalary / 12, MidpointRounding.ToEven); var netIncome = grossIncome - incomeTax; var superAnnuation = (int)Math.Round(grossIncome * salaryInfo.SuperRate, MidpointRounding.ToEven); var result = new PaySlipDetail() { SalaryInfo = salaryInfo, GrossIncome = grossIncome, IncomeTax = incomeTax, NetIncome = netIncome, SuperAnnunation = superAnnuation }; return(result); }
public ActionResult slipDetails() { ViewBag.Earnings = new SelectList(iDropDown.GetDropDowns("get-earnings"), "Id", "DisplayName"); ViewBag.Deductions = new SelectList(iDropDown.GetDropDowns("get-deductions"), "Id", "DisplayName"); PaySlipDetail obj = new PaySlipDetail(); return(PartialView(obj)); }