///<summary>
        ///</summary>
        public void GetHourDesType(OutApplicationItem item, int accountid, out decimal putong, out decimal shuangxiu,
                                   out decimal jieri)
        {
            jieri     = 0m;
            putong    = 0m;
            shuangxiu = 0m;
            DateTime from = item.FromDate;
            DateTime to   = item.ToDate;

            _CalculateDays      = new CalculateDays(BllInstance.SpecialDateBllInstance.GetAllSpecialDate(null));
            _PlanDutyDetailList = _PlanDutyDal.GetPlanDutyDetailByAccount(accountid, from, to);

            CalculateOutCityHour calculateOutCityHour = new CalculateOutCityHour(from, to, accountid);

            calculateOutCityHour.Excute();
            foreach (DayAttendance attendance in calculateOutCityHour.DayAttendanceList)
            {
                PlanDutyDetail planDutyDetail =
                    PlanDutyDetail.GetPlanDutyDetailByDate(_PlanDutyDetailList, attendance.Date);
                if (_CalculateDays.IsNationalHoliday(attendance.Date))
                {
                    jieri += attendance.Hours;
                }

                else if (planDutyDetail.PlanDutyClass.IsWeek)
                {
                    shuangxiu += attendance.Hours;
                }
                else
                {
                    putong += attendance.Hours;
                }
            }
        }
Exemplo n.º 2
0
        protected override void ExcuteSelf()
        {
            DateTime endMonthDate = new HrmisUtility().EndMonthByYearMonth(_CurrDate);

            if (DateTime.Compare(_CurrDate.Date, endMonthDate.Date) == 0)
            {
                string          employeeNameFailEmail = "";
                List <Employee> employees             = _GetEmployee.GetAllEmployeeBasicInfo();
                foreach (Employee employee in employees)
                {
                    if (employee.EmployeeType == EmployeeTypeEnum.BorrowedEmployee)
                    {
                        continue;
                    }
                    if (employee.EmployeeType == EmployeeTypeEnum.DimissionEmployee)
                    {
                        employee.EmployeeDetails =
                            _GetEmployee.GetEmployeeByAccountID(employee.Account.Id).EmployeeDetails;
                        if (
                            DateTime.Compare(employee.EmployeeDetails.Work.DimissionInfo.DimissionDate,
                                             _CurrDate.AddDays(1 - _CurrDate.Date.Day)) < 0)
                        {
                            continue;
                        }
                    }
                    //没有排版表的人不需要提醒
                    List <PlanDutyDetail> planDutyDetailList =
                        _IPlanDutyDal.GetPlanDutyDetailByAccount(employee.Account.Id, _CurrDate.AddDays(1).AddMonths(-1),
                                                                 _CurrDate);
                    if (planDutyDetailList.Count == 0)
                    {
                        continue;
                    }
                    try
                    {
                        SendEmailToEmployee(employee);
                    }
                    catch
                    {
                        if (string.IsNullOrEmpty(employeeNameFailEmail))
                        {
                            employeeNameFailEmail = employee.Account.Name;
                        }
                        else
                        {
                            employeeNameFailEmail += "," + employee.Account.Name;
                        }
                    }
                    employee.EmployeeDetails = null;
                }
                if (!string.IsNullOrEmpty(employeeNameFailEmail))
                {
                    throw new Exception("发送邮件失败。以下" + employeeNameFailEmail.Split(',').Length + "位员工没有获得系统提醒:" +
                                        employeeNameFailEmail);
                }
            }
        }
Exemplo n.º 3
0
        private void Init()
        {
            LeaveRequestType leaveRequestType = _LeaveRequestTypeDal.GetLeaveRequestTypeByPkid(_LeaveRequestTypeID);

            //_LeaveRequests=_leaveRequestDal.GetLeaveRequestByCondition(_AccountID, _From.Date, _To.Date.AddHours(24), RequestStatus.All);
            _LeaveRequestTypeName = leaveRequestType.Name;
            _LeastHour            = leaveRequestType.LeastHour;
            _IncludeLegalHoliday  = leaveRequestType.IncludeLegalHoliday == LegalHoliday.Include;
            _IncludeRestDay       = leaveRequestType.IncludeRestDay == RestDay.Include;
            _PlanDutyDetailList   = _PlanDutyDal.GetPlanDutyDetailByAccount(_AccountID, _From, _To);
            _CalculateDays        = new CalculateDays(_SpecialDateBll.GetAllSpecialDate(null));
        }
Exemplo n.º 4
0
        /// <summary>
        /// 离职天数 未入职天数
        /// </summary>
        /// <param name="accountID"></param>
        /// <param name="startDt"></param>
        /// <param name="endDt"></param>
        public void CalcNotOnDutyDays(int accountID, DateTime startDt, DateTime endDt)
        {
            decimal  _weiRuZhiDay = 0;
            decimal  _liZhiDay    = 0;
            Employee employee     = _GetEmployee.GetEmployeeBasicInfoByAccountID(accountID);

            if (employee != null && employee.EmployeeDetails != null && employee.EmployeeDetails.Work != null)
            {
                var planduty = _PlanDutyDal.GetPlanDutyDetailByAccount(accountID, startDt, endDt);
                List <SpecialDate> specialDateList = _ISpecialDateBll.GetSpecialDateByFromAndToDate(startDt, endDt);
                CalculateDays      calculateDays   = new CalculateDays(specialDateList);
                DateTime           comeDate        = employee.EmployeeDetails.Work.ComeDate.AddDays(-1);
                if (comeDate < startDt)
                {
                    _weiRuZhiDay = 0;
                }
                else
                {
                    calculateDays.StartDate = startDt;
                    calculateDays.EndDate   = comeDate <= endDt ? comeDate : endDt;
                    _weiRuZhiDay            = calculateDays.CountDaySpecial();
                }

                if (employee.EmployeeDetails.Work.DimissionInfo != null)
                {
                    DateTime dimissionDate = employee.EmployeeDetails.Work.DimissionInfo.DimissionDate.AddDays(1);
                    if (dimissionDate > endDt)
                    {
                        _liZhiDay = 0;
                    }
                    else
                    {
                        var startDate = dimissionDate >= startDt ? dimissionDate : startDt;
                        var endDate   = endDt;
                        for (DateTime dt = startDate.Date; dt <= endDate.Date;)
                        {
                            var pd = planduty.Where(x => x.Date.Date == dt.Date).FirstOrDefault();
                            if (!pd.PlanDutyClass.IsWeek)
                            {
                                _liZhiDay++;
                            }
                            dt = dt.AddDays(1);
                        }
                    }
                }
            }
            _BindItemValueCollection.SetBindItemValue(BindItemEnum.NotEntryDays, _weiRuZhiDay);
            _BindItemValueCollection.SetBindItemValue(BindItemEnum.DimissionDays, _liZhiDay);
        }
Exemplo n.º 5
0
 /// <summary>
 ///
 /// </summary>
 public void InitPlanDuty(DateTime from, DateTime to, int accountid)
 {
     _PlanDutyDetailList =
         _PlanDutyDal.GetPlanDutyDetailByAccount(accountid, from.AddMonths(-1), to.AddMonths(1));
     foreach (PlanDutyDetail detail in _PlanDutyDetailList)
     {
         //╣╠ц╩спее╟Ю
         if (detail.PlanDutyClass.DutyClassID > 0)
         {
             _MorningStart   = detail.PlanDutyClass.FirstStartFromTime;
             _MorningEnd     = detail.PlanDutyClass.FirstEndTime;
             _AfternoonStart = detail.PlanDutyClass.SecondStartTime;
             _AfternoonEnd   =
                 detail.PlanDutyClass.FirstStartToTime.AddHours((_AfternoonStart - _MorningEnd).TotalHours +
                                                                _OneDayMaxHour);
             return;
         }
     }
 }
Exemplo n.º 6
0
 private void Init()
 {
     _CalculateDays      = new CalculateDays(BllInstance.SpecialDateBllInstance.GetAllSpecialDate(null));
     _PlanDutyDetailList = _PlanDutyDal.GetPlanDutyDetailByAccount(_AccountID, _From, _To);
 }
        /// <summary>
        /// 获得员工的考勤信息
        /// </summary>
        /// <param name="employee"></param>
        /// <param name="FromDate"></param>
        /// <param name="ToDate"></param>
        private static bool GetEmployeeAttendanceInfo(Employee employee, DateTime FromDate, DateTime ToDate)
        {
            if (employee.EmployeeType == EmployeeTypeEnum.BorrowedEmployee)
            {
                return(false);
            }
            //根据入职离职时间确定考勤的有效时间
            DateTime employeeFromDate = DateTime.Compare(employee.EmployeeDetails.Work.ComeDate, FromDate) > 0
                                            ? employee.EmployeeDetails.Work.ComeDate
                                            : FromDate;
            DateTime employeeToDate;

            if (employee.EmployeeType == EmployeeTypeEnum.DimissionEmployee && employee.EmployeeDetails.Work.DimissionInfo != null)
            {
                employeeToDate =
                    DateTime.Compare(employee.EmployeeDetails.Work.DimissionInfo.DimissionDate, ToDate) < 0
                        ? employee.EmployeeDetails.Work.DimissionInfo.DimissionDate
                        : ToDate;
            }
            else
            {
                employeeToDate = ToDate;
            }
            employeeToDate = employeeToDate.AddDays(1).AddSeconds(-1);
            if (DateTime.Compare(employeeFromDate, employeeToDate) > 0)
            {
                return(false);
            }
            employee.EmployeeAttendance = new EmployeeAttendance(employeeFromDate, employeeToDate);
            //打卡信息
            employee.EmployeeAttendance.AttendanceInAndOutRecordList =
                _dalAttendanceInAndOutRecord.GetAttendanceInAndOutRecordByCondition(employee.Account.Id, "",
                                                                                    employeeFromDate,
                                                                                    employeeToDate,
                                                                                    InOutStatusEnum.All,
                                                                                    OutInRecordOperateStatusEnum.All,
                                                                                    Convert.ToDateTime("1900-1-1"),
                                                                                    Convert.ToDateTime("2900-12-31"));
            //考勤规则
            employee.EmployeeAttendance.PlanDutyDetailList =
                _IPlanDutyDal.GetPlanDutyDetailByAccount(employee.Account.Id, employeeFromDate, employeeToDate);
            //迟到早退旷工详情
            employee.EmployeeAttendance.DayAttendanceList.AddRange(
                _GetBadAttendance.GetCalendarByEmployee(employee.Account.Id,
                                                        employee.EmployeeAttendance.FromDate,
                                                        employee.EmployeeAttendance.ToDate, AttendanceTypeEmnu.All));
            //请假详情
            employee.EmployeeAttendance.DayAttendanceList.AddRange(
                _GetLeaveRequest.GetCalendarByEmployee(employee.Account.Id,
                                                       employee.EmployeeAttendance.FromDate,
                                                       employee.EmployeeAttendance.ToDate));
            //加班外出申请
            employee.EmployeeAttendance.DayAttendanceList.AddRange(
                _GetOutApplication.GetCalendarByEmployee(employee.Account.Id,
                                                         employee.EmployeeAttendance.FromDate,
                                                         employee.EmployeeAttendance.ToDate));
            employee.EmployeeAttendance.DayAttendanceList.AddRange(
                _GetOverWork.GetCalendarByEmployee(employee.Account.Id,
                                                   employee.EmployeeAttendance.FromDate,
                                                   employee.EmployeeAttendance.ToDate));
            return(true);
        }
Exemplo n.º 8
0
 /// <summary>
 ///
 /// </summary>
 public decimal Excute()
 {
     _PlanDutyDetailList = _PlanDutyDal.GetPlanDutyDetailByAccount(_AccountID, _From, _To);
     return(Calculate(_From, _To));
 }
Exemplo n.º 9
0
 /// <summary>
 /// 用于自动计算考勤时间
 /// </summary>
 public List <PlanDutyDetail> GetPlanDutyDetailByAccount(int AccountID, DateTime dateStart, DateTime dateEnd)
 {
     return(_DalRull.GetPlanDutyDetailByAccount(AccountID, dateStart, dateEnd));
 }
Exemplo n.º 10
0
        /// <summary>
        /// 通过条件查找员工的请假,加班,外出情况,便于人事后台查看流程流转状态
        /// </summary>
        public List <Request> GetRequestRecordByCondition(string employeeName, int departmentID, int?gradeType,
                                                          DateTime from, DateTime to, ApplicationTypeEnum applicationType,
                                                          RequestStatus applicationStatus, Account loginUser)
        {
            List <Request> applicationList = new List <Request>();

            var list = EmployeeLogic.GetEmployeeBasicInfoByBasicCondition(employeeName, EmployeeTypeEnum.All, -1,
                                                                          gradeType, departmentID, true,
                                                                          HrmisPowers.A509, loginUser.Id, -1,
                                                                          new List <int>
            {
                (int)EmployeeTypeEnum.BorrowedEmployee
            });

            List <Employee> employeeList = new List <Employee>();

            foreach (var employeeEntity in list)
            {
                employeeList.Add(EmployeeEntity.Convert(employeeEntity));
            }
            //  new GetEmployee().GetEmployeeBasicInfoByBasicCondition(employeeName, EmployeeTypeEnum.All, -1, departmentID, true, -1, gradeType);
            //if (departmentID==-1)//如果查全部员工需去掉没有查询权限的员工
            //{
            //    EmployeeList = HrmisUtility.RemoteUnAuthEmployee(EmployeeList, AuthType.HRMIS, loginUser, HrmisPowers.A509);
            //}
            for (int i = 0; i < employeeList.Count; i++)
            {
                //if (EmployeeList[i] == null || EmployeeList[i].EmployeeType == EmployeeTypeEnum.BorrowedEmployee)
                //{
                //    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 = new EmployeeAttendance(employeeFromDate, employeeToDate);
                employeeList[i].EmployeeAttendance.PlanDutyDetailList = _DalRull.GetPlanDutyDetailByAccount(employeeList[i].Account.Id, employeeFromDate, employeeToDate);
                //没有考勤规则的人不会这里出现
                if (employeeList[i].EmployeeAttendance.PlanDutyDetailList == null ||
                    employeeList[i].EmployeeAttendance.PlanDutyDetailList.Count == 0)
                {
                    continue;
                }
                List <Request> applicationListTemp = new List <Request>();
                switch (applicationType)
                {
                case ApplicationTypeEnum.All:
                    applicationListTemp.AddRange(
                        GetRequestFromLeaveRequest(employeeList[i].Account.Id,
                                                   employeeList[i].EmployeeAttendance.FromDate, employeeList[i].EmployeeAttendance.ToDate,
                                                   applicationStatus));
                    applicationListTemp.AddRange(
                        GetRequestFromOutApplication(employeeList[i].Account.Id,
                                                     employeeList[i].EmployeeAttendance.FromDate, employeeList[i].EmployeeAttendance.ToDate,
                                                     applicationStatus, OutType.All));
                    applicationListTemp.AddRange(
                        GetRequestFromOverWork(employeeList[i].Account.Id,
                                               employeeList[i].EmployeeAttendance.FromDate, employeeList[i].EmployeeAttendance.ToDate,
                                               applicationStatus));
                    break;

                case ApplicationTypeEnum.LeaveRequest:
                    applicationListTemp.AddRange(
                        GetRequestFromLeaveRequest(employeeList[i].Account.Id,
                                                   employeeList[i].EmployeeAttendance.FromDate, employeeList[i].EmployeeAttendance.ToDate,
                                                   applicationStatus));
                    break;

                case ApplicationTypeEnum.InCityOut:
                    applicationListTemp.AddRange(
                        GetRequestFromOutApplication(employeeList[i].Account.Id,
                                                     employeeList[i].EmployeeAttendance.FromDate, employeeList[i].EmployeeAttendance.ToDate,
                                                     applicationStatus, OutType.InCity));
                    break;

                case ApplicationTypeEnum.OutCityOut:
                    applicationListTemp.AddRange(
                        GetRequestFromOutApplication(employeeList[i].Account.Id,
                                                     employeeList[i].EmployeeAttendance.FromDate, employeeList[i].EmployeeAttendance.ToDate,
                                                     applicationStatus, OutType.OutCity));
                    break;

                case ApplicationTypeEnum.TrainOut:
                    applicationListTemp.AddRange(
                        GetRequestFromOutApplication(employeeList[i].Account.Id,
                                                     employeeList[i].EmployeeAttendance.FromDate, employeeList[i].EmployeeAttendance.ToDate,
                                                     applicationStatus, OutType.Train));
                    break;

                case ApplicationTypeEnum.OverTime:
                    applicationListTemp.AddRange(
                        GetRequestFromOverWork(employeeList[i].Account.Id,
                                               employeeList[i].EmployeeAttendance.FromDate, employeeList[i].EmployeeAttendance.ToDate,
                                               applicationStatus));
                    break;

                default:
                    break;
                }
                foreach (Request request in applicationListTemp)
                {
                    request.Account.Name = employeeList[i].Account.Name;
                }
                applicationList.AddRange(applicationListTemp);
            }
            return(applicationList);
        }