public ActionResult DeleteConfirmed(int id)
        {
            EveryDaySignInDate everyDaySignInDate = db.EveryDaySignInDates.Find(id);

            db.EveryDaySignInDates.Remove(everyDaySignInDate);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Exemplo n.º 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();       //保存更改
            }
        }
 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));
 }
Exemplo n.º 4
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();
        }
        // 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));
        }
Exemplo n.º 6
0
        //根据打卡表中的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();
            }
        }
Exemplo n.º 7
0
        /// <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();
            }
        }
Exemplo n.º 8
0
        /// <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();
            }
        }