public void ComputeAllowance(DateTime payrollStartDate, DateTime payrollEndDate, IList <EmployeePayroll> payrollList) { if (_employeePayrollAllowanceService.proceedAllowance(payrollStartDate, payrollEndDate)) { // Get all active employees var employees = _employeeInfoService.GetAllWithAllowance(); int totalWorkHoursPerDay = Convert.ToInt32(_settingService.GetByKey(PAYROLL_TOTAL_HOURS)); var totalDays = Convert.ToInt32(_settingService.GetByKey(ALLOWANCE_TOTAL_DAYS)); foreach (EmployeeInfo employee in employees) { decimal totalAllowance = _employeePayrollAllowanceService .ComputeEmployeeAllowance(totalDays, totalWorkHoursPerDay, employee, payrollStartDate, payrollEndDate); //Update employee payroll EmployeePayroll employeePayroll = payrollList.OfType <EmployeePayroll>() .Where(p => p.EmployeeId == employee.EmployeeId).FirstOrDefault(); if (employeePayroll != null) { employeePayroll.TotalAllowance = totalAllowance; employeePayroll.TaxableIncome = decimal.Add(employeePayroll.TaxableIncome, totalAllowance); employeePayroll.TotalGross = decimal.Add(employeePayroll.TotalGross, totalAllowance); employeePayroll.TotalNet = employeePayroll.TotalGross; //TODO change this if allowance is already a list //Create allowance payroll item EmployeePayrollItem allowanceItem = new EmployeePayrollItem(); allowanceItem.EmployeeId = employeePayroll.EmployeeId; allowanceItem.PayrollId = employeePayroll.PayrollId; allowanceItem.PayrollDate = employeePayroll.PayrollDate; allowanceItem.Multiplier = 1; allowanceItem.RatePerHour = employee.Salary; allowanceItem.RateType = RateType.Allowance; allowanceItem.TotalAmount = employeePayroll.TotalAllowance; _employeePayrollItemService.Add(allowanceItem); _unitOfWork.Commit(); } } } }
public void ComputeAllowanceNone() { 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 totalEmployeeHours = new TotalEmployeeHours { EmployeeId = 1, Date = DateTime.Parse("05/12/2016"), Hours = 8, Type = RateType.Regular, TotalEmployeeHoursId = 1 }; var totalEmployeeHours2 = new TotalEmployeeHours { EmployeeId = 1, Date = DateTime.Parse("05/12/2016"), Hours = 3, Type = RateType.OverTime, TotalEmployeeHoursId = 2 }; var totalEmployeeHours3 = new TotalEmployeeHours { EmployeeId = 2, Date = DateTime.Parse("05/12/2016"), Hours = 5, Type = RateType.Regular, TotalEmployeeHoursId = 1 }; var totalEmployeeHours4 = new TotalEmployeeHours { EmployeeId = 2, Date = DateTime.Parse("05/12/2016"), Hours = 2, Type = RateType.OverTime, TotalEmployeeHoursId = 2 }; var totalEmployeeHours5 = new TotalEmployeeHours { EmployeeId = 1, Date = DateTime.Parse("05/13/2016"), Hours = 10, Type = RateType.Regular, TotalEmployeeHoursId = 1 }; var totalEmployeeHours6 = new TotalEmployeeHours { EmployeeId = 1, Date = DateTime.Parse("05/13/2016"), Hours = 3, Type = RateType.OverTime, TotalEmployeeHoursId = 2 }; var totalEmployeeHours7 = new TotalEmployeeHours { EmployeeId = 2, Date = DateTime.Parse("05/13/2016"), Hours = 1, Type = RateType.Regular, TotalEmployeeHoursId = 1 }; var totalEmployeeHours8 = new TotalEmployeeHours { EmployeeId = 2, Date = DateTime.Parse("05/13/2016"), Hours = 2, Type = RateType.NightDifferential, TotalEmployeeHoursId = 2 }; _totalEmployeeHoursRepository.Add(totalEmployeeHours); _totalEmployeeHoursRepository.Add(totalEmployeeHours2); _totalEmployeeHoursRepository.Add(totalEmployeeHours3); _totalEmployeeHoursRepository.Add(totalEmployeeHours4); _totalEmployeeHoursRepository.Add(totalEmployeeHours5); _totalEmployeeHoursRepository.Add(totalEmployeeHours6); _totalEmployeeHoursRepository.Add(totalEmployeeHours7); _totalEmployeeHoursRepository.Add(totalEmployeeHours8); var payrollDate = DateTime.Parse("05/18/2016"); var employeePayrollItem = new EmployeePayrollItem { EmployeeId = 1, TotalAmount = 220.55M, PayrollDate = payrollDate, RateType = RateType.RegularHolidayRestDay, Multiplier = 1, RatePerHour = 0.25M }; var employeePayrollItem2 = new EmployeePayrollItem { EmployeeId = 1, TotalAmount = 100, PayrollDate = payrollDate, RateType = RateType.RegularHolidayRestDay, Multiplier = 1, RatePerHour = 0.25M }; var employeePayrollItem3 = new EmployeePayrollItem { EmployeeId = 1, TotalAmount = 15, PayrollDate = payrollDate, RateType = RateType.RegularHolidayRestDay, Multiplier = 1, RatePerHour = 0.25M }; var employeePayrollItem4 = new EmployeePayrollItem { EmployeeId = 2, TotalAmount = 300.10M, PayrollDate = payrollDate, RateType = RateType.RegularHolidayRestDay, Multiplier = 1, RatePerHour = 0.25M }; var employeePayrollItem5 = new EmployeePayrollItem { EmployeeId = 2, TotalAmount = 50, PayrollDate = payrollDate, RateType = RateType.RegularHolidayRestDay, Multiplier = 1, RatePerHour = 0.25M }; var employeePayrollItem6 = new EmployeePayrollItem { EmployeeId = 1, TotalAmount = 150.12M, PayrollDate = payrollDate, RateType = RateType.RegularHolidayRestDay, Multiplier = 1, RatePerHour = 0.25M }; var employeePayrollItem7 = new EmployeePayrollItem { EmployeeId = 1, TotalAmount = 40, PayrollDate = payrollDate, RateType = RateType.RegularHolidayRestDay, Multiplier = 1, RatePerHour = 0.25M }; var employeePayrollItem8 = new EmployeePayrollItem { EmployeeId = 2, TotalAmount = 540.02M, PayrollDate = payrollDate, 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); _unitOfWork.Commit(); //Test var dateStart = DateTime.Parse("05/11/2016"); var dateEnd = DateTime.Parse("05/17/2016"); _employeePayrollService.GeneratePayroll(dateStart, dateEnd); _unitOfWork.Commit(); var payrollList = _employeePayrollService.GetByDateRange(payrollDate, payrollDate); 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(0, decimal.Round(payrollList[0].TotalAllowance, 2)); 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); Assert.AreEqual(0, decimal.Round(payrollList[1].TotalAllowance, 2)); }
public IList <EmployeePayroll> GeneratePayrollGrossPayByDateRange(DateTime payrollDate, DateTime payrollStartDate, DateTime payrollEndDate) { var employeePayrollItems = _employeePayrollItemService.GetByDateRange(payrollDate, payrollDate); var employeePayrollList = new List <EmployeePayroll>(); if (employeePayrollItems != null && employeePayrollItems.Count() > 0) { //Hold last payroll processed EmployeePayroll tempEmployeePayroll = null; DateTime today = DateTime.Now; EmployeePayrollItem lastPayrollItem = employeePayrollItems.Last(); foreach (EmployeePayrollItem item in employeePayrollItems) { //If should create new entry if (tempEmployeePayroll == null || (tempEmployeePayroll.Employee.EmployeeId != item.EmployeeId)) { if (tempEmployeePayroll != null) { //Save last employeePayrollAllowanceServiceentry if for different employee _employeePayrollRepository.Add(tempEmployeePayroll); employeePayrollList.Add(tempEmployeePayroll); } Employee employee = _employeeService.GetById(item.EmployeeId); EmployeePayroll employeePayroll = new EmployeePayroll { Employee = employee, CutOffStartDate = payrollStartDate, CutOffEndDate = payrollEndDate, PayrollGeneratedDate = today, PayrollDate = payrollDate, TotalGross = item.TotalAmount, TotalNet = item.TotalAmount, TaxableIncome = item.TotalAmount }; tempEmployeePayroll = employeePayroll; } else { //Update last entry tempEmployeePayroll.TotalGross += item.TotalAmount; tempEmployeePayroll.TotalNet += item.TotalAmount; tempEmployeePayroll.TaxableIncome += item.TotalAmount; } //If last iteration save if (item.Equals(lastPayrollItem)) { _employeePayrollRepository.Add(tempEmployeePayroll); employeePayrollList.Add(tempEmployeePayroll); } } //Commit _unitOfWork.Commit(); } MapItemsToPayroll(employeePayrollItems, employeePayrollList); return(employeePayrollList); /*foreach (EmployeeDailyPayroll dailyPayroll in employeeDailyPayroll) * { * //If should create new entry * if (tempEmployeePayroll == null || * (tempEmployeePayroll.Employee.EmployeeId != dailyPayroll.EmployeeId)) * { * if (tempEmployeePayroll != null) * { * //Save last entry if for different employee * _employeePayrollRepository.Add(tempEmployeePayroll); * employeePayrollList.Add(tempEmployeePayroll); * } * Employee employee = _employeeService.GetById(dailyPayroll.EmployeeId); * * EmployeePayroll employeePayroll = new EmployeePayroll * { * Employee = employee, * CutOffStartDate = dateFrom, * CutOffEndDate = dateTo, * PayrollGeneratedDate = today, * PayrollDate = payrollDate, * TotalGross = dailyPayroll.TotalPay, * TotalNet = dailyPayroll.TotalPay, * TaxableIncome = dailyPayroll.TotalPay * }; * * tempEmployeePayroll = employeePayroll; * createNewPayrollItem = true; * * } * else * { * //Update last entry * tempEmployeePayroll.TotalGross += dailyPayroll.TotalPay; * tempEmployeePayroll.TotalNet += dailyPayroll.TotalPay; * tempEmployeePayroll.TaxableIncome += dailyPayroll.TotalPay; * * if (tempEmployeePayrollItem.RateType != dailyPayroll.RateType) * { * createNewPayrollItem = true; * } * else * { * createNewPayrollItem = false; * } * } * * //Payroll Item * var totalEmployeeHours = _totalEmployeeHoursService.GetById(dailyPayroll.TotalEmployeeHoursId.Value); * //If should create new item * if (createNewPayrollItem) * { * //Save last item * if (tempEmployeePayrollItem != null) * { * _employeePayrollItemService.Add(tempEmployeePayrollItem); * tempEmployeePayrollItem = null; * } * * /*tempEmployeePayrollItem = new EmployeePayrollItem * { * EmployeePayroll = tempEmployeePayroll, * RateType = dailyPayroll.RateType, * TotalAmount = dailyPayroll.TotalPay, * TotalHours = totalEmployeeHours.Hours * }; * * } * else * { * //Update last entry * tempEmployeePayrollItem.TotalHours += totalEmployeeHours.Hours; * tempEmployeePayrollItem.TotalAmount += dailyPayroll.TotalPay; * * } * * * //If last iteration save * if (dailyPayroll.Equals(last)) * { * _employeePayrollRepository.Add(tempEmployeePayroll); * _employeePayrollItemService.Add(tempEmployeePayrollItem); * employeePayrollList.Add(tempEmployeePayroll); * } * })*/ }