private void initData() { this.dtTime.CustomFormat = " "; if (GlobalInfo.loginUser.UserType == GlobalInfo.ADMIN) { empList = empDao.FindAll(); cboEmp.Enabled = true; } else if (GlobalInfo.loginUser.UserType == GlobalInfo.DEPT_MGR) { empList = empDao.FindByDeptId(GlobalInfo.loginEmp.DeptId); cboEmp.Enabled = true; } else { empList = new List <HREmployee>(); empList.Add(GlobalInfo.loginEmp); cboEmp.Enabled = false; cboEmp.SelectedIndex = 0; } cboEmp.DataSource = empList; HRPayroll vo = new HRPayroll(); vo.EmpId = GlobalInfo.loginEmp.Id; list = dao.FindByWhere(vo); var bindingList = new BindingList <HRPayroll>(list); listSource = new BindingSource(bindingList, null); grid.DataSource = listSource; }
private void btnCreate_Click(object sender, EventArgs e) { int cYear = DateTime.Now.Year; int cMonth = DateTime.Now.Month; if(dtTime.Value.Year > cYear) { MessageBoxEx.Show(this, string.Format("日期选择错误,不能超过:{0}年",cYear)); return; } if(dtTime.Value.Month >= cMonth) { MessageBoxEx.Show(this, string.Format("日期选择错误,生成的日期必须是{0}月份之前的", cMonth)); return; } if(dao.FindByDateInterval(dtTime.Value.Year, dtTime.Value.Month).Count > 0) { MessageBoxEx.Show(this, string.Format("{0}年{1}月的工资单已经生成过了", dtTime.Value.Year, dtTime.Value.Month)); return; } string startDate = string.Format("{0}-{1}-01", dtTime.Value.Year, dtTime.Value.Month); string endDate = string.Format("{0}-{1}-31", dtTime.Value.Year, dtTime.Value.Month); // 请假 List<HRLeave> leaveList = leaveDao.FindByInterval(startDate, endDate); Dictionary<string, HRPayroll> hashMap = CalcLeaveDay(leaveList); // 合同 List<HRContract> contractList = contractDao.FindByDate(endDate); list = new List<HRPayroll>(); int index = 1; foreach (var contractVo in contractList) { HRPayroll vo = new HRPayroll(); vo.Id = UidUtils.GGuidPrefix(index); vo.EmpId = contractVo.EmpId; vo.EmpName = contractVo.EmpName; vo.PayrollDate = dtTime.Text; vo.LeaveDay = hashMap.ContainsKey(contractVo.EmpId) ? hashMap[contractVo.EmpId].LeaveDay : 0; vo.SickLeaveDay = hashMap.ContainsKey(contractVo.EmpId) ? hashMap[contractVo.EmpId].SickLeaveDay : 0; // 是否在试用期(1:是,0:否) vo.ProbationStatus = JudgeIsProbationStatus(contractVo); vo.RealSalary = CalcSalary(contractVo.Salary, vo); list.Add(vo); index++; } var bindingList = new BindingList<HRPayroll>(list); listSource = new BindingSource(bindingList, null); grid.DataSource = null; grid.DataSource = listSource; if(list != null && list.Count > 0) { btnCommit.Enabled = true; } }
private Dictionary<string, HRPayroll> CalcLeaveDay(List<HRLeave> leaveList) { Dictionary<string, HRPayroll> hashMap = new Dictionary<string, HRPayroll>(); foreach (HRLeave leaveVo in leaveList) { HRPayroll vo = null; if (hashMap.ContainsKey(leaveVo.EmpId)) { vo = hashMap[leaveVo.EmpId]; } else { vo = new HRPayroll(); hashMap[leaveVo.EmpId] = vo; } // vo.LeaveDay += leaveVo.Type // 请假类型(1:年假,2:病假,3:婚假,4:产假,5:事假) if(leaveVo.Type == 2) { vo.SickLeaveDay += leaveVo.LeaveDay; } else if(leaveVo.Type == 5) { vo.LeaveDay += leaveVo.LeaveDay; } } return hashMap; }
/// <summary> /// 更新 /// </summary> /// <returns></returns> public int Update(HRPayroll vo) { return(conn.Execute(@"update HR_Payroll SET NAME=@Name WHERE id = @Id", new { Id = vo.Id })); }
/// <summary> /// 输入转VO /// </summary> /// <returns></returns> private HRPayroll InputToVo() { HRPayroll vo = new HRPayroll(); vo.EmpId = !EmptyUtils.EmptyObj(cboEmp.SelectedValue) ? cboEmp.SelectedValue.ToString() : ""; vo.PayrollDate = dtTime.Text; return(vo); }
/// <summary> /// 计算逻辑: /// 1. 试用期工资80% /// 2. 按30天工作日计算,病假每天工资扣除20%,事假扣除100% /// </summary> /// <param name="salary"></param> /// <param name="vo"></param> /// <returns></returns> private float CalcSalary(float salary, HRPayroll vo) { if(vo.ProbationStatus == 1) { salary = (float)(salary * 0.8); } float daySalary = salary / 30; float ret = daySalary * (30 - vo.SickLeaveDay - vo.LeaveDay); ret += (float)(daySalary * vo.SickLeaveDay * 0.8); return ret; }
// 新增 public int Add(HRPayroll vo) { int ret = conn.Execute(@"insert HR_Payroll(ID,EMP_ID,PAYROLL_DATE,PROBATION_STATUS,SICK_LEAVE_DAY,LEAVE_DAY,REAL_SALARY) values (@Id,@EmpId, @PayrollDate,@ProbationStatus,@SickLeaveDay,@LeaveDay,@RealSalary)", new[] { new { Id = vo.Id, EmpId = vo.EmpId, PayrollDate = vo.PayrollDate, ProbationStatus = vo.ProbationStatus, SickLeaveDay = vo.SickLeaveDay, LeaveDay = vo.LeaveDay, RealSalary = vo.RealSalary } }); Console.WriteLine(string.Format("插入数据库成功{0}", ret)); return(ret); }
/// <summary> /// 根据工资单日期区间查询 /// </summary> /// <param name="id"></param> /// <returns></returns> public List <HRPayroll> FindByWhere(HRPayroll vo) { string whereSql = ""; if (!EmptyUtils.EmptyStr(vo.PayrollDate)) { whereSql += " and PAYROLL_DATE=@PayrollDate"; } if (!EmptyUtils.EmptyStr(vo.EmpId)) { whereSql += " and EMP_ID=@EmpId"; } string baseSql = "select p.*, e.NAME as EMP_NAME from HR_PAYROLL p, HR_EMPLOYEE e where p.EMP_ID = e.ID "; List <HRPayroll> list = conn.Query <HRPayroll>(baseSql + whereSql, new { PayrollDate = vo.PayrollDate, EmpId = vo.EmpId }).ToList(); return(list); }