///<summary>
        ///</summary>
        ///<param name="outInTimeCondition"></param>
        ///<returns></returns>
        public static string GetOutInTimeConditionEnumName(OutInTimeConditionEnum outInTimeCondition)
        {
            switch (outInTimeCondition)
            {
            case OutInTimeConditionEnum.All:
                return("");

            case OutInTimeConditionEnum.InAndOutTimeIsNull:
                return("进入时间为空并且离开时间为空");

            case OutInTimeConditionEnum.InOrOutTimeIsNull:
                return("进入时间为空或者离开时间为空");

            case OutInTimeConditionEnum.InTimeIsNull:
                return("进入时间为空");

            case OutInTimeConditionEnum.OutTimeIsNull:
                return("离开时间为空");

            case OutInTimeConditionEnum.InOrOutTimeOnlyOneIsNull:
                return("进入时间为空或者离开时间只有一个为空");

            default:
                return("");
            }
        }
Exemple #2
0
 public bool Vaildate()
 {
     _ItsView.ErrorMessage = string.Empty;
     if (!int.TryParse(_ItsView.DepartmentID, out _DepartmentID))
     {
         _ItsView.ErrorMessage = "部门ID必须为整数!";
         return(false);
     }
     if (!DateTime.TryParse(_ItsView.SearchFrom, out _SearchFrom))
     {
         _ItsView.ErrorMessage = "查询时间格式不正确!";
         return(false);
     }
     if (_SearchFrom.Equals(Convert.ToDateTime("0001-1-1 0:00:00")))
     {
         _SearchFrom = Convert.ToDateTime("1900-1-1 0:00:00");
     }
     if (!DateTime.TryParse(_ItsView.SearchTo, out _SearchTo))
     {
         _ItsView.ErrorMessage = "查询时间格式不正确!";
         return(false);
     }
     if (_SearchTo.Equals(Convert.ToDateTime("0001-1-1 0:00:00")))
     {
         _SearchTo = Convert.ToDateTime("2900-12-31 0:00:00");
     }
     _OutInTimeCondition = GetOutInTimeConditionEnum(_ItsView.OutInTimeCondition);
     return(true);
 }
        /// <summary>
        ///
        /// </summary>
        public List <Employee> GetAttendanceOutInRecordByCondition(string employeeName, int?gradesId, int departmentID,
                                                                   DateTime from, DateTime to, OutInTimeConditionEnum outInTimeCondition)
        {
            List <Employee> retEmployeeList = new List <Employee>();

            //List<Account> accountList = _IAccountBll.GetAccountByBaseCondition(employeeName, departmentID, -1, gradesId, true, null);
            //if (departmentID == -1)
            //{
            //    accountList = Tools.RemoteUnAuthAccount(accountList, AuthType.HRMIS, _LoginUser, HrmisPowers.A503);
            //}

            //_GetEmployee = new GetEmployee();
            //List<Employee> EmployeeList = _GetEmployee.GetEmployeeAttendenceInfoByAccountList(accountList, EmployeeTypeEnum.All, -1);
            int?powerID = null;

            if (departmentID == -1)
            {
                powerID = HrmisPowers.A503;
            }

            var EmployeeList = EmployeeLogic.GetEmployeeBasicInfoByBasicConditionRetModel(employeeName,
                                                                                          EmployeeTypeEnum.All, -1, gradesId, departmentID, null, true, powerID, _LoginUser.Id, -1,
                                                                                          new List <int>()
            {
                (int)EmployeeTypeEnum.BorrowedEmployee
            }, true);

            for (int i = 0; i < EmployeeList.Count; i++)
            {
                if (EmployeeList[i].EmployeeType == EmployeeTypeEnum.BorrowedEmployee)
                {
                    continue;
                }
                ////获取排班信息
                //EmployeeList[i].EmployeeAttendance.PlanDutyDetailList =
                //    new PlanDutyDal().GetPlanDutyDetailByAccount(
                //    EmployeeList[i].Account.Id, from, to);
                ////如果员工没有排班信息
                //if (EmployeeList[i].EmployeeAttendance.PlanDutyDetailList == null
                //    || EmployeeList[i].EmployeeAttendance.PlanDutyDetailList.Count == 0)
                //{
                //    continue;
                //}

                DateTime employeeFromDate = DateTime.Compare(EmployeeList[i].EmployeeDetails.Work.ComeDate, from) > 0
                                                ? EmployeeList[i].EmployeeDetails.Work.ComeDate
                                                : from;
                DateTime employeeToDate;
                if (EmployeeList[i].EmployeeType == EmployeeTypeEnum.DimissionEmployee &&
                    EmployeeList[i].EmployeeDetails.Work.DimissionInfo != null)
                {
                    employeeToDate =
                        DateTime.Compare(EmployeeList[i].EmployeeDetails.Work.DimissionInfo.DimissionDate, to) < 0
                            ? EmployeeList[i].EmployeeDetails.Work.DimissionInfo.DimissionDate
                            : to;
                }
                else
                {
                    employeeToDate = to;
                }
                if (DateTime.Compare(employeeFromDate, employeeToDate) > 0)
                {
                    continue;
                }
                EmployeeList[i].EmployeeAttendance.FromDate = employeeFromDate;
                EmployeeList[i].EmployeeAttendance.ToDate   = employeeToDate;
                EmployeeList[i].EmployeeAttendance.AttendanceInAndOutRecordList =
                    _dalAttendanceInAndOutRecord.GetAttendanceInAndOutRecordByCondition(EmployeeList[i].Account.Id, "",
                                                                                        from, to, InOutStatusEnum.All,
                                                                                        OutInRecordOperateStatusEnum.All,
                                                                                        Convert.ToDateTime("1900-1-1"),
                                                                                        Convert.ToDateTime("2900-12-31"));

                //日详细
                EmployeeList[i].EmployeeAttendance.DayAttendanceList = new List <DayAttendance>();
                EmployeeList[i].EmployeeAttendance.DayAttendanceList.AddRange(new GetBadAttendance(_LoginUser).GetCalendarByEmployee(EmployeeList[i].Account.Id,
                                                                                                                                     EmployeeList[i].EmployeeAttendance.FromDate,
                                                                                                                                     EmployeeList[i].EmployeeAttendance.ToDate, AttendanceTypeEmnu.All));

                //请假
                EmployeeList[i].EmployeeAttendance.DayAttendanceList.AddRange(
                    new GetLeaveRequest().GetCalendarByEmployee(EmployeeList[i].Account.Id, from, to));

                //加班
                EmployeeList[i].EmployeeAttendance.DayAttendanceList.AddRange(
                    new GetOverWork().GetCalendarByEmployee(EmployeeList[i].Account.Id, from, to));

                //外出
                EmployeeList[i].EmployeeAttendance.DayAttendanceList.AddRange(
                    new GetOutApplication().GetCalendarByEmployee(EmployeeList[i].Account.Id, from, to));

                //统计考勤
                EmployeeList[i].EmployeeAttendance.InAndOutStatistics(employeeFromDate);
                if (EmployeeList[i].EmployeeAttendance.IsOutInTimeCondition(outInTimeCondition, true))
                {
                    retEmployeeList.Add(EmployeeList[i]);
                }
            }
            return(retEmployeeList);
        }
        /// <summary>
        /// 系统自动发信
        /// </summary>
        private void SystemSendEmailByCondition(OutInTimeConditionEnum outInTimeCondition)
        {
            sendMail = new AttendanceSendEmail();
            StringBuilder emailContentBuilder = new StringBuilder();

            for (int i = 0; i < AllEmployeeList.Count; i++)
            {
                //找前一天数据
                DateTime tempDate = _SearchTo.AddDays(-1);
                while (DateTime.Compare(Convert.ToDateTime(_SearchFrom.ToShortDateString()),
                                        Convert.ToDateTime(tempDate.ToShortDateString())) <= 0)
                {
                    AllEmployeeList[i].EmployeeAttendance.AttendanceInAndOutRecordList = _DalRecord.
                                                                                         GetAttendanceInAndOutRecordByCondition
                                                                                             (AllEmployeeList[i].Account.Id, "", tempDate, tempDate.AddDays(1), InOutStatusEnum.All,
                                                                                             OutInRecordOperateStatusEnum.All, Convert.ToDateTime("1900-1-1"),
                                                                                             Convert.ToDateTime("2900-12-31"));

                    AllEmployeeList[i].EmployeeAttendance.InAndOutStatistics(tempDate);

                    bool           isOnDuty          = true;
                    PlanDutyDetail dayPlanDutyDetail =
                        PlanDutyDetail.GetPlanDutyDetailByDate(
                            AllEmployeeList[i].EmployeeAttendance.PlanDutyDetailList, tempDate);
                    if (dayPlanDutyDetail == null)
                    {
                        if (tempDate.DayOfWeek == DayOfWeek.Saturday ||
                            tempDate.DayOfWeek == DayOfWeek.Sunday)
                        {
                            isOnDuty = false;
                        }
                    }
                    else if (dayPlanDutyDetail.PlanDutyClass.DutyClassID == -1)
                    {
                        isOnDuty = false;
                    }

                    string absentString = "";

                    //如果这一天是休息日且进出单打卡 或者 非休息日且满足发信条件 或者 不正常数据
                    if ((!isOnDuty && AllEmployeeList[i].EmployeeAttendance.IsOutInTimeCondition(OutInTimeConditionEnum.InOrOutTimeOnlyOneIsNull)) ||
                        (isOnDuty && AllEmployeeList[i].EmployeeAttendance.IsOutInTimeCondition(outInTimeCondition)) ||
                        !AllEmployeeList[i].EmployeeAttendance.StatisticIsNormal(tempDate, out absentString))
                    {
                        string inTime  = AllEmployeeList[i].EmployeeAttendance.AttendanceInAndOutStatistics.InTime.ToString();
                        string outTime = AllEmployeeList[i].EmployeeAttendance.AttendanceInAndOutStatistics.OutTime.ToString();
                        string status  = AllEmployeeList[i].EmployeeAttendance.AttendanceInAndOutStatistics.LeaveRequestAndOut;

                        SendEmailForEmployees(AllEmployeeList[i], inTime, outTime, status, tempDate);
                        SendMessageForEmployees(AllEmployeeList[i], tempDate);

                        emailContentBuilder.Append(AllEmployeeList[i].Account.Name);
                        emailContentBuilder.Append(tempDate.ToShortDateString());
                        emailContentBuilder.Append(" 进入时间:");
                        emailContentBuilder.Append(inTime == "2999-12-31 0:00:00" ? "无打卡记录" : inTime);
                        emailContentBuilder.Append(" 离开时间:");
                        emailContentBuilder.Append(outTime == "1900-1-1 0:00:00" ? "无打卡记录" : outTime);
                        emailContentBuilder.Append(" 请假或外出情况:");
                        emailContentBuilder.Append(string.IsNullOrEmpty(status) ? "无" : status);
                        if (absentString != "")
                        {
                            emailContentBuilder.Append(absentString);
                        }
                        emailContentBuilder.Append(Environment.NewLine);
                    }
                    tempDate = tempDate.AddDays(-1);
                }
            }
            if (emailContentBuilder.Length > 0)
            {
                emailContentBuilder.Append("请核对打卡信息和外出请假情况,如果信息有误,请登录系统查看!");
                string subject = _SearchFrom + "--" + _SearchTo + "期间的考勤信息";
                sendMail.AttendanceSendEmailToHR(subject, emailContentBuilder);
            }
        }
 public List <Employee> GetAttendanceOutInRecordByCondition(string employeeName, int?gradesId,
                                                            int departmentID, DateTime from, DateTime to, OutInTimeConditionEnum outInTimeCondition,
                                                            Account loginUser)
 {
     return(new AttendanceOutInRecord(loginUser).GetAttendanceOutInRecordByCondition(employeeName, gradesId, departmentID, from, to,
                                                                                     outInTimeCondition));
 }