public ActionResult DeleteConfirmed(int id) { EveryDaySignInDate everyDaySignInDate = db.EveryDaySignInDates.Find(id); db.EveryDaySignInDates.Remove(everyDaySignInDate); db.SaveChanges(); return(RedirectToAction("Index")); }
/// <summary> /// 处理出差的情况 /// </summary> /// <param name="CurrentDate"></param> public void CheckEvectionApplies(DateTime CurrentDate) { List <EvectionApplies> list = db.EvectionApplies.Where(p => DbFunctions.TruncateTime(p.StartDateTime) <= CurrentDate && DbFunctions.TruncateTime(p.EndDateTime) >= CurrentDate).ToList(); bool NeedSignIn = db.CheckingInParamsBools.Find(1).Value; List <EveryDaySignInDate> tmpEveryDay = db.EveryDaySignInDates.Where(p => p.Date == CurrentDate).ToList(); //遍历在CurrentDate内的所有出差申请 foreach (EvectionApplies tmp in list) { EveryDaySignInDate EveryDaySignIn = null; try { EveryDaySignIn = tmpEveryDay.Where(p => p.StaffNumber.Equals(tmp.StaffNumber)).Single(); } catch (Exception e) { Tools.WriteErrorLog(e); return; } //标记是出差考勤的情况 EveryDaySignIn.IsOnEvection = true; /** * 获取在出差时间段内的所有打卡时间点,有两种处理方式: * 1、出差需要打卡:更改这些打卡点的SignInType值 * 2、出差不需要打卡,直接删除这些打卡点就行 * */ List <SignInCardStatus> tmpList = db.SignInCardStatus.Where(p => p.StaffNumber.Equals(tmp.StaffNumber) && p.NeedWorkTime >= tmp.StartDateTime.TimeOfDay && p.NeedWorkTime <= tmp.EndDateTime.TimeOfDay).ToList(); //需要打卡 if (NeedSignIn) { //更改打卡的类型 foreach (SignInCardStatus tmpSignIn in tmpList) { tmpSignIn.SignInType = 2; } } //不用打卡,就直接删除打卡点就行 else { //直接写入日考勤报表的工作时间 WorkManages work = db.WorkManages.Where(p => p.StaffNumber.Equals(tmp.StaffNumber) && p.Date == CurrentDate).Single(); EveryDaySignIn.WorkHours = db.Works.Where(p => p.Id == work.WorksId).Single().TotalWorkHours; db.SignInCardStatus.RemoveRange(tmpList); } db.Entry(EveryDaySignIn).State = EntityState.Modified; if (tmp.EndDateTime.Date == CurrentDate) { tmp.IsRead = true; db.Entry(tmp).State = EntityState.Modified; } db.SaveChanges(); //保存更改 } }
public ActionResult Edit([Bind(Include = "Id,Week,Date,StaffNumber,WorksId,WorkHours,WorkDays,NormalWorkOvertimeHours,WeekendWorkOvertimeHours,VacateType,VacateHours,HolidayHours,TotalWorkOvertimeHours,TotalComeLateMinutes,TotalLeaveEarlyMinutes,AbsenteeismHours,AuditStatus,StaffConfirm,IsNightWork,WorkOvertimeHours,OriginalSignInData,Remark,IsOnEvection")] EveryDaySignInDate everyDaySignInDate) { if (ModelState.IsValid) { db.Entry(everyDaySignInDate).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } return(View(everyDaySignInDate)); }
/// <summary> /// 计算日考勤报表中的出差情况,其实和处理正班的情况是一样的,只是SignInType的值不同而已 /// </summary> /// <param name="CurrentDate">日考勤报表中的时间</param> /// <param name="StaffNumber">同一时间下员工号</param> public void CalculateEvection(DateTime CurrentDate, string StaffNumber) { //先处理正常上班的情况 List <SignInCardStatus> SignInCardStatus = db.SignInCardStatus.Where(p => p.IsRead == false && p.StaffNumber == StaffNumber && p.WorkDate == CurrentDate && p.SignInType == 2).OrderBy(p => p.NeedWorkTime).ToList(); EveryDaySignInDate everydaysignindate = null; WorkManages WorkManages = null; List <EveryDaySignInDate> EveryDays = db.EveryDaySignInDates.Where(p => p.Date == CurrentDate).ToList(); List <WorkManages> Works = db.WorkManages.Where(p => p.Date == CurrentDate).ToList(); try { everydaysignindate = EveryDays.Where(p => p.StaffNumber.Equals(StaffNumber)).First(); WorkManages = Works.Where(p => p.StaffNumber == StaffNumber && p.Date == CurrentDate).Single(); int totalhours = (from works in db.Works where works.Id == WorkManages.WorksId select works.TotalWorkHours).Single(); everydaysignindate.WorkHours = totalhours; int totalearlyminutes = 0; int totallateminutes = 0; for (int i = 0; i < SignInCardStatus.Count; i++) { //只要没有打卡,暂时只按照旷职处理 if (SignInCardStatus[i].SignInTime == null && SignInCardStatus[i].Type == "上班") { everydaysignindate.AbsenteeismHours += SignInCardStatus[i + 1].NeedWorkTime.Hours - SignInCardStatus[i].NeedWorkTime.Hours; } //最后一个判断条件的作用是:避免上下班都没有打卡被记两次旷职的情况,实际只记一次 if (SignInCardStatus[i].SignInTime == null && SignInCardStatus[i].Type == "下班" && SignInCardStatus[i - 1].SignInTime != null) { everydaysignindate.AbsenteeismHours += SignInCardStatus[i].NeedWorkTime.Hours - SignInCardStatus[i - 1].NeedWorkTime.Hours; } totallateminutes = totallateminutes + SignInCardStatus[i].ComeLateMinutes; totalearlyminutes = totalearlyminutes + SignInCardStatus[i].LeaveEarlyMinutes; } totallateminutes = this.CalculateLateMinutes(totallateminutes); totalearlyminutes = this.CalculateEarlyMinutes(totalearlyminutes); everydaysignindate.TotalComeLateMinutes = totallateminutes; everydaysignindate.TotalLeaveEarlyMinutes = totalearlyminutes; everydaysignindate.AbsenteeismHours += this.CalculateAbsentHours(totallateminutes, totalearlyminutes); everydaysignindate.WorkHours -= everydaysignindate.AbsenteeismHours; } catch (Exception e) { Tools.WriteErrorLog(e); return; } db.Entry(everydaysignindate).State = EntityState.Modified; db.SaveChanges(); }
// GET: EveryDaySignInDates/Delete/5 public ActionResult Delete(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } EveryDaySignInDate everyDaySignInDate = db.EveryDaySignInDates.Find(id); if (everyDaySignInDate == null) { return(HttpNotFound()); } return(View(everyDaySignInDate)); }
//根据打卡表中的SignInType,单独处理加班的打卡情况 public void CalculateOvertime(DateTime CurrentDate) { List <SignInCardStatus> SignInCards = db.SignInCardStatus.Where(p => p.IsRead == false && p.WorkDate == CurrentDate && p.SignInType == 1).ToList(); List <string> staffNumbers = SignInCards.Select(p => p.StaffNumber).Distinct().ToList(); List <EveryDaySignInDate> EveryDays = db.EveryDaySignInDates.Where(p => p.Date == CurrentDate).ToList(); foreach (string StaffNumber in staffNumbers) { //处理加班打卡的情况 List <SignInCardStatus> SignInCardStatus = SignInCards.Where(p => p.StaffNumber.Equals(StaffNumber)).ToList(); EveryDaySignInDate everydaysignindate = null; try { everydaysignindate = EveryDays.Where(p => p.StaffNumber.Equals(StaffNumber)).First(); int totalearlyminutes = 0; int totallateminutes = 0; //加班暂时不做未打卡算旷职的处理 foreach (SignInCardStatus sc in SignInCardStatus) { totallateminutes += sc.ComeLateMinutes; totalearlyminutes += sc.LeaveEarlyMinutes; } totallateminutes = this.CalculateLateMinutes(totallateminutes); totalearlyminutes = this.CalculateEarlyMinutes(totalearlyminutes); everydaysignindate.TotalComeLateMinutes += totallateminutes; everydaysignindate.TotalLeaveEarlyMinutes += totalearlyminutes; double tmpAbsentHours = this.CalculateAbsentHours(totallateminutes, totalearlyminutes); everydaysignindate.AbsenteeismHours += tmpAbsentHours; everydaysignindate.TotalWorkOvertimeHours -= tmpAbsentHours; } catch (Exception e) { Tools.WriteErrorLog(e); return; } db.Entry(everydaysignindate).State = EntityState.Modified; db.SaveChanges(); } }
/// <summary> /// 处理员工请假情况 /// </summary> /// <param name="CurrentDate">当前时间</param> public void VacateDell(DateTime CurrentDate) { BonsaiiDbContext db = new BonsaiiDbContext("Data Source = 211.149.199.42,1433;Initial Catalog = Bonsaii0000000008;User ID = sa;Password = admin123@;"); SystemDbContext sysDb = new SystemDbContext("Data Source = 211.149.199.42,1433;Initial Catalog = BonsaiiSystem;User ID = sa;Password = admin123@;"); //获取请假表中未读的请假申请,条件为IsRead,当前员工号和,,以列表形式输出; List <VacateApplies> VacateApplies = db.VacateApplies.Where(p => p.IsRead == false && DbFunctions.TruncateTime(p.StartDateTime) <= CurrentDate && DbFunctions.TruncateTime(p.EndDateTime) >= CurrentDate && p.AuditStatus == 3).ToList(); List <EveryDaySignInDate> tmpEveryDay = db.EveryDaySignInDates.Where(p => p.Date == CurrentDate).ToList(); // 遍历请假申请表,从未读的请假申请中获取员工号,请假开始时间,请假结束时间,请假日期; foreach (VacateApplies va in VacateApplies) { //获取请假表中StartDateTime ,EndDateTime ,和CurrentDate做比较 //获取日考勤报表中的当前时间; EveryDaySignInDate everydaysignindate = null; try { everydaysignindate = tmpEveryDay.Where(p => p.Date == CurrentDate && p.StaffNumber == va.StaffNumber).Single(); } catch (Exception e) { Tools.WriteErrorLog(e); return; } List <SignInCardStatus> signincardstatus = db.SignInCardStatus.Where(p1 => p1.StaffNumber == va.StaffNumber && p1.WorkDate == CurrentDate).ToList(); foreach (SignInCardStatus sica in signincardstatus) { //遍历打卡表,获得NeedWorksTime,如果NeedWorksTime在请假表之间,便直接在打卡表中删除此点。 if (sica.NeedWorkTime >= va.StartDateTime.TimeOfDay && sica.NeedWorkTime <= va.EndDateTime.TimeOfDay) { db.SignInCardStatus.Remove(sica); db.SaveChanges(); } //向日考勤表报中写入数据,具体属性是添加请假类型和请假时数。 string BillType = va.BillType; string BillTypeName = null; try { BillTypeName = db.BillProperties.Where(p => p.Type == BillType).Single().TypeName; } catch (Exception e) { Tools.WriteErrorLog(e); return; } // 向日考勤报表中添加请假类型 everydaysignindate.VacateType = BillTypeName; //向日考勤报表中添加请假时数 //根据排班表和请假表中一样员工号获得员工的排班ID。根据排班ID获得Works中的TotalWorkHours // 获取请假表中请假时数 ,与Works表中规定的工作时数做判断,判断是否大于规定工作时间,如果大于则表示请假一整天,将请假时间赋值为规定工作时间 float Hours = CalcuteVacateHours(va.StaffNumber, va.StartDateTime, va.EndDateTime, CurrentDate); everydaysignindate.VacateHours = Hours; } // 保存所做编辑 db.Entry(everydaysignindate).State = EntityState.Modified; db.SaveChanges(); //设置请假表中的IsRead属性。如果请假结束时间 < CurrentDate,那么将IsRead属性设为ture if (va.EndDateTime <= CurrentDate) { va.IsRead = true; } db.Entry(va).State = EntityState.Modified; db.SaveChanges(); } }
/// <summary> /// 检查加班申请表,是否有员工在某一天需要加班,有的话进行处理 /// </summary> /// <param name="CurrentDate">传递的参数是日期!不带时间的日期</param> public void CheckOvertimeApplies(DateTime CurrentDate) { //获取今天的假日类型 List <HolidayTables> holidays = db.HolidayTables.Where(p => p.Date == CurrentDate).ToList(); string HolidayType = "正常加班"; if (holidays.Count != 0) { HolidayType = holidays[0].Type; } List <OvertimeApplies> list = db.OvertimeApplies.Where(p => p.StartDateTime.Date == CurrentDate).ToList(); List <EveryDaySignInDate> tmpEveryDay = db.EveryDaySignInDates.Where(p => p.Date == CurrentDate).ToList(); foreach (OvertimeApplies tmp in list) { EveryDaySignInDate EveryDay = null; try { //获取到日考勤报表的对象 EveryDay = tmpEveryDay.Where(p => p.StaffNumber.Equals(tmp.StaffNumber)).Single(); } catch (Exception e) { Tools.WriteErrorLog(e); return; } if (OvertimeNeedSignIn) { //插入打卡时间到打卡表 db.SignInCardStatus.Add(new SignInCardStatus() { StaffNumber = tmp.StaffNumber, WorkDate = CurrentDate, NeedWorkTime = tmp.StartDateTime.TimeOfDay, NeedStartTime = Tools.MinusMinutes(tmp.StartDateTime.TimeOfDay, OvertimeAheadMinutes), NeedEndTime = Tools.AddMinutes(tmp.StartDateTime.TimeOfDay, OvertimeBackMinutes), Type = "上班", ComeLateMinutes = 0, LeaveEarlyMinutes = 0, SignInType = 1, }); db.SignInCardStatus.Add(new SignInCardStatus() { StaffNumber = tmp.StaffNumber, WorkDate = CurrentDate, NeedWorkTime = tmp.EndDateTime.TimeOfDay, NeedStartTime = Tools.MinusMinutes(tmp.EndDateTime.TimeOfDay, OvertimeAheadMinutes), NeedEndTime = Tools.AddMinutes(tmp.EndDateTime.TimeOfDay, OvertimeBackMinutes), Type = "下班", ComeLateMinutes = 0, LeaveEarlyMinutes = 0, SignInType = 1, }); } //申请加班总时数 //更新这个员工的日考勤报表的信息 EveryDay.WorkOvertimeHours = tmp.Hours; //OvertimeWorkHours; EveryDay.OvertimeType = HolidayType; db.Entry(EveryDay).State = EntityState.Modified; //标记这个加班申请已经处理过 tmp.IsRead = true; db.Entry(tmp).State = EntityState.Modified; db.SaveChanges(); } }