예제 #1
0
        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));
        }
예제 #3
0
        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);
             *  }
             * })*/
        }