public ActionResult DeleteConfirmed(int id) { WorkManages workManages = db.WorkManages.Find(id); db.WorkManages.Remove(workManages); 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,StartDate,EndDate,WorksId,AuditStatus,StaffNumber,Remark")] WorkManages workManages) { if (ModelState.IsValid) { db.Entry(workManages).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } return(View(workManages)); }
public ActionResult Create([Bind(Include = "Id,StartDate,EndDate,WorksId,AuditStatus,StaffNumber,Remark")] WorkManages workManages) { if (ModelState.IsValid) { db.WorkManages.Add(workManages); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(workManages)); }
public ActionResult Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } WorkManages workManages = db.WorkManages.Find(id); if (workManages == null) { return(HttpNotFound()); } return(View(workManages)); }
/// <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(); }
public ActionResult PersonalCreate([Bind(Include = "Id,StartDate,EndDate,WorksId,AuditStatus,StaffNumber,Remark")] WorkManages workManages) { if (ModelState.IsValid) { string staffNumber = workManages.StaffNumber.Split(new char[] { '-' })[0]; /** * 对于每一个员工,他的排班在一入职的时候,一定会分配一个默认排班的,所以在进行部门排班或者个人排版的时候, * 这个员工一定已经有一条记录在WorkManages表当中,所以当进行部门排班或者个人排班的时候,只需要对这个员工的 * 排班信息进行更新就行了 * */ string tmpDepartmentId = (from x in db.Staffs where x.StaffNumber.Equals(staffNumber) select x.Department).Single(); List <WorkManages> tmpWorkManages = (from x in db.WorkManages where x.StaffNumber.Equals(staffNumber) && x.Date <= workManages.EndDate && x.Date >= workManages.StartDate select x).ToList(); //删除原来的在相同时间段内的排班情况 db.WorkManages.RemoveRange(tmpWorkManages); //插入新的排班情况 int days = workManages.EndDate.DayOfYear - workManages.StartDate.DayOfYear; for (int i = 0; i <= days; i++) { db.WorkManages.Add(new WorkManages() { WorksId = workManages.WorksId, AuditStatus = 1, Flag = false, //标示是针对个人的排班 StaffNumber = staffNumber, DepartmentId = tmpDepartmentId, Remark = workManages.Remark, Date = workManages.StartDate.AddDays(i), }); } db.SaveChanges(); return(RedirectToAction("PersonalIndex")); } ViewBag.DepartmentsList = Generate.GetDepartments(base.ConnectionString); ViewBag.WorksList = Generate.GetWorks(base.ConnectionString); return(View(workManages)); }
public ActionResult DepartmentCreate([Bind(Include = "Id,StartDate,EndDate,WorksId,AuditStatus,DepartmentId,Remark")] WorkManages workManages) { if (ModelState.IsValid) { List <string> StaffNumbers = (from x in db.Staffs where x.Department.Equals(workManages.DepartmentId) select x.StaffNumber).ToList(); WorkManages wm = db.WorkManages.Find(13); foreach (string tmpStaffNumber in StaffNumbers) { List <WorkManages> tmpWorkManages = (from x in db.WorkManages where x.StaffNumber.Equals(tmpStaffNumber) && x.Date <= workManages.EndDate && x.Date >= workManages.StartDate select x).ToList(); //删除原来的在相同时间段内的排班情况 db.WorkManages.RemoveRange(tmpWorkManages); //插入新的排班情况 int days = workManages.EndDate.DayOfYear - workManages.StartDate.DayOfYear; for (int i = 0; i <= days; i++) { db.WorkManages.Add(new WorkManages() { WorksId = workManages.WorksId, AuditStatus = 1, Flag = true, //标示是针对部门的排班 StaffNumber = tmpStaffNumber, DepartmentId = workManages.DepartmentId, Remark = workManages.Remark, Date = workManages.StartDate.AddDays(i), }); } db.SaveChanges(); } return(RedirectToAction("DepartmentIndex")); } ViewBag.DepartmentsList = Generate.GetDepartments(base.ConnectionString); ViewBag.WorksList = Generate.GetWorks(base.ConnectionString); return(View(workManages)); }