コード例 #1
0
        public IList <EmployeePayrollPerCompany> GeneratePayrollGrossPayByDateRange(DateTime payrollDate, DateTime payrollStartDate, DateTime payrollEndDate)
        {
            var employeePayrollItems = _employeePayrollItemService.GetByDateRange(payrollDate, payrollDate);
            var employeePayrollList  = new List <EmployeePayrollPerCompany>();

            if (employeePayrollItems != null && employeePayrollItems.Count() > 0)
            {
                //Hold last payroll processed
                EmployeePayrollPerCompany tempEmployeePayroll = null;
                DateTime today = DateTime.Now;
                EmployeePayrollItemPerCompany lastPayrollItem = employeePayrollItems.Last();

                foreach (EmployeePayrollItemPerCompany item in employeePayrollItems)
                {
                    //If should create new entry
                    if (tempEmployeePayroll == null ||                                //First iteration
                        tempEmployeePayroll.Employee.EmployeeId != item.EmployeeId || //Diff employee
                        tempEmployeePayroll.CompanyId != item.CompanyId)              //Dif company
                    {
                        if (tempEmployeePayroll != null)
                        {
                            //Save last employeePayroll entry if for different employee
                            _employeePayrollRepository.Add(tempEmployeePayroll);
                            employeePayrollList.Add(tempEmployeePayroll);
                        }
                        Employee employee = _employeeService.GetById(item.EmployeeId);

                        EmployeePayrollPerCompany employeePayroll = new EmployeePayrollPerCompany
                        {
                            Employee             = employee,
                            CutOffStartDate      = payrollStartDate,
                            CutOffEndDate        = payrollEndDate,
                            PayrollGeneratedDate = today,
                            PayrollDate          = payrollDate,
                            TotalGross           = item.TotalAmount,
                            TotalNet             = item.TotalAmount,
                            TaxableIncome        = item.TotalAmount,
                            CompanyId            = item.CompanyId
                        };

                        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);
        }
コード例 #2
0
 public void Update(EmployeePayrollPerCompany employeePayroll)
 {
     _employeePayrollRepository.Update(employeePayroll);
 }