예제 #1
0
        public void TestPayslip()
        {
            var util     = new PayslipUtil();
            var empId    = Guid.NewGuid();
            var employee = new Employee()
            {
                Id           = empId,
                FirstName    = "Christopher",
                LastName     = "Tso",
                AnnualSalary = 60050m
            };
            var request = new PaySlipRequest()
            {
                EmployeeId       = empId,
                PaymentStartDate = new DateTime(2019, 3, 1),
                SuperRate        = 0.09m
            };

            var taxRates = GetDefaultIncomeTaxRates();

            var payslip = util.CreatePayslip(request, employee, taxRates);

            Assert.AreEqual(new DateTime(2019, 3, 31), payslip.PeriodEnd);
            Assert.AreEqual(Math.Floor(employee.AnnualSalary / 12), payslip.GrossIncome);

            // TODO: fix bug

            Assert.AreEqual(Math.Ceiling(3572 + 0.325m * (employee.AnnualSalary - 37000)) / 12,
                            payslip.IncomeTax);
            Assert.AreEqual(payslip.GrossIncome - payslip.IncomeTax, payslip.NetIncome);
            Assert.AreEqual(Math.Floor(payslip.GrossIncome * request.SuperRate), payslip.Super);
        }
예제 #2
0
        public async Task <IHttpActionResult> GetPaySlip([FromUri] PaySlipRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var x = await _paySlipCalculator.GetPaySlip(request);

            return(Ok(x));
        }
예제 #3
0
 public void SetUp()
 {
     _request = new PaySlipRequest
     {
         AnnualSalary      = 10000,
         FirstName         = "Shishira",
         LastName          = "Mallasandra",
         SuperInterestRate = 9,
         PaymentStartDate  = DateTime.Now
     };
 }
예제 #4
0
 public void SetUp()
 {
     _paySlipCalculator = new Mock <IPaySlipCalculator>();
     _paySlipCalculator.Setup(x => x.GetPaySlip(It.IsAny <PaySlipRequest>()))
     .Returns(Task.FromResult(new PaySlipResponse()));
     _controller = new PaySlipController(_paySlipCalculator.Object);
     _request    = new PaySlipRequest {
         AnnualSalary      = 10000,
         FirstName         = "Shishira",
         LastName          = "Mallasandra",
         SuperInterestRate = 9,
         PaymentStartDate  = DateTime.Now
     };
 }
예제 #5
0
        public Payslip CreatePayslip(
            PaySlipRequest request,
            Employee employee,
            IEnumerable <IncomeTaxRate> rates)
        {
            var payslip = new Payslip();

            payslip.PeriodEnd   = GetMonthEndDate(request.PaymentStartDate);
            payslip.GrossIncome = Math.Floor(employee.AnnualSalary / 12);
            payslip.IncomeTax   = Math.Ceiling(CalculateTax(employee.AnnualSalary, rates) / 12);
            payslip.NetIncome   = payslip.GrossIncome - payslip.IncomeTax;
            payslip.Super       = Math.Floor(payslip.GrossIncome * request.SuperRate);

            return(payslip);
        }
예제 #6
0
        public Task <PaySlipResponse> GetPaySlip(PaySlipRequest request)
        {
            var grossIncome = GetMonthly(request.AnnualSalary);
            var incomeTax   = GetIncomeTax(request.AnnualSalary, request.PaymentStartDate);

            var response = new PaySlipResponse {
                Name          = string.Format("{0} {1}", request.FirstName, request.LastName),
                GrossIncome   = grossIncome,
                IncomeTax     = incomeTax,
                NetIncome     = grossIncome - incomeTax,
                SuperAmount   = GetSuper(grossIncome, request.SuperInterestRate),
                PaymentPeriod = string.Format("01 {0} - {1} {2}", request.PaymentStartDate.ToString("MMMM"),
                                              DateTime.DaysInMonth(request.PaymentStartDate.Year, request.PaymentStartDate.Month),
                                              request.PaymentStartDate.ToString("MMMM"))
            };

            return(Task.FromResult(response));
        }