Пример #1
0
        public ActionResult DeleteConfirmed(int id)
        {
            WorkManages workManages = db.WorkManages.Find(id);

            db.WorkManages.Remove(workManages);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Пример #2
0
        /// <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();       //保存更改
            }
        }
Пример #3
0
 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));
 }
Пример #4
0
        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));
        }
Пример #5
0
        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));
        }
Пример #6
0
        /// <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();
        }
Пример #7
0
        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));
        }
Пример #8
0
        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));
        }