public void GenerateDeduction() { Initialize(); DeleteInfo(); //Initialize Data var employee = new Employee { EmployeeCode = "11001", FirstName = "Jona", LastName = "Pereira", MiddleName = "Aprecio", BirthDate = DateTime.Parse("02/02/1991"), Gender = 1, IsActive = true }; var employee2 = new Employee { EmployeeCode = "11002", FirstName = "Cornelio Jr.", LastName = "Cawicaan", MiddleName = "Bue", BirthDate = DateTime.Parse("10/30/1981"), Gender = 1, IsActive = true }; var employeeInfo = new EmployeeInfo { Employee = employee, SalaryFrequency = FrequencyType.Weekly, Salary = 1000 }; var employeeInfo2 = new EmployeeInfo { Employee = employee2, SalaryFrequency = FrequencyType.Weekly, Salary = 900 }; _employeeInfoRepository.Add(employeeInfo); _employeeInfoRepository.Add(employeeInfo2); var employeeDeduction = new EmployeeDeduction { EmployeeId = 1, DeductionId = HDMF_DEDUCTION_ID, Amount = 100.10M }; var employeeDeduction2 = new EmployeeDeduction { EmployeeId = 1, DeductionId = SSS_DEDUCTION_ID, Amount = 50.25M }; var employeeDeduction3 = new EmployeeDeduction { EmployeeId = 1, DeductionId = PHILHEALTH_DEDUCTION_ID, Amount = 50.25M }; var employeeDeduction4 = new EmployeeDeduction { EmployeeId = 2, DeductionId = HDMF_DEDUCTION_ID, Amount = 100.20M }; var employeeDeduction5 = new EmployeeDeduction { EmployeeId = 2, DeductionId = SSS_DEDUCTION_ID, Amount = 45.5M }; var employeeDeduction6 = new EmployeeDeduction { EmployeeId = 2, DeductionId = PHILHEALTH_DEDUCTION_ID, Amount = 55.90M }; _employeeDeductionRepository.Add(employeeDeduction); _employeeDeductionRepository.Add(employeeDeduction2); _employeeDeductionRepository.Add(employeeDeduction3); _employeeDeductionRepository.Add(employeeDeduction4); _employeeDeductionRepository.Add(employeeDeduction5); _employeeDeductionRepository.Add(employeeDeduction6); var employeePayroll = new EmployeePayroll { EmployeeId = 1, IsTaxed = false, TaxableIncome = 1500, TotalNet = 1500, CutOffStartDate = DateTime.Parse("05/04/2016"), CutOffEndDate = DateTime.Parse("05/10/2016"), PayrollDate = DateTime.Parse("05/11/2016"), TotalGross = 1500 }; var employeePayroll2 = new EmployeePayroll { EmployeeId = 1, IsTaxed = false, TaxableIncome = 1300.25M, TotalNet = 1300.25M, CutOffStartDate = DateTime.Parse("05/11/2016"), CutOffEndDate = DateTime.Parse("05/17/2016"), PayrollDate = DateTime.Parse("05/18/2016"), TotalGross = 1300.25M }; var employeePayroll3 = new EmployeePayroll { EmployeeId = 1, IsTaxed = false, TaxableIncome = 1500.25M, TotalNet = 1500.25M, CutOffStartDate = DateTime.Parse("05/18/2016"), CutOffEndDate = DateTime.Parse("05/24/2016"), PayrollDate = DateTime.Parse("05/25/2016"), TotalGross = 1500.25M }; var employeePayroll4 = new EmployeePayroll { EmployeeId = 1, IsTaxed = false, TaxableIncome = 950.50M, TotalNet = 950.50M, CutOffStartDate = DateTime.Parse("05/25/2016"), CutOffEndDate = DateTime.Parse("05/31/2016"), PayrollDate = DateTime.Parse("06/01/2016"), TotalGross = 950.50M }; var employeePayroll5 = new EmployeePayroll { EmployeeId = 2, IsTaxed = false, TaxableIncome = 2000.05M, TotalNet = 2000.05M, CutOffStartDate = DateTime.Parse("05/04/2016"), CutOffEndDate = DateTime.Parse("05/10/2016"), PayrollDate = DateTime.Parse("05/11/2016"), TotalGross = 2000.05M }; var employeePayroll6 = new EmployeePayroll { EmployeeId = 2, IsTaxed = false, TaxableIncome = 2100, TotalNet = 2100, CutOffStartDate = DateTime.Parse("05/11/2016"), CutOffEndDate = DateTime.Parse("05/17/2016"), PayrollDate = DateTime.Parse("05/18/2016"), TotalGross = 2100 }; var employeePayroll7 = new EmployeePayroll { EmployeeId = 2, IsTaxed = false, TaxableIncome = 2200.50M, TotalNet = 2200.50M, CutOffStartDate = DateTime.Parse("05/18/2016"), CutOffEndDate = DateTime.Parse("05/24/2016"), PayrollDate = DateTime.Parse("05/25/2016"), TotalGross = 2200.50M }; var employeePayroll8 = new EmployeePayroll { EmployeeId = 2, IsTaxed = false, TaxableIncome = 750.50M, TotalNet = 750.50M, CutOffStartDate = DateTime.Parse("05/25/2016"), CutOffEndDate = DateTime.Parse("05/31/2016"), PayrollDate = DateTime.Parse("06/01/2016"), TotalGross = 750.50M }; _employeePayrollRepository.Add(employeePayroll); _employeePayrollRepository.Add(employeePayroll2); _employeePayrollRepository.Add(employeePayroll3); _employeePayrollRepository.Add(employeePayroll4); _employeePayrollRepository.Add(employeePayroll5); _employeePayrollRepository.Add(employeePayroll6); _employeePayrollRepository.Add(employeePayroll7); _employeePayrollRepository.Add(employeePayroll8); _unitOfWork.Commit(); //Current payroll IList <EmployeePayroll> payrollList = new List <EmployeePayroll>(); payrollList.Add(employeePayroll4); payrollList.Add(employeePayroll8); decimal[] results = { 200.6m, 201.6m }; //Test var counter = 0; foreach (EmployeePayroll payroll in payrollList) { var totalDeductions = _employeePayrollDeductionService .GenerateDeductionsByPayroll(payroll); Assert.AreEqual(results[counter], totalDeductions); counter++; } _unitOfWork.Commit(); //Verify var startDate = DateTime.Parse("06/01/2016"); var endDate = DateTime.Parse("06/01/2016"); /*IList<EmployeePayroll> finalizedPayroll = _employeePayrollService.GetByDateRange(startDate, endDate); * * Assert.IsNotNull(finalizedPayroll); * * Assert.AreEqual(2, finalizedPayroll.Count()); * Assert.AreEqual(1, finalizedPayroll[0].EmployeeId); * Assert.AreEqual(false, finalizedPayroll[0].IsTaxed); * Assert.AreEqual(DateTime.Parse("05/25/2016"), finalizedPayroll[0].CutOffStartDate); * Assert.AreEqual(DateTime.Parse("05/31/2016"), finalizedPayroll[0].CutOffEndDate); * Assert.AreEqual(DateTime.Parse("06/01/2016"), finalizedPayroll[0].PayrollDate); * Assert.AreEqual(749.9M, finalizedPayroll[0].TaxableIncome); * Assert.AreEqual(950.50M, finalizedPayroll[0].TotalGross);*/ //Get all deductions IList <EmployeePayrollDeduction> employeePayrollDeduction = _employeePayrollDeductionService.GetByPayroll(4); Assert.AreEqual(3, employeePayrollDeduction.Count()); Assert.AreEqual(employeePayrollDeduction[0].EmployeeId, 1); Assert.AreEqual(employeePayrollDeduction[0].EmployeePayrollId, 4); Assert.AreEqual(employeePayrollDeduction[0].Amount, 100.10M); Assert.AreEqual(employeePayrollDeduction[0].DeductionId, HDMF_DEDUCTION_ID); Assert.AreEqual(employeePayrollDeduction[1].EmployeeId, 1); Assert.AreEqual(employeePayrollDeduction[1].EmployeePayrollId, 4); Assert.AreEqual(employeePayrollDeduction[1].Amount, 50.25M); Assert.AreEqual(employeePayrollDeduction[1].DeductionId, SSS_DEDUCTION_ID); Assert.AreEqual(employeePayrollDeduction[2].EmployeeId, 1); Assert.AreEqual(employeePayrollDeduction[2].EmployeePayrollId, 4); Assert.AreEqual(employeePayrollDeduction[2].Amount, 50.25M); Assert.AreEqual(employeePayrollDeduction[2].DeductionId, PHILHEALTH_DEDUCTION_ID); //Check Tax /*Assert.AreEqual(employeePayrollDeduction[3].EmployeeId, 1); * Assert.AreEqual(employeePayrollDeduction[3].EmployeePayrollId, 4); * Assert.AreEqual(employeePayrollDeduction[3].Amount, 46.71M); * Assert.AreEqual(employeePayrollDeduction[3].DeductionId, TAX_DEDUCTION_ID);*/ /*Assert.AreEqual(2, finalizedPayroll[1].EmployeeId); * Assert.AreEqual(true, finalizedPayroll[1].IsTaxed); * Assert.AreEqual(DateTime.Parse("05/25/2016"), finalizedPayroll[1].CutOffStartDate); * Assert.AreEqual(DateTime.Parse("05/31/2016"), finalizedPayroll[1].CutOffEndDate); * Assert.AreEqual(DateTime.Parse("06/01/2016"), finalizedPayroll[1].PayrollDate); * Assert.AreEqual(548.90M, finalizedPayroll[1].TaxableIncome); * Assert.AreEqual(750.50M, finalizedPayroll[1].TotalGross); * Assert.AreEqual(437.2975M, finalizedPayroll[1].TotalDeduction); * Assert.AreEqual(313.2025M, finalizedPayroll[1].TotalNet);*/ employeePayrollDeduction = _employeePayrollDeductionService.GetByPayroll(8); Assert.AreEqual(3, employeePayrollDeduction.Count()); Assert.AreEqual(employeePayrollDeduction[0].EmployeeId, 2); Assert.AreEqual(employeePayrollDeduction[0].EmployeePayrollId, 8); Assert.AreEqual(employeePayrollDeduction[0].Amount, 100.20M); Assert.AreEqual(employeePayrollDeduction[0].DeductionId, HDMF_DEDUCTION_ID); Assert.AreEqual(employeePayrollDeduction[1].EmployeeId, 2); Assert.AreEqual(employeePayrollDeduction[1].EmployeePayrollId, 8); Assert.AreEqual(employeePayrollDeduction[1].Amount, 45.5M); Assert.AreEqual(employeePayrollDeduction[1].DeductionId, SSS_DEDUCTION_ID); Assert.AreEqual(employeePayrollDeduction[2].EmployeeId, 2); Assert.AreEqual(employeePayrollDeduction[2].EmployeePayrollId, 8); Assert.AreEqual(employeePayrollDeduction[2].Amount, 55.90M); Assert.AreEqual(employeePayrollDeduction[2].DeductionId, PHILHEALTH_DEDUCTION_ID); //Check Tax /*Assert.AreEqual(employeePayrollDeduction[3].EmployeeId, 2); * Assert.AreEqual(employeePayrollDeduction[3].EmployeePayrollId, 8); * Assert.AreEqual(employeePayrollDeduction[3].Amount, 235.6975M); * Assert.AreEqual(employeePayrollDeduction[3].DeductionId, TAX_DEDUCTION_ID);*/ }
//[TestMethod] public void GenerateEmployeeDailySalaryByDateRangeRegular() { //Arrange Initialize(); DeleteData(); var employee = new Employee { EmployeeCode = "11001", FirstName = "Jona", LastName = "Pereira", MiddleName = "Aprecio", BirthDate = DateTime.Parse("02/02/1991"), Gender = 1, IsActive = true }; var employee2 = new Employee { EmployeeCode = "11002", FirstName = "Cornelio", LastName = "Cawicaan", MiddleName = "Bue", BirthDate = DateTime.Parse("10/30/1989"), Gender = 2, IsActive = true }; var employeeInfo = new EmployeeInfo { Employee = employee, Salary = 5000, SalaryFrequency = FrequencyType.Weekly }; var employeeInfo2 = new EmployeeInfo { Employee = employee2, Salary = 8000, SalaryFrequency = FrequencyType.Weekly }; _employeeInfoRepository.Add(employeeInfo); _employeeInfoRepository.Add(employeeInfo2); var workSchedule = new WorkSchedule { TimeStart = new TimeSpan(0, 7, 0, 0), TimeEnd = new TimeSpan(0, 16, 0, 0), WeekStart = 1, WeekEnd = 5 }; var employeeWorkSchedule = new EmployeeWorkSchedule { WorkSchedule = workSchedule, EmployeeId = 1 }; var employeeWorkSchedule2 = new EmployeeWorkSchedule { WorkSchedule = workSchedule, EmployeeId = 2 }; _employeeWorkScheduleRepository.Add(employeeWorkSchedule); _employeeWorkScheduleRepository.Add(employeeWorkSchedule2); //Total EmployeeHours var totalEmployeeHours1 = new TotalEmployeeHours { Date = DateTime.Parse("05/02/2016"), EmployeeId = 1, Hours = 8, TotalEmployeeHoursId = 1, Type = RateType.Regular }; var totalEmployeeHours2 = new TotalEmployeeHours { Date = DateTime.Parse("05/02/2016"), EmployeeId = 2, Hours = 7.5, TotalEmployeeHoursId = 2, Type = RateType.Regular }; var totalEmployeeHours3 = new TotalEmployeeHours { Date = DateTime.Parse("05/03/2016"), EmployeeId = 1, Hours = 8.1, TotalEmployeeHoursId = 2, Type = RateType.Regular }; var totalEmployeeHours4 = new TotalEmployeeHours { Date = DateTime.Parse("05/03/2016"), EmployeeId = 2, Hours = 4, TotalEmployeeHoursId = 2, Type = RateType.Regular }; _totalEmployeeHoursRepository.Add(totalEmployeeHours1); _totalEmployeeHoursRepository.Add(totalEmployeeHours2); _totalEmployeeHoursRepository.Add(totalEmployeeHours3); _totalEmployeeHoursRepository.Add(totalEmployeeHours4); _unitOfWork.Commit(); //Test var dateFrom = DateTime.Parse("05/02/2016"); var dateTo = DateTime.Parse("05/03/2016"); _employeeDailyPayrollService.GenerateEmployeeDailySalaryByDateRange(dateFrom, dateTo); //Results Verification var results = _employeeDailyPayrollService.GetByDateRange(dateFrom, dateTo); Assert.IsNotNull(results); Assert.AreEqual(4, results.Count); Assert.AreEqual(1, results[0].EmployeeId); Assert.AreEqual(3, results[0].TotalEmployeeHoursId); Assert.AreEqual((decimal)1012.50, results[0].TotalPay); Assert.AreEqual(DateTime.Parse("05/03/2016"), results[0].Date); Assert.AreEqual(1, results[1].EmployeeId); Assert.AreEqual(1, results[1].TotalEmployeeHoursId); Assert.AreEqual((decimal)1000, results[1].TotalPay); Assert.AreEqual(DateTime.Parse("05/02/2016"), results[1].Date); Assert.AreEqual(2, results[2].EmployeeId); Assert.AreEqual(4, results[2].TotalEmployeeHoursId); Assert.AreEqual((decimal)800, results[2].TotalPay); Assert.AreEqual(DateTime.Parse("05/03/2016"), results[2].Date); Assert.AreEqual(2, results[3].EmployeeId); Assert.AreEqual(2, results[3].TotalEmployeeHoursId); Assert.AreEqual((decimal)1500, results[3].TotalPay); Assert.AreEqual(DateTime.Parse("05/02/2016"), results[3].Date); }
public void GeneratePayrollNetPayByDateRange() { Initialize(); DeleteInfo(); //Test Data var employee = new Employee { EmployeeCode = "11001", FirstName = "Jona", LastName = "Pereira", MiddleName = "Aprecio", BirthDate = DateTime.Parse("02/02/1991"), Gender = 1, IsActive = true }; var employee2 = new Employee { EmployeeCode = "11002", FirstName = "Cornelio Jr.", LastName = "Cawicaan", MiddleName = "Bue", BirthDate = DateTime.Parse("10/30/1989"), Gender = 2, IsActive = true }; var employeeInfo = new EmployeeInfo { Employee = employee, Salary = 120, SalaryFrequency = FrequencyType.Hourly, Allowance = 350 }; var employeeInfo2 = new EmployeeInfo { Employee = employee2, Salary = 150, SalaryFrequency = FrequencyType.Hourly, Allowance = 400 }; _employeeInfoRepository.Add(employeeInfo); _employeeInfoRepository.Add(employeeInfo2); var payrollDate = DateTime.Parse("05/21/2016"); var employeePayrollItem = new EmployeePayrollItem { EmployeeId = 1, TotalAmount = 220.55M, TotalHours = 8, PayrollDate = payrollDate, RateType = RateType.Regular, Multiplier = 1, RatePerHour = 100 }; var employeePayrollItem2 = new EmployeePayrollItem { EmployeeId = 1, TotalHours = 10, TotalAmount = 100, PayrollDate = payrollDate, RateType = RateType.OverTime, Multiplier = 1, RatePerHour = 200 }; var employeePayrollItem3 = new EmployeePayrollItem { EmployeeId = 1, TotalHours = 10, TotalAmount = 15, PayrollDate = payrollDate, RateType = RateType.OverTime, Multiplier = 1, RatePerHour = 12.23M }; var employeePayrollItem4 = new EmployeePayrollItem { EmployeeId = 2, TotalHours = 15.2, TotalAmount = 300.10M, PayrollDate = payrollDate, RateType = RateType.NightDifferential, Multiplier = 1, RatePerHour = 122.2M }; var employeePayrollItem5 = new EmployeePayrollItem { EmployeeId = 2, TotalHours = 1.25, TotalAmount = 50, PayrollDate = payrollDate, RateType = RateType.RegularHoliday, Multiplier = 1, RatePerHour = 0.25M }; var employeePayrollItem6 = new EmployeePayrollItem { EmployeeId = 1, TotalAmount = 150.12M, PayrollDate = payrollDate, RateType = RateType.RegularHolidayNotWorked, Multiplier = 1, RatePerHour = 0.25M }; var employeePayrollItem7 = new EmployeePayrollItem { EmployeeId = 1, TotalAmount = 40, PayrollDate = payrollDate, RateType = RateType.RegularHolidayOT, Multiplier = 1, RatePerHour = 0.25M }; var employeePayrollItem8 = new EmployeePayrollItem { EmployeeId = 2, TotalAmount = 540.02M, PayrollDate = payrollDate, RateType = RateType.RegularHolidayRestDay, Multiplier = 1, RatePerHour = 0.25M }; //Not included var employeePayrollItem9 = new EmployeePayrollItem { EmployeeId = 2, TotalAmount = 540.02M, PayrollDate = DateTime.Parse("06/20/2016"), RateType = RateType.RegularHolidayRestDay, Multiplier = 1, RatePerHour = 0.25M }; _employeePayrollItemRepository.Add(employeePayrollItem); _employeePayrollItemRepository.Add(employeePayrollItem2); _employeePayrollItemRepository.Add(employeePayrollItem3); _employeePayrollItemRepository.Add(employeePayrollItem4); _employeePayrollItemRepository.Add(employeePayrollItem5); _employeePayrollItemRepository.Add(employeePayrollItem6); _employeePayrollItemRepository.Add(employeePayrollItem7); _employeePayrollItemRepository.Add(employeePayrollItem8); _employeePayrollItemRepository.Add(employeePayrollItem9); _unitOfWork.Commit(); //Test var dateStart = DateTime.Parse("05/19/2016"); var dateEnd = DateTime.Parse("05/20/2016"); var payrollList = _employeePayrollService.GeneratePayrollGrossPayByDateRange(payrollDate, dateStart, dateEnd); Assert.IsNotNull(payrollList); Assert.AreEqual(2, payrollList.Count()); Assert.AreEqual(1, payrollList[0].EmployeeId); Assert.AreEqual(dateStart, payrollList[0].CutOffStartDate); Assert.AreEqual(dateEnd, payrollList[0].CutOffEndDate); Assert.AreEqual(false, payrollList[0].IsTaxed); Assert.AreEqual(0, payrollList[0].TotalAdjustment); Assert.AreEqual(0, payrollList[0].TotalDeduction); Assert.AreEqual(525.67M, payrollList[0].TotalGross); Assert.AreEqual(525.67M, payrollList[0].TotalNet); Assert.AreEqual(525.67M, payrollList[0].TaxableIncome); Assert.AreEqual(2, payrollList[1].EmployeeId); Assert.AreEqual(dateStart, payrollList[1].CutOffStartDate); Assert.AreEqual(dateEnd, payrollList[1].CutOffEndDate); Assert.AreEqual(false, payrollList[1].IsTaxed); Assert.AreEqual(0, payrollList[1].TotalAdjustment); Assert.AreEqual(0, payrollList[1].TotalDeduction); Assert.AreEqual(890.12M, payrollList[1].TotalGross); Assert.AreEqual(890.12M, payrollList[1].TotalNet); Assert.AreEqual(890.12M, payrollList[1].TaxableIncome); }
public virtual ActionResult Create(EmployeeInfoViewModel viewModel) { //validate birthdate if (!viewModel.EmployeeInfo.Employee.BirthDate.IsValidBirthDate()) { GetDropDowns(viewModel, viewModel.EmployeeInfo.EmployeeId); ModelState.AddModelError("", ErrorMessages.INVALID_DATE); return(View("Details", viewModel)); } //validate employee code var existingEmployeeCode = _employeeRepository.Find(x => x.EmployeeCode == viewModel.EmployeeInfo.Employee.EmployeeCode && x.IsActive); if (existingEmployeeCode != null && existingEmployeeCode.Any()) { GetDropDowns(viewModel, viewModel.EmployeeInfo.EmployeeId); ModelState.AddModelError("", ErrorMessages.USED_EMPLOYEECODE); return(View("Details", viewModel)); } var employee = viewModel.EmployeeInfo.Employee.MapItem <Employee>(); employee.Gender = viewModel.Gender; var employeeInfo = viewModel.EmployeeInfo; employeeInfo.Employee = employee; employeeInfo.PositionId = viewModel.PositionId != 0 ? viewModel.PositionId : (int?)null; employeeInfo.SalaryFrequency = (FrequencyType)viewModel.PaymentFrequency; employeeInfo.EmploymentStatus = viewModel.EmploymentStatus; var newEmployee = _employeeInfoRepository.Add(employeeInfo).Employee; _employeeInfoHistoryRepository.Add(employeeInfo.MapItem <EmployeeInfoHistory>()); _unitOfWork.Commit(); //departments var departments = viewModel.CheckedDepartments != null ? viewModel.CheckedDepartments.Split(',').Select(Int32.Parse) : new List <int>(); _employeeRepository.UpdateDepartment(departments, employee.EmployeeId); //employee deductions if (!String.IsNullOrEmpty(viewModel.CheckedEmployeeDeductions)) { var employeeDeductions = viewModel.CheckedEmployeeDeductions != null ? JsonConvert.DeserializeObject <List <EmployeeDeduction> >(viewModel.CheckedEmployeeDeductions) : new List <EmployeeDeduction>(); _employeeDeductionService.UpdateEmployeeDeduction(employeeDeductions, viewModel.EmployeeInfo.EmployeeId); } //work schedule if (viewModel.WorkScheduleId > 0) { _employeeWorkScheduleService.Add(viewModel.WorkScheduleId, employee.EmployeeId); } _unitOfWork.Commit(); //upload the picture and update the record var imagePath = UploadImage(newEmployee.EmployeeId); if (!String.IsNullOrEmpty(imagePath)) { _employeeRepository.Update(newEmployee); newEmployee.Picture = imagePath; _unitOfWork.Commit(); } _logger.Info(LoggerMessages.INFO_USER_CREATE, newEmployee.EmployeeId, User.Identity.GetUserId()); return(RedirectToAction("Index")); }