public ActionResult GeneratePayslip(IEnumerable <Employee> employees)
        {
            var payslips = employees
                           .InvalidDataExceptionIfNullOrEmpty()
                           .Select(emp => emp
                                   .ToResult("Invalid employee data")
                                   .OnSuccess(e => new PaySlip(e))
                                   .OnSuccess(p => p.SetGrossIncome(PayslipComputation.GetGrossIncome(emp.AnnualSalary)))
                                   .OnSuccess(p => p.SetIncomeTax(PayslipComputation.GetIncomeTax(emp.AnnualSalary)))
                                   .OnSuccess(p => p.SetNetIncome(PayslipComputation.GetNetIncome(p.GrossIncome, p.IncomeTax)))
                                   .OnSuccess(p => p.SetSuper(PayslipComputation.GetSuper(p.GrossIncome, emp.SuperRate))))
                           .Select(x =>
            {
                var employee = x.Value.Employee;
                var paySlip  = x.Value;

                return(new PayslipViewModel(
                           employee.FullName,
                           employee.PaymentPeriod,
                           paySlip.GrossIncome,
                           paySlip.IncomeTax,
                           paySlip.NetIncome,
                           paySlip.Super));
            })
                           .ToList();

            return(Json(payslips));
        }
        public void GetSuper()
        {
            var super = PayslipComputation.GetSuper(5004, 9);

            Assert.AreEqual(super, 450);
        }
        public void GetNetIncome()
        {
            var netIncome = PayslipComputation.GetNetIncome(5004, 922);

            Assert.AreEqual(netIncome, 4082);
        }
        public void GetGrossIncome()
        {
            var grossIncome = PayslipComputation.GetGrossIncome(60050);

            Assert.AreEqual(grossIncome, 5004);
        }