Exemplo n.º 1
0
        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            bool flag = false;
            T_HR_SCHEDULINGTEMPLATEDETAIL entSchedulingTemplateDetail = CheckSubmitForm(ref flag);

            if (!flag)
            {
                return;
            }

            if (TemplateDetailList == null)
            {
                TemplateDetailList = new ObservableCollection <T_HR_SCHEDULINGTEMPLATEDETAIL>();
            }

            if (TemplateDetailList.Count > 0)
            {
                for (int i = 0; i < TemplateDetailList.Count; i++)
                {
                    T_HR_SCHEDULINGTEMPLATEDETAIL item = TemplateDetailList[i] as T_HR_SCHEDULINGTEMPLATEDETAIL;
                    if (item.SCHEDULINGDATE == entSchedulingTemplateDetail.SCHEDULINGDATE)
                    {
                        TemplateDetailList.Remove(item);
                    }
                }
            }

            TemplateDetailList.Add(entSchedulingTemplateDetail);

            dgTemplateDetails.ItemsSource = TemplateDetailList.OrderBy(c => c.SCHEDULINGDATE);
            this.DataContext = TemplateDetailList;

            ResetDetailForm();
        }
Exemplo n.º 2
0
        /// <summary>
        /// 轮询数据列表行,对选定行进行删除操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ButtonOK_Click(object sender, RoutedEventArgs e)
        {
            if (dgTemplateDetails.SelectedItems == null)
            {
                Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr("SELECTDATAALERT"));
                return;
            }

            if (dgTemplateDetails.SelectedItems.Count == 0)
            {
                Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr("SELECTDATAALERT"));
                return;
            }

            ObservableCollection <T_HR_SCHEDULINGTEMPLATEDETAIL> entList = new ObservableCollection <T_HR_SCHEDULINGTEMPLATEDETAIL>();
            ObservableCollection <T_HR_SCHEDULINGTEMPLATEDETAIL> entDels = new ObservableCollection <T_HR_SCHEDULINGTEMPLATEDETAIL>();

            ObservableCollection <T_HR_SCHEDULINGTEMPLATEDETAIL> entSels = new ObservableCollection <T_HR_SCHEDULINGTEMPLATEDETAIL>();

            foreach (object ovj in dgTemplateDetails.SelectedItems)
            {
                T_HR_SCHEDULINGTEMPLATEDETAIL ent = ovj as T_HR_SCHEDULINGTEMPLATEDETAIL;
                entSels.Add(ent);
            }


            entList = Utility.Clone(TemplateDetailList);
            entDels = Utility.Clone(entSels);

            for (int j = 0; j < entDels.Count; j++)
            {
                T_HR_SCHEDULINGTEMPLATEDETAIL entDel = entDels[j] as T_HR_SCHEDULINGTEMPLATEDETAIL;

                for (int i = 0; i < entList.Count; i++)
                {
                    T_HR_SCHEDULINGTEMPLATEDETAIL item = entList[i] as T_HR_SCHEDULINGTEMPLATEDETAIL;
                    if (item.SCHEDULINGDATE == entDel.SCHEDULINGDATE)
                    {
                        entList.Remove(item);
                        //i = 0;
                        break;
                    }
                    else
                    {
                        continue;
                    }
                }
            }

            TemplateDetailList.Clear();

            TemplateDetailList = entList;

            dgTemplateDetails.ItemsSource = TemplateDetailList.OrderBy(c => c.SCHEDULINGDATE);
            this.DataContext = TemplateDetailList;
        }
Exemplo n.º 3
0
        /// <summary>
        /// 效验提交的数据
        /// </summary>
        /// <param name="flag"></param>
        /// <returns></returns>
        private T_HR_SCHEDULINGTEMPLATEDETAIL CheckSubmitForm(ref bool flag)
        {
            flag = false;
            T_HR_SCHEDULINGTEMPLATEDETAIL SchedulingTemplateDetail = new T_HR_SCHEDULINGTEMPLATEDETAIL();

            SchedulingTemplateDetail.T_HR_SCHEDULINGTEMPLATEMASTER = GetMaster();
            SchedulingTemplateDetail.TEMPLATEDETAILID = System.Guid.NewGuid().ToString().ToUpper();

            int iDayNo = 0;

            flag = int.TryParse(txtSchedulingDate.Text, out iDayNo);
            if (!flag)
            {
                Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("SCHEDULINGDATE"), Utility.GetResourceStr("REQUIREDNUMERICAL", "SCHEDULINGDATE"));
                return(null);
            }
            else
            {
                SchedulingTemplateDetail.SCHEDULINGDATE = txtSchedulingDate.Text;
            }

            if (lkShiftName.DataContext == null)
            {
                flag = false;
                Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("SHIFTNAME"), Utility.GetResourceStr("REQUIRED", "SHIFTNAME"));
                return(null);
            }
            else
            {
                T_HR_SHIFTDEFINE ent = lkShiftName.DataContext as T_HR_SHIFTDEFINE;
                if (string.IsNullOrEmpty(ent.SHIFTDEFINEID))
                {
                    flag = false;
                    return(null);
                }

                SchedulingTemplateDetail.T_HR_SHIFTDEFINE = ent;
                flag = true;
            }

            if (!string.IsNullOrEmpty(txtRemark.Text))
            {
                SchedulingTemplateDetail.REMARK = txtRemark.Text;
            }

            //2010年2月11日, 11:37:35,目前暂未实现登录部分,人员相关数据为假定值
            SchedulingTemplateDetail.CREATEDATE   = DateTime.Now;
            SchedulingTemplateDetail.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;
            SchedulingTemplateDetail.UPDATEDATE   = System.DateTime.Now;
            SchedulingTemplateDetail.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;

            return(SchedulingTemplateDetail);
        }
Exemplo n.º 4
0
 private void dgTemplateDetails_LoadingRow(object sender, DataGridRowEventArgs e)
 {
     if (FormType == FormTypes.Browse)
     {
         T_HR_SCHEDULINGTEMPLATEDETAIL tmp = (T_HR_SCHEDULINGTEMPLATEDETAIL)e.Row.DataContext;
         LookUp name = dgTemplateDetails.Columns[2].GetCellContent(e.Row).FindName("lkShiftName") as LookUp;
         if (name != null)
         {
             name.IsEnabled = false;
         }
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// 效验提交的数据
        /// </summary>
        /// <param name="flag"></param>
        /// <returns></returns>
        private T_HR_SCHEDULINGTEMPLATEDETAIL CheckSubmitForm(ref bool flag)
        {
            flag = false;
            T_HR_SCHEDULINGTEMPLATEDETAIL SchedulingTemplateDetail = new T_HR_SCHEDULINGTEMPLATEDETAIL();

            SchedulingTemplateDetail.T_HR_SCHEDULINGTEMPLATEMASTER = GetMaster();
            SchedulingTemplateDetail.TEMPLATEDETAILID = System.Guid.NewGuid().ToString().ToUpper();

            int iDayNo = 0;
            flag = int.TryParse(txtSchedulingDate.Text, out iDayNo);
            if (!flag)
            {
                Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("SCHEDULINGDATE"), Utility.GetResourceStr("REQUIREDNUMERICAL", "SCHEDULINGDATE"));
                return null;
            }
            else
            {
                SchedulingTemplateDetail.SCHEDULINGDATE = txtSchedulingDate.Text;
            }

            if (lkShiftName.DataContext == null)
            {
                flag = false;
                Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("SHIFTNAME"), Utility.GetResourceStr("REQUIRED", "SHIFTNAME"));
                return null;
            }
            else
            {
                T_HR_SHIFTDEFINE ent = lkShiftName.DataContext as T_HR_SHIFTDEFINE;
                if (string.IsNullOrEmpty(ent.SHIFTDEFINEID))
                {
                    flag = false;
                    return null;
                }

                SchedulingTemplateDetail.T_HR_SHIFTDEFINE = ent;
                flag = true;
            }

            if (!string.IsNullOrEmpty(txtRemark.Text))
            {
                SchedulingTemplateDetail.REMARK = txtRemark.Text;
            }

            //2010年2月11日, 11:37:35,目前暂未实现登录部分,人员相关数据为假定值
            SchedulingTemplateDetail.CREATEDATE = DateTime.Now;
            SchedulingTemplateDetail.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;
            SchedulingTemplateDetail.UPDATEDATE = System.DateTime.Now;
            SchedulingTemplateDetail.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;

            return SchedulingTemplateDetail;
        }
Exemplo n.º 6
0
        /// <summary>
        /// 计算非全天外出确认的时长(出勤日外出确认)
        /// </summary>
        /// <param name="dWorkTimePerDay"></param>
        /// <param name="dtOTStart"></param>
        /// <param name="dtOTEnd"></param>
        /// <param name="entTemplateDetails"></param>
        /// <param name="entTemplateMaster"></param>
        /// <param name="dOverTimeHours"></param>
        private string CalculateNonWholeDayOverTimeHoursOnWorkDay(decimal dWorkTimePerDay, DateTime dtOTStart, DateTime dtOTEnd,
                                                                  IQueryable <T_HR_SCHEDULINGTEMPLATEDETAIL> entTemplateDetails, T_HR_SCHEDULINGTEMPLATEMASTER entTemplateMaster,
                                                                  ref decimal dOverTimeHours)
        {
            DateTime dtStartDate        = DateTime.Parse(dtOTStart.ToString("yyyy-MM") + "-1");
            DateTime dtCurOTDate        = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd"));
            string   strRes             = string.Empty;
            decimal  dTempOverTimeHours = 0;

            int iCircleDay = 0;

            if (entTemplateMaster.SCHEDULINGCIRCLETYPE == (Convert.ToInt32(Common.SchedulingCircleType.Month) + 1).ToString())
            {
                iCircleDay = 31;
            }
            else if (entTemplateMaster.SCHEDULINGCIRCLETYPE == (Convert.ToInt32(Common.SchedulingCircleType.Week) + 1).ToString())
            {
                iCircleDay = 7;
            }

            for (int j = 0; j < iCircleDay; j++)
            {
                bool     bIsOnduty         = false;
                string   strSchedulingDate = (j + 1).ToString();
                DateTime dtCurDate         = new DateTime();

                dtCurDate = dtStartDate.AddDays(j);

                if (dtCurDate != dtCurOTDate)
                {
                    continue;
                }

                T_HR_SCHEDULINGTEMPLATEDETAIL item = entTemplateDetails.Where(c => c.SCHEDULINGDATE == strSchedulingDate).FirstOrDefault();
                T_HR_SHIFTDEFINE entShiftDefine    = item.T_HR_SHIFTDEFINE;

                if (entShiftDefine.FIRSTSTARTTIME != null && entShiftDefine.FIRSTENDTIME != null)
                {
                    DateTime dtFirstStart = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.FIRSTSTARTTIME).ToString("HH:mm"));
                    DateTime dtFirstEnd   = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.FIRSTENDTIME).ToString("HH:mm"));

                    if (dtFirstStart >= dtOTEnd)
                    {
                        TimeSpan tsTemp = dtOTEnd.Subtract(dtOTStart);
                        dTempOverTimeHours += tsTemp.Hours * 60 + tsTemp.Minutes;
                        break;
                    }
                    else
                    {
                        if (dtFirstEnd >= dtOTStart)
                        {
                            bIsOnduty = true;
                        }
                    }
                }

                if (bIsOnduty)
                {
                    strRes = "{OVERTIMEINWORKDAY}";;
                    break;
                }

                if (entShiftDefine.SECONDSTARTTIME != null && entShiftDefine.SECONDENDTIME != null)
                {
                    DateTime dtSecondStart = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.SECONDSTARTTIME).ToString("HH:mm"));
                    DateTime dtSecondEnd   = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.SECONDENDTIME).ToString("HH:mm"));

                    if (dtSecondEnd >= dtOTStart)
                    {
                        bIsOnduty = true;
                    }
                }

                if (bIsOnduty)
                {
                    strRes = "{OVERTIMEINWORKDAY}";;
                    break;
                }

                if (entShiftDefine.THIRDSTARTTIME != null && entShiftDefine.THIRDENDTIME != null)
                {
                    DateTime dtThirdStart = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.THIRDSTARTTIME).ToString("HH:mm"));
                    DateTime dtThirdEnd   = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.THIRDENDTIME).ToString("HH:mm"));

                    if (dtThirdEnd >= dtOTStart)
                    {
                        bIsOnduty = true;
                    }
                }

                if (bIsOnduty)
                {
                    strRes = "{OVERTIMEINWORKDAY}";;
                    break;
                }

                if (entShiftDefine.FOURTHSTARTTIME != null && entShiftDefine.FOURTHENDTIME != null)
                {
                    DateTime dtFourthStart = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.FOURTHSTARTTIME).ToString("HH:mm"));
                    DateTime dtFourthEnd   = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.FOURTHENDTIME).ToString("HH:mm"));

                    if (dtFourthEnd >= dtOTStart)
                    {
                        bIsOnduty = true;
                    }
                }

                if (bIsOnduty)
                {
                    strRes = "{OVERTIMEINWORKDAY}";;
                    break;
                }

                TimeSpan tsCur = dtOTEnd.Subtract(dtOTStart);
                dTempOverTimeHours += tsCur.Hours * 60 + tsCur.Minutes;
            }

            if (dTempOverTimeHours != 0)
            {
                dTempOverTimeHours = decimal.Round((dTempOverTimeHours) / 60, 1);

                //按自然时长算,以前是最多为一天工作时长
                //if (dTempOverTimeHours > dWorkTimePerDay)
                //{
                //    dTempOverTimeHours = dWorkTimePerDay;
                //}

                dOverTimeHours += dTempOverTimeHours;
            }

            return(strRes);
        }
Exemplo n.º 7
0
        //private void CalculateNonWholeDayOverTimeHoursNew


        /// <summary>
        /// 计算非全天外出确认的时长(节假日外出确认)
        /// </summary>
        /// <param name="dWorkTimePerDay">每日工作时长</param>
        /// <param name="entVacDays">公休假记录</param>
        /// <param name="entWorkDays">工作周记录</param>
        /// <param name="iWorkDays">工作日对应星期类型集合</param>
        /// <param name="dtOTStart">外出确认起始时间</param>
        /// <param name="dtOTEnd">外出确认截止时间</param>
        /// <param name="entTemplateMaster">作息方案</param>
        /// <param name="dTotalOverTimeHours">外出确认累计时长</param>
        private void CalculateNonWholeDayOverTimeHours(decimal dWorkTimePerDay, IQueryable <T_HR_OUTPLANDAYS> entWorkDays, IQueryable <T_HR_OUTPLANDAYS> entVacDays,
                                                       List <int> iWorkDays, DateTime dtOTStart, DateTime dtOTEnd, IQueryable <T_HR_SCHEDULINGTEMPLATEDETAIL> entTemplateDetails,
                                                       T_HR_SCHEDULINGTEMPLATEMASTER entTemplateMaster, ref decimal dOverTimeHours, ref string strMsg)
        {
            bool     bNoCalculate = false; //True,计算出勤日外出确认;False,计算节假日外出确认
            DateTime dtStartDate  = DateTime.Parse(dtOTStart.ToString("yyyy-MM") + "-1");
            DateTime dtCurOTDate  = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd"));

            if (entWorkDays.Count() > 0)
            {
                foreach (T_HR_OUTPLANDAYS item_Work in entWorkDays)
                {
                    if (item_Work.STARTDATE.Value <= dtCurOTDate && item_Work.ENDDATE >= dtCurOTDate)
                    {
                        bNoCalculate = true;
                        break;
                    }
                }
            }

            if (bNoCalculate)
            {
                strMsg = CalculateNonWholeDayOverTimeHoursOnWorkDay(dWorkTimePerDay, dtOTStart, dtOTEnd, entTemplateDetails,
                                                                    entTemplateMaster, ref dOverTimeHours);
                return;
            }

            if (iWorkDays.Contains(Convert.ToInt32(dtCurOTDate.DayOfWeek)))
            {
                if (entVacDays.Count() > 0)
                {
                    bNoCalculate = true;
                    foreach (T_HR_OUTPLANDAYS item_Work in entVacDays)
                    {
                        //如果当前外出确认时间在节假日时间
                        if (item_Work.STARTDATE.Value <= dtCurOTDate && item_Work.ENDDATE >= dtCurOTDate)
                        {
                            //计算节假日外出确认
                            bNoCalculate = false;
                            break;
                        }
                    }
                }

                if (bNoCalculate)
                {
                    strMsg = CalculateNonWholeDayOverTimeHoursOnWorkDay(dWorkTimePerDay, dtOTStart, dtOTEnd, entTemplateDetails,
                                                                        entTemplateMaster, ref dOverTimeHours);
                    return;
                }
            }

            DateTime dtCheckDate        = new DateTime();
            DateTime dtShiftEndDate     = new DateTime();
            decimal  dTempOverTimeHours = 0;

            int iCircleDay = 0;

            if (entTemplateMaster.SCHEDULINGCIRCLETYPE == (Convert.ToInt32(Common.SchedulingCircleType.Month) + 1).ToString())
            {
                iCircleDay = 31;
            }
            else if (entTemplateMaster.SCHEDULINGCIRCLETYPE == (Convert.ToInt32(Common.SchedulingCircleType.Week) + 1).ToString())
            {
                iCircleDay = 7;
            }

            for (int j = 0; j < iCircleDay; j++)
            {
                bool bIsOnDuty = false;

                string   strSchedulingDate = (j + 1).ToString();
                DateTime dtCurDate         = new DateTime();

                dtCurDate = dtStartDate.AddDays(j);

                if (dtCurDate != dtCurOTDate)
                {
                    continue;
                }

                T_HR_SCHEDULINGTEMPLATEDETAIL item = entTemplateDetails.Where(c => c.SCHEDULINGDATE == strSchedulingDate).FirstOrDefault();
                T_HR_SHIFTDEFINE entShiftDefine    = item.T_HR_SHIFTDEFINE;
                //根据考勤方案中的上午上班时间计算上班外出确认时长
                if (entShiftDefine.FIRSTSTARTTIME != null && entShiftDefine.FIRSTENDTIME != null)
                {
                    //上午8:30
                    DateTime dtFirstStart = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.FIRSTSTARTTIME).ToString("HH:mm"));
                    //上午12:00
                    DateTime dtFirstEnd = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.FIRSTENDTIME).ToString("HH:mm"));
                    //如果外出确认结束时间比上午下班时间小
                    if (dtFirstEnd >= dtOTEnd)
                    {
                        //外出确认结束时间-外出确认开始时间
                        TimeSpan tsFirst = dtOTEnd.Subtract(dtOTStart);
                        dTempOverTimeHours = tsFirst.Hours * 60 + tsFirst.Minutes;
                    }
                    else
                    {
                        if (dtFirstEnd > dtOTStart)
                        {
                            TimeSpan tsFirst = dtFirstEnd.Subtract(dtOTStart);
                            dTempOverTimeHours = tsFirst.Hours * 60 + tsFirst.Minutes;
                            dtShiftEndDate     = dtFirstEnd;
                            //  bIsOnDuty = true;
                        }
                    }
                }


                if (entShiftDefine.SECONDSTARTTIME != null && entShiftDefine.SECONDENDTIME != null)
                {
                    DateTime dtSecondStart = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.SECONDSTARTTIME).ToString("HH:mm"));
                    DateTime dtSecondEnd   = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.SECONDENDTIME).ToString("HH:mm"));


                    //如果外出确认结束时间小于二次打卡开始时间,就不往下走
                    if (dtOTEnd <= dtSecondStart)
                    {
                        break;
                    }
                    //外出确认结束时间小于等于二次打卡结束时间
                    if (dtOTEnd <= dtSecondEnd)
                    {
                        //外出确认开始时间小于等于二次打卡开始时间
                        if (dtOTStart <= dtSecondStart)
                        {
                            TimeSpan tsSecond = dtOTEnd.Subtract(dtSecondStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                        //外出确认开始时间大于二次打卡开始时间
                        else if (dtOTStart > dtSecondStart)
                        {
                            TimeSpan tsSecond = dtOTEnd.Subtract(dtOTStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                    }
                    //外出确认结束时间大于二次打卡结束时间
                    else if (dtOTEnd > dtSecondEnd)
                    {
                        //外出确认开始时间要小于二次打卡开始时间
                        if (dtOTStart <= dtSecondStart)
                        {
                            TimeSpan tsSecond = dtSecondEnd.Subtract(dtSecondStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                        //外出确认开始时间大于二次打卡开始时间
                        else if (dtOTStart > dtSecondStart && dtOTStart <= dtSecondEnd)
                        {
                            TimeSpan tsSecond = dtSecondEnd.Subtract(dtOTStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                    }
                    dtShiftEndDate = dtSecondEnd;
                }

                if (entShiftDefine.THIRDSTARTTIME != null && entShiftDefine.THIRDENDTIME != null)
                {
                    DateTime dtThirdStart = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.THIRDSTARTTIME).ToString("HH:mm"));
                    DateTime dtThirdEnd   = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.THIRDENDTIME).ToString("HH:mm"));


                    //如果外出确认结束时间小于三次打卡开始时间,就不往下走
                    if (dtOTEnd <= dtThirdStart)
                    {
                        break;
                    }
                    //外出确认时间小于等于三次打卡结束时间
                    if (dtOTEnd <= dtThirdEnd)
                    {
                        //外出确认开始时间小于等于三次打卡开始时间
                        if (dtOTStart <= dtThirdStart)
                        {
                            TimeSpan tsSecond = dtOTEnd.Subtract(dtThirdStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                        //外出确认开始时间大于三次打卡开始时间
                        else if (dtOTStart > dtThirdStart)
                        {
                            TimeSpan tsSecond = dtOTEnd.Subtract(dtOTStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                    }
                    //外出确认时间大于三次打卡时间
                    else if (dtOTEnd > dtThirdEnd)
                    {
                        //外出确认开始时间要小于三次打卡开始时间
                        if (dtOTStart <= dtThirdStart)
                        {
                            TimeSpan tsSecond = dtThirdEnd.Subtract(dtThirdStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                        //外出确认开始大于三次打卡开始时间
                        else if (dtOTStart > dtThirdStart)
                        {
                            TimeSpan tsSecond = dtThirdEnd.Subtract(dtOTStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                    }
                    dtShiftEndDate = dtThirdEnd;
                }

                if (entShiftDefine.FOURTHSTARTTIME != null && entShiftDefine.FOURTHENDTIME != null)
                {
                    DateTime dtFourthStart = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.FOURTHSTARTTIME).ToString("HH:mm"));
                    DateTime dtFourthEnd   = DateTime.Parse(dtOTStart.ToString("yyyy-MM-dd") + " " + DateTime.Parse(entShiftDefine.FOURTHENDTIME).ToString("HH:mm"));

                    //如果外出确认结束时间小于四次打卡开始时间,就不往下走
                    if (dtOTEnd <= dtFourthStart)
                    {
                        break;
                    }
                    //外出确认时间小于四次打卡结束时间
                    if (dtOTEnd <= dtFourthEnd)
                    {
                        //外出确认开始时间小于等于三次打卡开始时间
                        if (dtOTStart <= dtFourthStart)
                        {
                            TimeSpan tsSecond = dtOTEnd.Subtract(dtFourthStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                        //外出确认开始时间大于三次打卡开始时间
                        else if (dtOTStart > dtFourthStart)
                        {
                            TimeSpan tsSecond = dtOTEnd.Subtract(dtOTStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                    }
                    //外出确认时间大于四次打卡时间
                    else if (dtOTEnd > dtFourthEnd)
                    {
                        //外出确认开始时间要小于四次打卡开始时间
                        if (dtOTStart <= dtFourthStart)
                        {
                            TimeSpan tsSecond = dtFourthEnd.Subtract(dtFourthStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                        //外出确认开始大于四次打卡开始时间
                        else if (dtOTStart > dtFourthStart)
                        {
                            TimeSpan tsSecond = dtFourthEnd.Subtract(dtOTStart);
                            dTempOverTimeHours += tsSecond.Hours * 60 + tsSecond.Minutes;
                        }
                    }
                    dtShiftEndDate = dtFourthEnd;
                }

                //外出确认结束时间大于最后一次打卡时间
                if (dtOTEnd > dtShiftEndDate)
                {
                    //外出确认开始时间小于等打卡结束时间
                    if (dtOTStart <= dtShiftEndDate)
                    {
                        TimeSpan tsTemp = dtOTEnd.Subtract(dtShiftEndDate);
                        dTempOverTimeHours += tsTemp.Hours * 60 + tsTemp.Minutes;
                    }
                    //外出确认开始时间大于打卡结束时间
                    else if (dtOTStart > dtShiftEndDate)
                    {
                        TimeSpan tsTemp = dtOTEnd.Subtract(dtOTStart);
                        dTempOverTimeHours += tsTemp.Hours * 60 + tsTemp.Minutes;
                    }
                }
            }

            if (dTempOverTimeHours != 0)
            {
                dTempOverTimeHours = decimal.Round((dTempOverTimeHours) / 60, 1);

                //按自然时长算,以前是最多为一天工作时长
                //if (dTempOverTimeHours > dWorkTimePerDay)
                //{
                //    dTempOverTimeHours = dWorkTimePerDay;
                //}

                dOverTimeHours += dTempOverTimeHours;
            }
        }
Exemplo n.º 8
0
 public string ModifyTemplateDetail(T_HR_SCHEDULINGTEMPLATEDETAIL entTemp)
 {
     using (SchedulingTemplateDetailBLL bllSchedulingTemplateDetail = new SchedulingTemplateDetailBLL())
     {
         return bllSchedulingTemplateDetail.ModifyTemplateDetail(entTemp);
     }
 }
Exemplo n.º 9
0
        /// <summary>
        /// 检测申请加班的相关信息
        /// </summary>
        /// <param name="request">结果数据实体</param>
        /// <returns>返回结果数据实体</returns>
        public CalculateOTHoursResponse CalculateOTHours(CalculateOTHoursRequest request)
        {
            CalculateOTHoursResponse response = new CalculateOTHoursResponse();

            DateTime dtStartDate = Convert.ToDateTime(request.StartDate + " " + request.StartTime);
            DateTime dtEndDate   = Convert.ToDateTime(request.EndDate + " " + request.EndTime);

            DateTime dtTempStartDate = dtStartDate;
            DateTime dtTempEndDate   = dtEndDate;

            List <string> sWorkArr    = new List <string>(); //工作时间
            List <string> sNotWorkArr = new List <string>(); //休息时间
            List <string> tempWorkArr = new List <string>();

            DateTime FirstCardStartDate  = DateTime.MinValue;
            DateTime FirstCardEndDate    = DateTime.MinValue;
            DateTime SecondCardStartDate = DateTime.MinValue;
            DateTime SecondCardEndDate   = DateTime.MinValue;

            DateTime ThirdCardStartDate  = DateTime.MinValue;
            DateTime ThirdCardEndDate    = DateTime.MinValue;
            DateTime FourthCardStartDate = DateTime.MinValue;
            DateTime FourthCardEndDate   = DateTime.MinValue;

            double totalHours       = 0;
            int    hasFirstSetting  = 1; //0,未设置;1,已设置
            int    hasSecondSetting = 1; //0,未设置;1,已设置
            int    hasThirdSetting  = 1; //0,未设置;1,已设置
            int    hasFourthSetting = 1; //0,未设置;1,已设置

            response.Result         = Enums.Result.Success.GetHashCode();
            response.Message        = string.Empty;
            response.OTHours        = 0;
            response.OTDays         = 0;
            response.Month          = string.Empty;
            response.AttendSolution = string.Empty;
            response.WorkPerDay     = 0;
            response.StartTime      = Convert.ToDateTime(request.StartTime).ToString("HH:mm");

            //判断加班申请是否重复
            T_HR_EMPLOYEEOVERTIMERECORD otEntity = dal.GetObjects <T_HR_EMPLOYEEOVERTIMERECORD>().Where(t => t.OVERTIMERECORDID != request.OverTimeRecordID &&
                                                                                                        t.EMPLOYEEID == request.EmployeeID &&
                                                                                                        ((dtStartDate > t.STARTDATE && dtStartDate < t.ENDDATE) ||//起始时间在已有时间段内
                                                                                                         (dtEndDate > t.STARTDATE && dtEndDate < t.ENDDATE) ||//结束时间在已有时间段内
                                                                                                         (dtStartDate == t.STARTDATE && dtEndDate > t.STARTDATE) ||//当dtStartDate与开始时间重叠时,dtEndDate需大于开始时间
                                                                                                         (dtEndDate == t.ENDDATE && dtStartDate < t.ENDDATE) ||//当dtEndDate与最后时间重叠时dtStartDate需小于束时间
                                                                                                         (dtStartDate <t.STARTDATE && dtEndDate> t.ENDDATE)//新增加班完成包含已有加班
                                                                                                        ) &&
                                                                                                        t.CHECKSTATE != "3" && t.CHECKSTATE != "0"
                                                                                                        ).FirstOrDefault();

            if (otEntity != null)
            {
                response.Result  = Enums.Result.HasDuplicateOTRecord.GetHashCode();//结果:失败
                response.Message = Constants.HasDuplicateOTRecord + ";"
                                   + otEntity.STARTDATE.Value.ToString("yyyy-MM-dd") + " " + otEntity.STARTDATETIME + " ~ "
                                   + otEntity.ENDDATE.Value.ToString("yyyy-MM-dd") + "  " + otEntity.ENDDATETIME;//加班申请重复
                return(response);
            }

            #region "   获取考勤方案,排班明细,排班时间段   "

            AttendanceSolutionBLL   bllAttendanceSolution  = new AttendanceSolutionBLL();
            T_HR_ATTENDANCESOLUTION OTPeriodAttendSolution = bllAttendanceSolution.GetAttendanceSolutionByEmployeeIDAndDate(request.EmployeeID,
                                                                                                                            Convert.ToDateTime(request.StartDate), Convert.ToDateTime(request.EndDate));

            SchedulingTemplateDetailBLL bllTemplateDetail = new SchedulingTemplateDetailBLL();
            IQueryable <T_HR_SCHEDULINGTEMPLATEDETAIL> scheduleSetDetail =
                bllTemplateDetail.GetTemplateDetailRdListByAttendanceSolutionId(OTPeriodAttendSolution.ATTENDANCESOLUTIONID);
            T_HR_SCHEDULINGTEMPLATEMASTER scheduleSetting = scheduleSetDetail.FirstOrDefault().T_HR_SCHEDULINGTEMPLATEMASTER;

            int      iCycleDays       = 0;
            DateTime dtCycleStartDate = Convert.ToDateTime(Convert.ToDateTime(request.StartDate).ToString("yyyy-MM-01"));//按月为周期的排班表
            DateTime dtCurCycleOTDate = Convert.ToDateTime(DateTime.Parse(request.StartDate).ToString("yyyy-MM-dd"));
            //找出加班时间与循环排班详细中对应的日历号,然后通过T_HR_SCHEDULINGTEMPLATEDETAIL找到对应的 打卡时间段: T_HR_SHIFTDEFINE
            if (scheduleSetting.SCHEDULINGCIRCLETYPE == (Common.SchedulingCircleType.Month.GetHashCode() + 1).ToString())
            {//按月循环的排班打卡方式
                iCycleDays = 31;
            }

            if ((scheduleSetting.SCHEDULINGCIRCLETYPE == (Common.SchedulingCircleType.Week.GetHashCode() + 1).ToString()))
            {//按周排班打卡方式
                iCycleDays = 7;
                //如果是按周统计,则从当前算起
                dtCycleStartDate = Convert.ToDateTime(DateTime.Parse(request.StartDate).ToString("yyyy-MM-dd"));
            }

            T_HR_SHIFTDEFINE dayCardSetting = null; //具体的排班明细,最多包括了4个时段的打卡设置,用于计算加班小时数
            for (int i = 0; i < iCycleDays; i++)    //找出加班日期对应的日历中对应明细排班: T_HR_SHIFTDEFINE
            {
                string   strSchedulingDate = (i + 1).ToString();
                DateTime dtCurDate         = new DateTime();

                dtCurDate = dtCycleStartDate.AddDays(i);

                if (dtCurDate != dtCurCycleOTDate)
                {
                    continue;
                }

                T_HR_SCHEDULINGTEMPLATEDETAIL item = scheduleSetDetail.Where(c => c.SCHEDULINGDATE == strSchedulingDate).FirstOrDefault();
                if (item != null)
                {
                    dayCardSetting = item.T_HR_SHIFTDEFINE;//具体的排班明细
                }
            }

            #endregion

            string strMonth = Convert.ToDateTime(request.StartDate).ToString("yyyy年MM月");
            if (OTPeriodAttendSolution != null)
            {
                if (dayCardSetting != null)
                {
                    #region "   休息时间段的设置,以最大四个班次计算  "
                    DateTime notWorkTimeStart = DateTime.MinValue;
                    DateTime notWorkTimeEnd   = DateTime.MinValue;

                    DateTime notWorkTimeStart1 = DateTime.MinValue;
                    DateTime notWorkTimeEnd1   = DateTime.MinValue;

                    DateTime notWorkTimeStart2 = DateTime.MinValue;
                    DateTime notWorkTimeEnd2   = DateTime.MinValue;
                    #endregion

                    #region "   第一时段打卡起始时间  "
                    if (!string.IsNullOrEmpty(dayCardSetting.FIRSTSTARTTIME) && !string.IsNullOrEmpty(dayCardSetting.FIRSTENDTIME))
                    {
                        FirstCardStartDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.FIRSTSTARTTIME).ToString("HH:mm:ss"));
                        FirstCardEndDate   = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.FIRSTENDTIME).ToString("HH:mm:ss"));

                        notWorkTimeStart = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.FIRSTENDTIME).ToString("HH:mm:ss"));

                        sWorkArr.Add(FirstCardStartDate.ToString() + "|" + FirstCardEndDate.ToString());

                        response.FirstStartTime = Convert.ToDateTime(dayCardSetting.FIRSTSTARTTIME).ToString("HH:mm:ss");
                        response.FirstEndTime   = Convert.ToDateTime(dayCardSetting.FIRSTENDTIME).ToString("HH:mm:ss");
                    }
                    else
                    {
                        hasFirstSetting = 0;
                    }
                    #endregion
                    #region "   第二时段打卡起始时间  "
                    if (!string.IsNullOrEmpty(dayCardSetting.SECONDSTARTTIME) && !string.IsNullOrEmpty(dayCardSetting.SECONDENDTIME))
                    {
                        SecondCardStartDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.SECONDSTARTTIME).ToString("HH:mm:ss"));
                        SecondCardEndDate   = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.SECONDENDTIME).ToString("HH:mm:ss"));

                        notWorkTimeEnd    = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.SECONDSTARTTIME).ToString("HH:mm:ss"));
                        notWorkTimeStart1 = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.SECONDENDTIME).ToString("HH:mm:ss"));

                        sWorkArr.Add(SecondCardStartDate.ToString() + "|" + SecondCardEndDate.ToString());
                        sNotWorkArr.Add(notWorkTimeStart.ToString() + "|" + notWorkTimeEnd.ToString());

                        response.SecondStartTime = Convert.ToDateTime(dayCardSetting.SECONDSTARTTIME).ToString("HH:mm:ss");
                        response.SecondEndTime   = Convert.ToDateTime(dayCardSetting.SECONDENDTIME).ToString("HH:mm:ss");
                    }
                    else
                    {
                        hasSecondSetting = 0;
                    }
                    #endregion
                    #region "   第三时段打卡起始时间  "
                    if (!string.IsNullOrEmpty(dayCardSetting.THIRDSTARTTIME) && !string.IsNullOrEmpty(dayCardSetting.THIRDENDTIME))
                    {
                        ThirdCardStartDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.THIRDSTARTTIME).ToString("HH:mm:ss"));
                        ThirdCardEndDate   = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.THIRDENDTIME).ToString("HH:mm:ss"));

                        notWorkTimeEnd1   = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.THIRDSTARTTIME).ToString("HH:mm:ss"));
                        notWorkTimeStart2 = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.THIRDENDTIME).ToString("HH:mm:ss"));

                        sWorkArr.Add(ThirdCardStartDate.ToString() + "|" + ThirdCardEndDate.ToString());
                        sNotWorkArr.Add(notWorkTimeStart1.ToString() + "|" + notWorkTimeEnd1.ToString());

                        response.ThirdStartTime = string.IsNullOrEmpty(dayCardSetting.THIRDSTARTTIME) ? string.Empty : Convert.ToDateTime(dayCardSetting.THIRDSTARTTIME).ToString("HH:mm:ss");
                        response.ThirdEndTime   = string.IsNullOrEmpty(dayCardSetting.THIRDENDTIME) ? string.Empty : Convert.ToDateTime(dayCardSetting.THIRDENDTIME).ToString("HH:mm:ss");
                    }
                    else
                    {
                        hasThirdSetting = 0;
                    }
                    #endregion
                    #region "   第四时段打卡起始时间  "
                    if (!string.IsNullOrEmpty(dayCardSetting.FOURTHSTARTTIME) && !string.IsNullOrEmpty(dayCardSetting.FOURTHENDTIME))
                    {
                        FourthCardStartDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.FOURTHSTARTTIME).ToString("HH:mm:ss"));
                        FourthCardEndDate   = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.FOURTHENDTIME).ToString("HH:mm:ss"));

                        notWorkTimeEnd2 = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.FOURTHSTARTTIME).ToString("HH:mm:ss"));

                        sWorkArr.Add(FourthCardStartDate.ToString() + "|" + FourthCardEndDate.ToString());
                        sNotWorkArr.Add(notWorkTimeStart2.ToString() + "|" + notWorkTimeEnd2.ToString());

                        response.FourthStartTime = string.IsNullOrEmpty(dayCardSetting.FOURTHSTARTTIME) ? string.Empty : Convert.ToDateTime(dayCardSetting.FOURTHSTARTTIME).ToString("HH:mm:ss");
                        response.FourthEndTime   = string.IsNullOrEmpty(dayCardSetting.FOURTHENDTIME) ? string.Empty : Convert.ToDateTime(dayCardSetting.FOURTHENDTIME).ToString("HH:mm:ss");
                    }
                    else
                    {
                        hasFourthSetting = 0;
                    }
                    #endregion

                    #region "   判断是否设置了至少两个的打卡时间段   "
                    //为设置打卡时间段,至少设置两个打卡时间段
                    if (hasFirstSetting == 0)
                    {
                        response.Result         = Enums.Result.NonFirstSetting.GetHashCode();
                        response.Month          = strMonth;
                        response.AttendSolution = OTPeriodAttendSolution.ATTENDANCESOLUTIONNAME;
                        response.WorkPerDay     = OTPeriodAttendSolution.WORKTIMEPERDAY.HasValue ? OTPeriodAttendSolution.WORKTIMEPERDAY.Value : 0;
                        response.Message        = Constants.NonFirstSetting;
                        return(response);
                    }

                    if (hasSecondSetting == 0)
                    {
                        response.Result         = Enums.Result.NonSecondSetting.GetHashCode();
                        response.Month          = strMonth;
                        response.AttendSolution = OTPeriodAttendSolution.ATTENDANCESOLUTIONNAME;
                        response.WorkPerDay     = OTPeriodAttendSolution.WORKTIMEPERDAY.HasValue ? OTPeriodAttendSolution.WORKTIMEPERDAY.Value : 0;
                        response.Message        = Constants.NonSecondSetting;
                        return(response);
                    }
                    #endregion

                    #region "   检查加班时间是否在公共假期,或是工作日,或是三八,或是五四     "

                    decimal dWorkMode = OTPeriodAttendSolution.WORKMODE.Value;
                    int     iWorkMode = 0;
                    int.TryParse(dWorkMode.ToString(), out iWorkMode);//获取工作制(工作天数/周)

                    List <int> iWorkDays = new List <int>();
                    SMT.HRM.BLL.Utility.GetWorkDays(iWorkMode, ref iWorkDays);

                    OutPlanDaysBLL bllOutPlanDays = new OutPlanDaysBLL();
                    IQueryable <T_HR_OUTPLANDAYS> entOutPlanDays = bllOutPlanDays.GetOutPlanDaysRdListByEmployeeID(request.EmployeeID);
                    string strVacDayType  = (Convert.ToInt32(SMT.HRM.BLL.Common.OutPlanDaysType.Vacation) + 1).ToString();
                    string strWorkDayType = (Convert.ToInt32(SMT.HRM.BLL.Common.OutPlanDaysType.WorkDay) + 1).ToString();
                    //获取公共假期设置
                    DateTime vacTempStartDate = Convert.ToDateTime(request.StartDate);
                    DateTime vacTempEndDate   = Convert.ToDateTime(request.EndDate);
                    //加班只可能在一天内
                    IQueryable <T_HR_OUTPLANDAYS> entVacDays = entOutPlanDays.Where(s => s.DAYTYPE == strVacDayType &&
                                                                                    vacTempStartDate >= s.STARTDATE && vacTempEndDate <= s.ENDDATE);

                    //获取工作日设置
                    DateTime workTempStartDate = Convert.ToDateTime(request.StartDate);
                    DateTime workTempEndDate   = Convert.ToDateTime(request.EndDate);
                    //加班只可能在一天内
                    IQueryable <T_HR_OUTPLANDAYS> entWorkDays = entOutPlanDays.Where(s => s.DAYTYPE == strWorkDayType &&
                                                                                     workTempStartDate >= s.STARTDATE && workTempEndDate <= s.ENDDATE);
                    //当前星期几,是否要工作
                    //Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6.
                    int  iDayOfWeek = Convert.ToDateTime(request.StartDate).DayOfWeek.GetHashCode();
                    bool iDayCount  = iWorkDays.Contains(iDayOfWeek);

                    DateTime WorkDayEndDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.SECONDENDTIME).ToString("HH:mm:ss"));
                    //工作日加班,要在第二时间段以后
                    if (dayCardSetting != null)
                    {
                        if (hasThirdSetting == 1)
                        {
                            WorkDayEndDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.THIRDENDTIME).ToString("HH:mm:ss"));
                        }
                        if (hasFourthSetting == 1)
                        {
                            WorkDayEndDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.FOURTHENDTIME).ToString("HH:mm:ss"));
                        }
                    }

                    #region "   不是假期    "
                    if (entVacDays.Count() == 0)
                    {     //也不是设置的工作日,
                        if (entWorkDays.Count() == 0)
                        { //并且在上班时间列表中
                            if (iDayCount)
                            {
                                //工作日加班,要在第二时间段以后
                                if (dayCardSetting != null)
                                {
                                    #region 梁杰文 平时加班,加班起始时间要在工作日结束之后
                                    //改判断逻辑dtEndDate <= WorkDayEndDate为WorkDayEndDate>dtStartDate
                                    #endregion
                                    if (WorkDayEndDate > dtStartDate)
                                    {
                                        #region "   在上班时间列表中,这天要上班,不算加班  "
                                        //这天要上班,不算加班
                                        response.Result  = Enums.Result.IsWorkDay.GetHashCode();
                                        response.Message = Constants.IsWorkDay;//是工作日,不算加班
                                        return(response);

                                        #endregion
                                    }
                                }
                            }
                        }
                        else
                        {
                            //工作日加班,要在第二时间段以后
                            if (dayCardSetting != null)
                            {
                                #region 梁杰文 平时加班,加班起始时间要在工作日结束之后
                                //改判断逻辑dtEndDate <= WorkDayEndDate为WorkDayEndDate>dtStartDate
                                #endregion
                                if (WorkDayEndDate > dtStartDate)
                                {
                                    #region "   设置为工作日,这天要上班,不算加班   "
                                    //这天要上班,不算加班
                                    response.Result  = Enums.Result.IsWorkDay.GetHashCode();
                                    response.Message = Constants.IsWorkDay;//是工作日,不算加班
                                    return(response);

                                    #endregion
                                }
                            }
                        }
                    }
                    else
                    {
                        //加班时间在假期设置中,但只是半天的设置
                        foreach (var vac in entVacDays)
                        {
                            #region "   半天公共假期,三八妇女节,青年节    "
                            if (vac.ISHALFDAY == "1")
                            {
                                if (vac.PEROID == "1")//下午
                                {
                                    if (dayCardSetting != null)
                                    {
                                        DateTime HalfMorningStartDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.FIRSTSTARTTIME).ToString("HH:mm:ss"));
                                        DateTime HalfMorningEndDate   = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.FIRSTENDTIME).ToString("HH:mm:ss"));
                                        //四个时间中,上午时间的开始与结束
                                        if (hasThirdSetting == 1 && hasFourthSetting == 1)
                                        {
                                            HalfMorningEndDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.SECONDENDTIME).ToString("HH:mm:ss"));
                                        }
                                        //如果填写的加班时间段在上午,则不算加班
                                        if (dtEndDate <= HalfMorningEndDate)
                                        {
                                            response.Result         = Enums.Result.IsHalfDayMorningWork.GetHashCode();
                                            response.Month          = strMonth;
                                            response.AttendSolution = OTPeriodAttendSolution.ATTENDANCESOLUTIONNAME;
                                            response.WorkPerDay     = OTPeriodAttendSolution.WORKTIMEPERDAY.HasValue ? OTPeriodAttendSolution.WORKTIMEPERDAY.Value : 0;
                                            response.Message        = Constants.IsHalfDayMorningWork;
                                            return(response);
                                        }
                                    }
                                }
                                else//上午
                                {
                                    if (dayCardSetting != null)
                                    {
                                        DateTime HalfNoonStartDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.SECONDSTARTTIME).ToString("HH:mm:ss"));
                                        DateTime HalfNoonEndDate   = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.SECONDENDTIME).ToString("HH:mm:ss"));
                                        //四个时间中,下午时间的开始与结束
                                        if (hasThirdSetting == 1 && hasFourthSetting == 1)
                                        {
                                            HalfNoonStartDate = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.THIRDSTARTTIME).ToString("HH:mm:ss"));
                                            HalfNoonEndDate   = Convert.ToDateTime(request.StartDate + " " + Convert.ToDateTime(dayCardSetting.FOURTHENDTIME).ToString("HH:mm:ss"));
                                        }
                                        //如果填写的加班时间段在下午,则不算加班
                                        if (dtStartDate >= HalfNoonStartDate && dtStartDate <= HalfNoonEndDate)
                                        {
                                            response.Result         = Enums.Result.IsHalfDayNoonWork.GetHashCode();
                                            response.Month          = strMonth;
                                            response.AttendSolution = OTPeriodAttendSolution.ATTENDANCESOLUTIONNAME;
                                            response.WorkPerDay     = OTPeriodAttendSolution.WORKTIMEPERDAY.HasValue ? OTPeriodAttendSolution.WORKTIMEPERDAY.Value : 0;
                                            response.Message        = Constants.IsHalfDayNoonWork;
                                            return(response);
                                        }
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                    #endregion
                    #endregion

                    //填写的加班时段都在4个设置的上班时间段里面,则直接用结束时间减去开始时间
                    if (
                        (dtStartDate >= FirstCardStartDate && dtStartDate <= FirstCardEndDate &&
                         dtEndDate >= FirstCardStartDate && dtEndDate <= FirstCardEndDate)
                        ||
                        (dtStartDate >= SecondCardStartDate && dtStartDate <= SecondCardEndDate &&
                         dtEndDate >= SecondCardStartDate && dtEndDate <= SecondCardEndDate)
                        ||
                        (dtStartDate >= ThirdCardStartDate && dtStartDate <= ThirdCardEndDate &&
                         dtEndDate >= ThirdCardStartDate && dtEndDate <= ThirdCardEndDate)
                        ||
                        (dtStartDate >= FourthCardStartDate && dtStartDate <= FourthCardEndDate &&
                         dtEndDate >= FourthCardStartDate && dtEndDate <= FourthCardEndDate)
                        )
                    {
                        totalHours = dtEndDate.Subtract(dtStartDate).TotalHours;
                    }
                    else
                    {
                        #region "   计算加班时间     "

                        //早7:50打开,将计算加班的有效开始时间设置为8:30,也就是dtCardStartDate
                        //23:00下班,假定四个工作时间段
                        if (dtStartDate < FirstCardStartDate)
                        {
                            dtTempStartDate    = FirstCardStartDate;
                            response.StartTime = dtTempStartDate.ToString("HH:mm:ss");
                        }

                        #region "   找出开始计算加班的时间点    "
                        DateTime tempOTDate = new DateTime();
                        foreach (string str in sWorkArr)
                        {
                            string[] s             = str.Split('|');
                            DateTime WorkStartDate = Convert.ToDateTime(s[0]);
                            DateTime WorkEndDate   = Convert.ToDateTime(s[1]);
                            //如果开始时间在工作时间范围内,那就从开始时间算加班
                            if (dtTempStartDate >= WorkStartDate && dtTempStartDate <= WorkEndDate)
                            {
                                tempOTDate = dtTempStartDate;
                            }
                            //如果开始时间大于工作时间段的结束时间,则属于休息时间段的时间点
                            //找出里他最近的上班时间点作为加班开始时间
                            if (dtTempStartDate > WorkEndDate)
                            {
                                foreach (string str1 in sNotWorkArr)
                                {
                                    string[] sn = str1.Split('|');
                                    DateTime notWorkStartDate = Convert.ToDateTime(sn[0]);
                                    DateTime notWorkEndDate   = Convert.ToDateTime(sn[1]);
                                    //加班开始时间在休息时间点内,则加班的开始时间从休息时间的结束点开始
                                    if (dtTempStartDate >= notWorkStartDate && dtTempStartDate <= notWorkEndDate)
                                    {
                                        tempOTDate = notWorkEndDate;
                                    }
                                    else
                                    {
                                        //不在所有的休息时间段内,则说明加班是在
                                        //一天正常的上班时间段以外进行
                                        tempOTDate = dtTempStartDate;
                                    }
                                }
                            }
                        }
                        #endregion

                        #region "   设置具体的加班是时间段     "
                        for (int i = 0; i < sWorkArr.Count(); i++)
                        {
                            string[] ss            = sWorkArr[i].Split('|');
                            DateTime WorkStartDate = Convert.ToDateTime(ss[0]);
                            DateTime WorkEndDate   = Convert.ToDateTime(ss[1]);
                            //工作时间段的开始时间大于加班开始时间
                            if (WorkStartDate >= tempOTDate)
                            {
                                //加班结束时间大于工作时间段的结束时间
                                //则说明加班时间包含这段工作时间段,计算完整的加班时间段
                                if (dtTempEndDate >= WorkEndDate)
                                {
                                    if (sNotWorkArr.Count() == 0)
                                    {
                                        tempWorkArr.Add(WorkStartDate.ToString() + "|" + dtTempEndDate.ToString());
                                    }

                                    foreach (string str3 in sNotWorkArr)
                                    {
                                        string[] sn = str3.Split('|');
                                        DateTime notWorkStartDate = Convert.ToDateTime(sn[0]);
                                        DateTime notWorkEndDate   = Convert.ToDateTime(sn[1]);
                                        if (dtTempEndDate >= notWorkStartDate && dtTempEndDate <= notWorkEndDate)
                                        {
                                            tempWorkArr.Add(WorkStartDate.ToString() + "|" + WorkEndDate.ToString());
                                        }
                                        else if (dtTempEndDate >= WorkEndDate)
                                        {
                                            if (i == sWorkArr.Count() - 1)
                                            {
                                                WorkEndDate = dtTempEndDate;
                                            }
                                            tempWorkArr.Add(WorkStartDate.ToString() + "|" + WorkEndDate.ToString());
                                            sNotWorkArr.Remove(str3);
                                            break;
                                        }
                                        else
                                        {
                                            tempWorkArr.Add(WorkStartDate.ToString() + "|" + notWorkStartDate.ToString());
                                            sNotWorkArr.Remove(str3);
                                            break;
                                        }
                                    }
                                }
                                else
                                {
                                    if (sNotWorkArr.Count() == 0)
                                    {
                                        tempWorkArr.Add(WorkStartDate.ToString() + "|" + dtTempEndDate.ToString());
                                    }

                                    foreach (string str3 in sNotWorkArr)
                                    {
                                        string[] sn = str3.Split('|');
                                        DateTime notWorkStartDate = Convert.ToDateTime(sn[0]);
                                        DateTime notWorkEndDate   = Convert.ToDateTime(sn[1]);
                                        if (dtTempEndDate >= notWorkStartDate && dtTempEndDate <= notWorkEndDate)
                                        {
                                        }
                                        else if (dtTempEndDate >= WorkEndDate)
                                        {
                                            tempWorkArr.Add(WorkStartDate.ToString() + "|" + WorkEndDate.ToString());
                                            sNotWorkArr.Remove(str3);
                                            break;
                                        }
                                        else
                                        {
                                            tempWorkArr.Add(WorkStartDate.ToString() + "|" + dtTempEndDate.ToString());
                                            sNotWorkArr.Remove(str3);
                                            break;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (i == sWorkArr.Count() - 1)
                                {
                                    WorkEndDate = dtTempEndDate;
                                }
                                tempWorkArr.Add(tempOTDate.ToString() + "|" + WorkEndDate.ToString());
                            }
                        }
                        #endregion

                        #region "   计算加班时长  "
                        tempWorkArr = tempWorkArr.Distinct().ToList();
                        foreach (string str4 in tempWorkArr)
                        {
                            string[] sss           = str4.Split('|');
                            DateTime WorkStartDate = Convert.ToDateTime(sss[0]);
                            DateTime WorkEndDate   = Convert.ToDateTime(sss[1]);
                            if (WorkStartDate <= WorkEndDate)
                            {
                                totalHours += Math.Round(WorkEndDate.Subtract(WorkStartDate).TotalHours, 1);
                            }
                        }
                        #endregion

                        #endregion
                    }
                }


                response.Result         = Enums.Result.Success.GetHashCode();
                response.OTHours        = totalHours;
                response.OTDays         = Math.Round(totalHours / Convert.ToDouble(OTPeriodAttendSolution.WORKTIMEPERDAY), 2);
                response.Month          = strMonth;
                response.AttendSolution = OTPeriodAttendSolution.ATTENDANCESOLUTIONNAME;
                response.WorkPerDay     = OTPeriodAttendSolution.WORKTIMEPERDAY.HasValue ? OTPeriodAttendSolution.WORKTIMEPERDAY.Value : 0;
                response.Message        = "";
                return(response);
            }


            response.Result         = Enums.Result.NonAttendenceSolution.GetHashCode();
            response.Message        = Constants.NonAttendenceSolution;
            response.OTHours        = 0;
            response.OTDays         = 0;
            response.Month          = strMonth;
            response.AttendSolution = string.Format("未找到{0}对应的考勤方案", strMonth);
            response.WorkPerDay     = 0;
            return(response);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 对指定员工生成列外日期的考勤作息记录
        /// </summary>
        /// <param name="entCompany">员工所在公司</param>
        /// <param name="item_emp">员工信息</param>
        /// <param name="entTemp">考勤方案分配</param>
        /// <param name="entTemplateDetails">作息方案</param>
        /// <param name="entWorkDays">调剂工作日</param>
        private void CreateOutPlanWorkDay(T_HR_COMPANY entCompany, T_HR_EMPLOYEE item_emp, T_HR_ATTENDANCESOLUTIONASIGN entTemp,
                                          List <T_HR_SCHEDULINGTEMPLATEDETAIL> entTemplateDetails, IQueryable <T_HR_OUTPLANDAYS> entWorkDays, bool AttendNoCheck)
        {
            if (entWorkDays == null)
            {
                return;
            }

            if (entWorkDays.Count() == 0)
            {
                return;
            }

            List <DateTime> listWorkDay = new List <DateTime>();

            foreach (T_HR_OUTPLANDAYS entOutPlanDay in entWorkDays)
            {
                TimeSpan ts         = entOutPlanDay.ENDDATE.Value.Subtract(entOutPlanDay.STARTDATE.Value);
                int      iDayPeriod = ts.Days;
                iDayPeriod += 1;//实际天数应包含起始天数

                for (int i = 0; i < iDayPeriod; i++)
                {
                    DateTime dtTemp = entOutPlanDay.STARTDATE.Value.AddDays(i);
                    listWorkDay.Add(dtTemp);
                }
            }

            if (listWorkDay.Count() == 0)
            {
                return;
            }

            for (int j = 0; j < listWorkDay.Count(); j++)
            {
                int      m         = 0;
                DateTime dtCurDate = listWorkDay[j];
                m = dtCurDate.Day;

                T_HR_SCHEDULINGTEMPLATEDETAIL item = entTemplateDetails.Where(c => c.SCHEDULINGDATE == m.ToString()).FirstOrDefault();

                var qc = from ar in dal.GetObjects <T_HR_ATTENDANCERECORD>()
                         where //ar.OWNERCOMPANYID == entCompany.COMPANYID &&
                         ar.EMPLOYEEID == item_emp.EMPLOYEEID && ar.ATTENDANCEDATE == dtCurDate
                         select ar;

                T_HR_ATTENDANCERECORD entUpdate = qc.FirstOrDefault();
                if (entUpdate == null)
                {
                    T_HR_ATTENDANCERECORD entAttRd = new T_HR_ATTENDANCERECORD();
                    entAttRd.ATTENDANCERECORDID   = System.Guid.NewGuid().ToString().ToUpper();
                    entAttRd.ATTENDANCESOLUTIONID = entTemp.T_HR_ATTENDANCESOLUTION.ATTENDANCESOLUTIONID;
                    entAttRd.EMPLOYEEID           = item_emp.EMPLOYEEID;
                    entAttRd.EMPLOYEECODE         = item_emp.EMPLOYEECODE;
                    entAttRd.EMPLOYEENAME         = item_emp.EMPLOYEECNAME;
                    entAttRd.ATTENDANCEDATE       = dtCurDate;
                    if (item.T_HR_SHIFTDEFINE == null)
                    {
                        Tracer.Debug("生成员工列外工作日期错误,排班定义T_HR_SCHEDULINGTEMPLATEDETAIL:" + item.T_HR_SCHEDULINGTEMPLATEMASTER.TEMPLATENAME + " T_HR_SHIFTDEFINE为Null");
                        return;
                    }
                    entAttRd.T_HR_SHIFTDEFINEReference.EntityKey = new EntityKey("TM_SaaS_OA_EFModelContext.T_HR_SHIFTDEFINE", "SHIFTDEFINEID", item.T_HR_SHIFTDEFINE.SHIFTDEFINEID);

                    //第一段工作时间
                    entAttRd.FIRSTSTARTTIME = item.T_HR_SHIFTDEFINE.FIRSTSTARTTIME;
                    entAttRd.FIRSTENDTIME   = item.T_HR_SHIFTDEFINE.FIRSTENDTIME;

                    //第二段工作时间
                    entAttRd.SECONDSTARTTIME = item.T_HR_SHIFTDEFINE.SECONDSTARTTIME;
                    entAttRd.SECONDENDTIME   = item.T_HR_SHIFTDEFINE.SECONDENDTIME;

                    //第三段工作时间
                    entAttRd.THIRDSTARTTIME = item.T_HR_SHIFTDEFINE.THIRDSTARTTIME;
                    entAttRd.THIRDENDTIME   = item.T_HR_SHIFTDEFINE.THIRDENDTIME;

                    //第四段工作时间
                    entAttRd.FOURTHENDTIME   = item.T_HR_SHIFTDEFINE.FOURTHENDTIME;
                    entAttRd.FOURTHSTARTTIME = item.T_HR_SHIFTDEFINE.FOURTHSTARTTIME;

                    //查询公共假期设置判断是否只上半天班公共假期
                    var q = from ent in entWorkDays
                            where ent.STARTDATE == entAttRd.ATTENDANCEDATE
                            select ent;
                    if (q.Count() > 0)
                    {
                        var set = q.FirstOrDefault();
                        if (!string.IsNullOrEmpty(set.ISHALFDAY))
                        {
                            if (set.ISHALFDAY == "1")
                            {
                                if (set.PEROID == "0")//上午
                                {
                                    string msg = "考勤初始化(新增)CreateOutPlanWorkDay-检测设置了半天工作日:"
                                                 + " 员工:" + entAttRd.EMPLOYEENAME
                                                 + " 日期:" + entAttRd.ATTENDANCEDATE
                                                 + " 上班分段(0上午):" + set.PEROID;
                                    Tracer.Debug(msg);
                                    entAttRd.NEEDFRISTATTEND  = "1"; //上午上班
                                    entAttRd.NEEDSECONDATTEND = "0"; //下午不上班
                                    entAttRd.REMARK           = msg;
                                }
                                else if (set.PEROID == "1")
                                {
                                    string msg = "考勤初始化(新增)-检测设置了半天工作日:"
                                                 + " 员工:" + entAttRd.EMPLOYEENAME
                                                 + " 日期:" + entAttRd.ATTENDANCEDATE
                                                 + " 上班分段(1下午):" + set.PEROID;
                                    Tracer.Debug(msg);
                                    entAttRd.REMARK           = msg;
                                    entAttRd.NEEDFRISTATTEND  = "0"; //上午不上班
                                    entAttRd.NEEDSECONDATTEND = "1"; //下午上班
                                }
                            }
                        }
                    }
                    entAttRd.ATTENDANCESTATE = string.Empty;    //新生成的考勤记录,出勤状态为空

                    //权限
                    entAttRd.OWNERCOMPANYID    = item_emp.OWNERCOMPANYID;
                    entAttRd.OWNERDEPARTMENTID = item_emp.OWNERDEPARTMENTID;
                    entAttRd.OWNERPOSTID       = item_emp.OWNERPOSTID;
                    entAttRd.OWNERID           = item_emp.OWNERID;

                    entAttRd.CREATEUSERID       = entTemp.CREATEUSERID;
                    entAttRd.CREATEDATE         = DateTime.Now;
                    entAttRd.REMARK            += entTemp.REMARK;
                    entAttRd.UPDATEUSERID       = entTemp.UPDATEUSERID;
                    entAttRd.UPDATEDATE         = DateTime.Now;
                    entAttRd.CREATECOMPANYID    = entTemp.CREATECOMPANYID;
                    entAttRd.CREATEDEPARTMENTID = entTemp.CREATEDEPARTMENTID;
                    entAttRd.CREATEPOSTID       = entTemp.CREATEPOSTID;
                    if (AttendNoCheck)
                    {
                        entAttRd.ATTENDANCESTATE = "1";               //免打卡员工
                    }
                    dal.Add(entAttRd);
                    Tracer.Debug("初始化设置的例外工作日考勤记录新增记录," + " 员工姓名" + item_emp.EMPLOYEECNAME + " 考勤初始化日期:" + dtCurDate.ToString("yyyy-MM-dd"));
                }
                else
                {
                    Tracer.Debug("初始化设置的例外工作日考勤记录已存在,跳过," + " 员工姓名" + item_emp.EMPLOYEECNAME + " 考勤初始化日期:" + dtCurDate.ToString("yyyy-MM-dd"));
                    //continue;//如果已考勤直接跳过
                    if (!string.IsNullOrEmpty(entUpdate.ATTENDANCESTATE))
                    {
                        continue;
                    }

                    entUpdate.ATTENDANCESOLUTIONID = entTemp.T_HR_ATTENDANCESOLUTION.ATTENDANCESOLUTIONID;
                    entUpdate.EMPLOYEEID           = item_emp.EMPLOYEEID;
                    entUpdate.EMPLOYEECODE         = item_emp.EMPLOYEECODE;
                    entUpdate.EMPLOYEENAME         = item_emp.EMPLOYEECNAME;
                    entUpdate.ATTENDANCEDATE       = dtCurDate;

                    entUpdate.T_HR_SHIFTDEFINE = item.T_HR_SHIFTDEFINE;

                    //第一段工作时间
                    entUpdate.FIRSTSTARTTIME = item.T_HR_SHIFTDEFINE.FIRSTSTARTTIME;
                    entUpdate.FIRSTENDTIME   = item.T_HR_SHIFTDEFINE.FIRSTENDTIME;

                    //第二段工作时间
                    entUpdate.SECONDSTARTTIME = item.T_HR_SHIFTDEFINE.SECONDSTARTTIME;
                    entUpdate.SECONDENDTIME   = item.T_HR_SHIFTDEFINE.SECONDENDTIME;

                    //第三段工作时间
                    entUpdate.THIRDSTARTTIME = item.T_HR_SHIFTDEFINE.THIRDSTARTTIME;
                    entUpdate.THIRDENDTIME   = item.T_HR_SHIFTDEFINE.THIRDENDTIME;

                    //第四段工作时间
                    entUpdate.FOURTHENDTIME   = item.T_HR_SHIFTDEFINE.FOURTHENDTIME;
                    entUpdate.FOURTHSTARTTIME = item.T_HR_SHIFTDEFINE.FOURTHSTARTTIME;

                    //查询公共假期设置判断是否只上半天班公共假期
                    var q = from ent in entWorkDays
                            where ent.STARTDATE == entUpdate.ATTENDANCEDATE
                            select ent;
                    if (q.Count() > 0)
                    {
                        var set = q.FirstOrDefault();
                        if (!string.IsNullOrEmpty(set.ISHALFDAY))
                        {
                            if (set.ISHALFDAY == "1")
                            {
                                if (set.PEROID == "0")//上午
                                {
                                    string msg = "考勤初始化(修改)CreateOutPlanWorkDay-检测设置了半天工作日:"
                                                 + " 员工:" + entUpdate.EMPLOYEENAME
                                                 + " 日期:" + entUpdate.ATTENDANCEDATE
                                                 + " 上班分段(0上午):" + set.PEROID;
                                    Tracer.Debug(msg);
                                    entUpdate.REMARK           = msg;
                                    entUpdate.NEEDFRISTATTEND  = "1"; //上午上班
                                    entUpdate.NEEDSECONDATTEND = "0"; //下午不上班
                                }
                                else if (set.PEROID == "1")
                                {
                                    string msg = "考勤初始化(修改)-检测设置了半天工作日:"
                                                 + " 员工:" + entUpdate.EMPLOYEENAME
                                                 + " 日期:" + entUpdate.ATTENDANCEDATE
                                                 + " 上班分段(1下午):" + set.PEROID;
                                    Tracer.Debug(msg);
                                    entUpdate.REMARK           = msg;
                                    entUpdate.NEEDFRISTATTEND  = "0"; //上午不上班
                                    entUpdate.NEEDSECONDATTEND = "1"; //下午上班
                                }
                            }
                        }
                    }
                    entUpdate.ATTENDANCESTATE = string.Empty;    //新生成的考勤记录,出勤状态为空

                    //权限
                    entUpdate.OWNERCOMPANYID    = item_emp.OWNERCOMPANYID;
                    entUpdate.OWNERDEPARTMENTID = item_emp.OWNERDEPARTMENTID;
                    entUpdate.OWNERPOSTID       = item_emp.OWNERPOSTID;
                    entUpdate.OWNERID           = item_emp.OWNERID;

                    entUpdate.REMARK      += entTemp.REMARK;
                    entUpdate.UPDATEUSERID = entTemp.UPDATEUSERID;
                    entUpdate.UPDATEDATE   = DateTime.Now;

                    dal.UpdateFromContext(entUpdate);
                }
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 对指定公司,指定的员工,按照指定的考勤方案应用生成指定时段内的考勤初始化记录
        /// </summary>
        /// <param name="entTemp"></param>
        /// <param name="entCompany"></param>
        /// <param name="entEmployees"></param>
        /// <param name="dtAsignDate"></param>
        /// <returns></returns>
        private string AsignAttendSolForEmployees(T_HR_ATTENDANCESOLUTIONASIGN entTemp, T_HR_COMPANY entCompany, List <T_HR_EMPLOYEE> entEmployees, DateTime dtAsignDate)
        {
            string strRes = string.Empty;

            try
            {
                decimal dWorkMode = entTemp.T_HR_ATTENDANCESOLUTION.WORKMODE.Value;
                string  strAttendanceSolutionID = entTemp.T_HR_ATTENDANCESOLUTION.ATTENDANCESOLUTIONID;

                int iWorkMode = 0;
                int.TryParse(dWorkMode.ToString(), out iWorkMode);

                List <int> iWorkDays = new List <int>();
                Utility.GetWorkDays(iWorkMode, ref iWorkDays);

                SchedulingTemplateDetailBLL          bllTemplateDetail  = new SchedulingTemplateDetailBLL();
                List <T_HR_SCHEDULINGTEMPLATEDETAIL> entTemplateDetails = new List <T_HR_SCHEDULINGTEMPLATEDETAIL>();

                var q = bllTemplateDetail.GetTemplateDetailRdListByAttendanceSolutionId(strAttendanceSolutionID);

                if (q == null)
                {
                    Tracer.Debug("考勤初始化考勤班次不存在");
                    return("{NOTFOUND}");
                }

                entTemplateDetails = q.ToList();

                if (entTemplateDetails == null)
                {
                    Tracer.Debug("考勤初始化考勤班次不存在");
                    return("{NOTFOUND}");
                }

                if (entTemplateDetails.Count == 0)
                {
                    Tracer.Debug("考勤初始化考勤班次不存在");
                    return("{NOTFOUND}");
                }

                int iTotalDay = 0;
                //DateTime dtCheck = new DateTime();
                DateTime dtStart = DateTime.Parse(dtAsignDate.ToString("yyyy-MM") + "-1");

                //DateTime dtStart = DateTime.Parse("2012-10-1");

                if (entTemp.STARTDATE > dtStart)
                {
                    dtStart = entTemp.STARTDATE.Value;
                }

                DateTime dtInitAttandRecordEndDate = dtStart.AddMonths(1).AddDays(-1);

                AttendanceRecordBLL      bllAttRd         = new AttendanceRecordBLL();
                EmployeeLevelDayCountBLL bllLevelDayCount = new EmployeeLevelDayCountBLL();
                EmployeeEntryBLL         bllEntry         = new EmployeeEntryBLL();
                LeftOfficeConfirmBLL     bllConfirm       = new LeftOfficeConfirmBLL();

                //操作表T_HR_EMPLOYEELEVELDAYCOUNT数据的方式:0:直接逐条新增或修改;
                //1:先把要新增或修改的记录存到内存,然后一次性提交到数据库修改

                Tracer.Debug("开始生成员工考勤初始化记录,总员工数:" + entEmployees.Count());
                for (int n = 0; n < entEmployees.Count(); n++)
                {
                    bool AttendNoCheck = false;
                    try
                    {
                        T_HR_EMPLOYEE item_emp = entEmployees[n];
                        DateTime      dtInitAttandRecordStartDate = new DateTime();

                        #region 判断是否免打卡
                        //如果是免打卡的用户,在这里还是需要初始化,因为结算的时候需要计算出勤天数
                        if (!entTemp.T_HR_ATTENDANCESOLUTIONReference.IsLoaded)
                        {
                            entTemp.T_HR_ATTENDANCESOLUTIONReference.Load();
                        }
                        if (entTemp.T_HR_ATTENDANCESOLUTION.ATTENDANCETYPE == (Convert.ToInt32(Common.AttendanceType.NoCheck) + 1).ToString())//考勤方案设置为不考勤
                        {
                            AttendNoCheck = true;
                            Tracer.Debug("初始化员工,考勤方案设置为免打卡,员工姓名:"
                                         + entEmployees.FirstOrDefault().EMPLOYEECNAME
                                         + " 考勤方案名:" + entTemp.T_HR_ATTENDANCESOLUTION.ATTENDANCESOLUTIONNAME);
                        }

                        #endregion

                        #region 初始化开始日期大于结束日期
                        dtInitAttandRecordStartDate = dtStart;

                        if (dtInitAttandRecordStartDate >= dtInitAttandRecordEndDate)
                        {
                            Tracer.Debug("初始化员工考勤记录被跳过,dtInitAttandRecordStartDate >= dtEnd" + ",员工姓名" + item_emp.EMPLOYEECNAME);
                            continue;
                        }
                        #endregion

                        #region 判断员工状态,是否有入职记录,是否已离职,入职,离职日期
                        string usedAttendSolutionName = ",使用的考勤方案:" + entTemp.T_HR_ATTENDANCESOLUTION.ATTENDANCESOLUTIONNAME
                                                        + ",当前线程id:" + Thread.CurrentThread.ManagedThreadId;
                        Tracer.Debug("初始化员工考勤记录:员工状态:" + item_emp.EMPLOYEESTATE + ",员工姓名" + item_emp.EMPLOYEECNAME
                                     + usedAttendSolutionName);
                        if (item_emp.EMPLOYEESTATE == "0")
                        {
                            T_HR_EMPLOYEEENTRY entEntry = bllEntry.GetEmployeeEntryByEmployeeID(item_emp.EMPLOYEEID);
                            if (entEntry == null)
                            {
                                Tracer.Debug("初始化员工考勤记录被跳过,该员工入职为空" + ",员工姓名" + item_emp.EMPLOYEECNAME);
                                continue;
                            }
                            TimeSpan tsStart = entEntry.ONPOSTDATE.Value - dtInitAttandRecordStartDate;
                            TimeSpan tsEnd   = dtInitAttandRecordEndDate - entEntry.ONPOSTDATE.Value;
                            if (tsStart.Days >= 0 && tsEnd.Days >= 0)
                            {
                                Tracer.Debug("初始化员工考勤记录开始日期被修改:entEntry.ONPOSTDATE.Value > dtInitAttandRecordStartDate" + ",员工姓名" + item_emp.EMPLOYEECNAME
                                             + " 入职日期:" + entEntry.ENTRYDATE.Value.ToString("yyyy-MM-dd")
                                             + " 到岗日期:" + entEntry.ONPOSTDATE.Value.ToString("yyyy-MM-dd"));
                                dtInitAttandRecordStartDate = new DateTime(entEntry.ONPOSTDATE.Value.Year, entEntry.ONPOSTDATE.Value.Month, entEntry.ONPOSTDATE.Value.Day);
                            }

                            if (tsEnd.Days < 0)
                            {
                                Tracer.Debug("初始化员工考勤记录被跳过:员工到岗日期大于考勤初始化结束日期entEntry.ONPOSTDATE.Value > dtEnd" + ",员工姓名" + item_emp.EMPLOYEECNAME
                                             + " 入职日期:" + entEntry.ENTRYDATE.Value.ToString("yyyy-MM-dd")
                                             + " 到岗日期:" + entEntry.ONPOSTDATE.Value.ToString("yyyy-MM-dd")
                                             + " 考勤初始化结束日期:" + dtInitAttandRecordEndDate);
                                continue;
                            }
                        }
                        if (item_emp.EMPLOYEESTATE == "1")
                        {
                            T_HR_EMPLOYEEENTRY entEntry = bllEntry.GetEmployeeEntryByEmployeeID(item_emp.EMPLOYEEID);
                            if (entEntry == null)
                            {
                                Tracer.Debug("该员工入职为空" + ",员工姓名" + item_emp.EMPLOYEECNAME);
                                continue;
                            }

                            if (entEntry.ONPOSTDATE.Value > dtInitAttandRecordStartDate && entEntry.ONPOSTDATE.Value < dtInitAttandRecordEndDate)
                            {
                                Tracer.Debug("初始化员工考勤记录开始日期被修改:entEntry.ONPOSTDATE.Value > dtInitAttandRecordStartDate" + ",员工姓名" + item_emp.EMPLOYEECNAME
                                             + " 入职日期:" + entEntry.ENTRYDATE.Value.ToString("yyyy-MM-dd")
                                             + " 到岗日期:" + entEntry.ONPOSTDATE.Value.ToString("yyyy-MM-dd"));
                                dtInitAttandRecordStartDate = new DateTime(entEntry.ONPOSTDATE.Value.Year, entEntry.ONPOSTDATE.Value.Month, entEntry.ONPOSTDATE.Value.Day);
                            }

                            TimeSpan ts3 = entEntry.ONPOSTDATE.Value - dtInitAttandRecordEndDate;
                            if (ts3.Days > 0)
                            {
                                Tracer.Debug("初始化员工考勤记录被跳过,员工入职日期大于本月最后一天" + ",员工姓名" + item_emp.EMPLOYEECNAME);
                                continue;
                            }
                        }
                        else if (item_emp.EMPLOYEESTATE == "2")
                        {
                            T_HR_LEFTOFFICECONFIRM entConfirm = bllConfirm.GetLeftOfficeConfirmByEmployeeId(item_emp.EMPLOYEEID);
                            if (entConfirm.STOPPAYMENTDATE != null && entConfirm.STOPPAYMENTDATE.Value < dtStart)
                            {
                                Tracer.Debug("初始化员工考勤记录被跳过,entConfirm.STOPPAYMENTDATE !=null && entConfirm.STOPPAYMENTDATE.Value < dtStart" + ",员工姓名" + item_emp.EMPLOYEECNAME);
                                continue;
                            }

                            if (entConfirm.STOPPAYMENTDATE != null && entConfirm.STOPPAYMENTDATE.Value > dtStart && entConfirm.STOPPAYMENTDATE.Value < dtInitAttandRecordEndDate)
                            {
                                dtInitAttandRecordEndDate = new DateTime(entConfirm.STOPPAYMENTDATE.Value.Year, entConfirm.STOPPAYMENTDATE.Value.Month, entConfirm.STOPPAYMENTDATE.Value.Day);
                            }

                            if (entConfirm.STOPPAYMENTDATE != null && entConfirm.STOPPAYMENTDATE.Value < dtStart)
                            {
                                Tracer.Debug("初始化员工考勤记录被跳过,entConfirm.STOPPAYMENTDATE != null && entConfirm.STOPPAYMENTDATE.Value < dtStart" + ",员工姓名" + item_emp.EMPLOYEECNAME);
                                continue;
                            }
                        }
                        #endregion

                        TimeSpan ts = dtInitAttandRecordEndDate.Subtract(dtInitAttandRecordStartDate);
                        iTotalDay = ts.Days;

                        T_HR_SCHEDULINGTEMPLATEMASTER entTemplateMaster = entTemplateDetails[0].T_HR_SCHEDULINGTEMPLATEMASTER;
                        int iCircleDay = 0;
                        if (entTemplateMaster.SCHEDULINGCIRCLETYPE == (Convert.ToInt32(Common.SchedulingCircleType.Month) + 1).ToString())
                        {
                            iCircleDay = 31;
                        }
                        else if (entTemplateMaster.SCHEDULINGCIRCLETYPE == (Convert.ToInt32(Common.SchedulingCircleType.Week) + 1).ToString())
                        {
                            iCircleDay = 7;
                        }

                        int iPeriod = iTotalDay / iCircleDay;
                        if (iTotalDay % iCircleDay >= 0)
                        {
                            iPeriod += 1;
                        }

                        OutPlanDaysBLL bllOutPlanDays = new OutPlanDaysBLL();
                        IQueryable <T_HR_OUTPLANDAYS> entOutPlanDays = bllOutPlanDays.GetOutPlanDaysRdListByEmployeeID(item_emp.EMPLOYEEID);

                        string strVacDayType  = (Convert.ToInt32(Common.OutPlanDaysType.Vacation) + 1).ToString();
                        string strWorkDayType = (Convert.ToInt32(Common.OutPlanDaysType.WorkDay) + 1).ToString();
                        IQueryable <T_HR_OUTPLANDAYS> entVacDays  = entOutPlanDays.Where(s => s.DAYTYPE == strVacDayType);
                        IQueryable <T_HR_OUTPLANDAYS> entWorkDays = entOutPlanDays.Where(s => s.DAYTYPE == strWorkDayType && s.STARTDATE >= dtInitAttandRecordStartDate && s.ENDDATE <= dtInitAttandRecordEndDate);
                        //IQueryable<T_HR_OUTPLANDAYS> entVacWorkDays = entOutPlanDays.Where(s => s.STARTDATE >= dtInitAttandRecordStartDate && s.ENDDATE <= dtInitAttandRecordEndDate);
                        //例外工作日考勤初始化记录公共假期
                        CreateOutPlanWorkDay(entCompany, item_emp, entTemp, entTemplateDetails, entWorkDays, AttendNoCheck);
                        //IQueryable<T_HR_OUTPLANDAYS> entVacWorkHalfDays
                        //    = entVacDays.Where(s => s.STARTDATE >= dtInitAttandRecordStartDate
                        //    && s.ENDDATE <= dtInitAttandRecordEndDate && s.ISHALFDAY=="1");
                        int addCount    = 0;
                        int updateCount = 0;
                        for (int i = 0; i < iPeriod; i++)
                        {
                            for (int j = 0; j < iCircleDay; j++)
                            {
                                #region 开始生成员工考勤初始化记录
                                try
                                {
                                    int      m         = (i * iCircleDay) + j;
                                    DateTime dtCurDate = dtInitAttandRecordStartDate.AddDays(m);

                                    if (dtCurDate > entTemp.ENDDATE.Value)
                                    {
                                        break;
                                    }

                                    bool isVacDay = false;

                                    if (iWorkDays.Contains(Convert.ToInt32(dtCurDate.DayOfWeek)) == false)
                                    {
                                        continue;
                                    }

                                    if (entVacDays.Count() > 0)
                                    {
                                        foreach (T_HR_OUTPLANDAYS item_Vac in entVacDays)
                                        {
                                            if (item_Vac.STARTDATE.Value <= dtCurDate && item_Vac.ENDDATE >= dtCurDate)
                                            {
                                                //如果是公共假期并未设置半天,设为公共假期不考勤
                                                if (string.IsNullOrEmpty(item_Vac.ISHALFDAY))
                                                {
                                                    isVacDay = true;
                                                    break;
                                                }
                                                if (!string.IsNullOrEmpty(item_Vac.ISHALFDAY) &&
                                                    item_Vac.ISHALFDAY == "0")
                                                {
                                                    isVacDay = true;
                                                    break;
                                                }
                                                else
                                                { //例外工作日考勤初始化记录(公共假期半天休息,还有半天上班也需要初始化考勤记录)
                                                }
                                            }
                                        }
                                    }

                                    if (isVacDay)
                                    {
                                        continue;
                                    }

                                    T_HR_SCHEDULINGTEMPLATEDETAIL item = entTemplateDetails.Where(c => c.SCHEDULINGDATE == (j + 1).ToString()).FirstOrDefault();

                                    var qc = from ar in dal.GetObjects <T_HR_ATTENDANCERECORD>()
                                             where //ar.OWNERCOMPANYID == entCompany.COMPANYID &&
                                             ar.EMPLOYEEID == item_emp.EMPLOYEEID && ar.ATTENDANCEDATE == dtCurDate
                                             select ar;

                                    T_HR_ATTENDANCERECORD entUpdate = qc.FirstOrDefault();
                                    if (entUpdate == null)
                                    {
                                        T_HR_ATTENDANCERECORD entAttRd = new T_HR_ATTENDANCERECORD();
                                        entAttRd.ATTENDANCERECORDID   = System.Guid.NewGuid().ToString().ToUpper();
                                        entAttRd.ATTENDANCESOLUTIONID = entTemp.T_HR_ATTENDANCESOLUTION.ATTENDANCESOLUTIONID;
                                        entAttRd.EMPLOYEEID           = item_emp.EMPLOYEEID;
                                        entAttRd.EMPLOYEECODE         = item_emp.EMPLOYEECODE;
                                        entAttRd.EMPLOYEENAME         = item_emp.EMPLOYEECNAME;
                                        entAttRd.ATTENDANCEDATE       = dtCurDate;

                                        //外键实体
                                        //entAttRd.T_HR_SHIFTDEFINE = item.T_HR_SHIFTDEFINE;
                                        entAttRd.T_HR_SHIFTDEFINEReference.EntityKey = new EntityKey("TM_SaaS_OA_EFModelContext.T_HR_SHIFTDEFINE", "SHIFTDEFINEID", item.T_HR_SHIFTDEFINE.SHIFTDEFINEID);

                                        //第一段工作时间
                                        entAttRd.FIRSTSTARTTIME = item.T_HR_SHIFTDEFINE.FIRSTSTARTTIME;
                                        entAttRd.FIRSTENDTIME   = item.T_HR_SHIFTDEFINE.FIRSTENDTIME;

                                        //第二段工作时间
                                        entAttRd.SECONDSTARTTIME = item.T_HR_SHIFTDEFINE.SECONDSTARTTIME;
                                        entAttRd.SECONDENDTIME   = item.T_HR_SHIFTDEFINE.SECONDENDTIME;

                                        //第三段工作时间
                                        entAttRd.THIRDSTARTTIME = item.T_HR_SHIFTDEFINE.THIRDSTARTTIME;
                                        entAttRd.THIRDENDTIME   = item.T_HR_SHIFTDEFINE.THIRDENDTIME;

                                        //第四段工作时间
                                        entAttRd.FOURTHENDTIME   = item.T_HR_SHIFTDEFINE.FOURTHENDTIME;
                                        entAttRd.FOURTHSTARTTIME = item.T_HR_SHIFTDEFINE.FOURTHSTARTTIME;
                                        //查询公共假期设置判断是否只上半天班公共假期
                                        var qVacDay = from ent in entVacDays
                                                      where ent.STARTDATE == entAttRd.ATTENDANCEDATE
                                                      select ent;
                                        if (qVacDay.Count() > 0)
                                        {
                                            var set = qVacDay.FirstOrDefault();
                                            if (!string.IsNullOrEmpty(set.ISHALFDAY))
                                            {
                                                if (set.ISHALFDAY == "1")
                                                {
                                                    if (set.PEROID == "0")//上午
                                                    {
                                                        string msg = "考勤初始化(新增)-检测到假期设置了休假(半天):"
                                                                     + " 员工:" + entAttRd.EMPLOYEENAME
                                                                     + " 日期:" + entAttRd.ATTENDANCEDATE
                                                                     + " 休假分段(0上午):" + set.PEROID;
                                                        Tracer.Debug(msg);
                                                        entAttRd.REMARK           = msg;
                                                        entAttRd.NEEDFRISTATTEND  = "0"; //上午不上班
                                                        entAttRd.NEEDSECONDATTEND = "1"; //下午上班
                                                    }
                                                    else if (set.PEROID == "1")
                                                    {
                                                        string msg = "考勤初始化(新增)-检测到假期设置了休假(半天):"
                                                                     + " 员工:" + entAttRd.EMPLOYEENAME
                                                                     + " 日期:" + entAttRd.ATTENDANCEDATE
                                                                     + " 休假分段(1下午):" + set.PEROID;
                                                        Tracer.Debug(msg);
                                                        entAttRd.REMARK           = msg;
                                                        entAttRd.NEEDFRISTATTEND  = "1"; //上午上班
                                                        entAttRd.NEEDSECONDATTEND = "0"; //下午不上班
                                                    }
                                                }
                                            }
                                        }

                                        //权限
                                        entAttRd.OWNERCOMPANYID    = item_emp.OWNERCOMPANYID;
                                        entAttRd.OWNERDEPARTMENTID = item_emp.OWNERDEPARTMENTID;
                                        entAttRd.OWNERPOSTID       = item_emp.OWNERPOSTID;
                                        entAttRd.OWNERID           = item_emp.OWNERID;

                                        entAttRd.CREATEUSERID       = entTemp.CREATEUSERID;
                                        entAttRd.CREATEDATE         = DateTime.Now;
                                        entAttRd.REMARK            += entTemp.REMARK;
                                        entAttRd.UPDATEUSERID       = entTemp.UPDATEUSERID;
                                        entAttRd.UPDATEDATE         = DateTime.Now;
                                        entAttRd.CREATECOMPANYID    = entTemp.CREATECOMPANYID;
                                        entAttRd.CREATEDEPARTMENTID = entTemp.CREATEDEPARTMENTID;
                                        entAttRd.CREATEPOSTID       = entTemp.CREATEPOSTID;

                                        if (AttendNoCheck)
                                        {
                                            entAttRd.ATTENDANCESTATE = "1";//免打卡员工
                                            Tracer.Debug("设置为免打孔员工,考勤默认为已出勤," + " 员工姓名" + item_emp.EMPLOYEECNAME + " 考勤初始化日期:" + entAttRd.ATTENDANCEDATE.Value.ToString("yyyy-MM-dd")
                                                         + usedAttendSolutionName);
                                        }
                                        else
                                        {
                                            entAttRd.ATTENDANCESTATE = string.Empty;    //新生成的考勤记录,出勤状态为空
                                        }
                                        Tracer.Debug("开始新增员工T_HR_ATTENDANCERECORD记录,日期:" + dtCurDate.ToString("yyyy-MM-dd") + ",员工姓名:" + item_emp.EMPLOYEECNAME
                                                     + ",初始化考勤状态:" + entAttRd.ATTENDANCESTATE + usedAttendSolutionName);
                                        addCount += dal.Add(entAttRd);
                                    }
                                    else
                                    {
                                        if (AttendNoCheck)                   //免打孔
                                        {
                                            entUpdate.ATTENDANCESTATE = "1"; //免打卡员工  //非免打卡员工,跳过
                                            Tracer.Debug("设置为免打孔员工,考勤默认为已出勤," + " 员工姓名" + item_emp.EMPLOYEECNAME + " 考勤初始化日期:" + entUpdate.ATTENDANCEDATE.Value.ToString("yyyy-MM-dd")
                                                         + usedAttendSolutionName);
                                        }
                                        else
                                        {
                                            if (!string.IsNullOrEmpty(entUpdate.ATTENDANCESTATE))
                                            {
                                                Tracer.Debug("更新考勤初始化记录,已存在的考勤初始化记录状态为: " + entUpdate.ATTENDANCESTATE + " ,跳过不再生成" + ",员工姓名:" + item_emp.EMPLOYEECNAME
                                                             + ",考勤状态:" + entUpdate.ATTENDANCESTATE + usedAttendSolutionName);
                                                continue;                             //如果存在直接跳过
                                            }
                                            entUpdate.ATTENDANCESTATE = string.Empty; //新生成的考勤记录,出勤状态为空
                                        }
                                        Tracer.Debug("更新考勤初始化记录,ATTENDANCESTATE考勤状态为空,日期:" + dtCurDate.ToString("yyyy-MM-dd") + ",员工姓名:" + item_emp.EMPLOYEECNAME
                                                     + ",初始化考勤状态:" + entUpdate.ATTENDANCESTATE + usedAttendSolutionName);
                                        entUpdate.ATTENDANCESOLUTIONID = entTemp.T_HR_ATTENDANCESOLUTION.ATTENDANCESOLUTIONID;
                                        entUpdate.EMPLOYEEID           = item_emp.EMPLOYEEID;
                                        entUpdate.EMPLOYEECODE         = item_emp.EMPLOYEECODE;
                                        entUpdate.EMPLOYEENAME         = item_emp.EMPLOYEECNAME;
                                        entUpdate.ATTENDANCEDATE       = dtCurDate;

                                        entUpdate.T_HR_SHIFTDEFINE = item.T_HR_SHIFTDEFINE;

                                        //第一段工作时间
                                        entUpdate.FIRSTSTARTTIME = item.T_HR_SHIFTDEFINE.FIRSTSTARTTIME;
                                        entUpdate.FIRSTENDTIME   = item.T_HR_SHIFTDEFINE.FIRSTENDTIME;

                                        //第二段工作时间
                                        entUpdate.SECONDSTARTTIME = item.T_HR_SHIFTDEFINE.SECONDSTARTTIME;
                                        entUpdate.SECONDENDTIME   = item.T_HR_SHIFTDEFINE.SECONDENDTIME;

                                        //第三段工作时间
                                        entUpdate.THIRDSTARTTIME = item.T_HR_SHIFTDEFINE.THIRDSTARTTIME;
                                        entUpdate.THIRDENDTIME   = item.T_HR_SHIFTDEFINE.THIRDENDTIME;

                                        //第四段工作时间
                                        entUpdate.FOURTHENDTIME   = item.T_HR_SHIFTDEFINE.FOURTHENDTIME;
                                        entUpdate.FOURTHSTARTTIME = item.T_HR_SHIFTDEFINE.FOURTHSTARTTIME;

                                        //查询公共假期设置判断是否只上半天班
                                        var qVacDay = from ent in entVacDays
                                                      where ent.STARTDATE == entUpdate.ATTENDANCEDATE
                                                      select ent;
                                        if (qVacDay.Count() > 0)
                                        {
                                            var set = qVacDay.FirstOrDefault();
                                            if (!string.IsNullOrEmpty(set.ISHALFDAY))
                                            {
                                                if (set.ISHALFDAY == "1")
                                                {
                                                    if (set.PEROID == "0")//上午
                                                    {
                                                        string msg = "考勤初始化(修改)-检测到假期设置了休假(半天):"
                                                                     + " 员工:" + entUpdate.EMPLOYEENAME
                                                                     + " 日期:" + entUpdate.ATTENDANCEDATE
                                                                     + " 上班分段(0上午):" + set.PEROID;
                                                        Tracer.Debug(msg);
                                                        entUpdate.REMARK           = msg;
                                                        entUpdate.NEEDFRISTATTEND  = "0"; //上午不上班休息
                                                        entUpdate.NEEDSECONDATTEND = "1"; //下午上班
                                                    }
                                                    else if (set.PEROID == "1")
                                                    {
                                                        string msg = "考勤初始化(修改)-检测到假期设置了休假(半天):"
                                                                     + " 员工:" + entUpdate.EMPLOYEENAME
                                                                     + " 日期:" + entUpdate.ATTENDANCEDATE
                                                                     + " 上班分段(1下午):" + set.PEROID;
                                                        Tracer.Debug(msg);
                                                        entUpdate.REMARK           = msg;
                                                        entUpdate.NEEDFRISTATTEND  = "1"; //上午上班
                                                        entUpdate.NEEDSECONDATTEND = "0"; //下午不上班休息
                                                    }
                                                }
                                            }
                                        }

                                        //权限
                                        entUpdate.OWNERCOMPANYID    = item_emp.OWNERCOMPANYID;
                                        entUpdate.OWNERDEPARTMENTID = item_emp.OWNERDEPARTMENTID;
                                        entUpdate.OWNERPOSTID       = item_emp.OWNERPOSTID;
                                        entUpdate.OWNERID           = item_emp.OWNERID;

                                        entUpdate.REMARK      += entTemp.REMARK;
                                        entUpdate.UPDATEUSERID = entTemp.UPDATEUSERID;
                                        entUpdate.UPDATEDATE   = DateTime.Now;

                                        updateCount += dal.Update(entUpdate);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Tracer.Debug("生成考勤初始化记录出错:" + item_emp.EMPLOYEECNAME + ex.ToString() + usedAttendSolutionName);
                                    continue;
                                }
                                #endregion
                            }
                        }
                        //bllLevelDayCount.CalculateEmployeeLevelDayCount(entTemp, item_emp, strOperationType);
                        //int saveCount=dal.SaveContextChanges();
                        Tracer.Debug(n + "生成员工:" + item_emp.EMPLOYEECNAME + " 考勤记录成功,开始日期" + dtStart.ToString("yyyy-MM-dd") + "结束日期:"
                                     + dtInitAttandRecordEndDate.ToString("yyyy-MM-dd") + "共新增考勤记录" + addCount.ToString() + " 更新记录条数:" + updateCount
                                     + usedAttendSolutionName);
                    }
                    catch (Exception ex)
                    {
                        Tracer.Debug("生成考勤初始化记录出错:" + entEmployees[n].EMPLOYEECNAME + ex.ToString());
                        continue;
                    }
                }
                Tracer.Debug("生成所有员工考勤记录成功,开始日期" + dtStart.ToString("yyyy-MM-dd") + "结束日期:" + dtInitAttandRecordEndDate.ToString("yyyy-MM-dd"));
                strRes = "{SAVESUCCESSED}";
            }
            catch (Exception ex)
            {
                Tracer.Debug("生成考勤初始化记录出错:" + ex.ToString());
                strRes = ex.Message.ToString();
            }

            return(strRes);
        }
Exemplo n.º 12
0
        /// <summary>
        /// 根据选择的循环周期及默认班次方案,生成排班明细记录(临时)
        /// </summary>
        private void MakeDetailItemSource()
        {
            if (cbxkSchedulingCircleType.SelectedItem == null)
            {
                return;
            }

            ObservableCollection <T_HR_SCHEDULINGTEMPLATEDETAIL> TemplateDetailList = new ObservableCollection <T_HR_SCHEDULINGTEMPLATEDETAIL>();

            T_HR_SHIFTDEFINE entShiftDefine = new T_HR_SHIFTDEFINE();

            if (lkDefaultShiftName.DataContext != null)
            {
                entShiftDefine = lkDefaultShiftName.DataContext as T_HR_SHIFTDEFINE;
            }

            T_SYS_DICTIONARY entDic = cbxkSchedulingCircleType.SelectedItem as T_SYS_DICTIONARY;

            if (entDic.DICTIONARYVALUE.Value.ToString() == (Convert.ToInt32(SchedulingCircleType.Month) + 1).ToString())
            {
                int iMonthDays = 31;
                for (int i = 0; i < iMonthDays; i++)
                {
                    T_HR_SCHEDULINGTEMPLATEDETAIL SchedulingTemplateDetail = new T_HR_SCHEDULINGTEMPLATEDETAIL();
                    SchedulingTemplateDetail.TEMPLATEDETAILID = System.Guid.NewGuid().ToString().ToUpper();
                    SchedulingTemplateDetail.T_HR_SCHEDULINGTEMPLATEMASTER = SchedulingTemplateMaster;
                    SchedulingTemplateDetail.SCHEDULINGDATE   = (i + 1).ToString();
                    SchedulingTemplateDetail.SCHEDULINGINDEX  = i + 1;
                    SchedulingTemplateDetail.T_HR_SHIFTDEFINE = entShiftDefine;
                    SchedulingTemplateDetail.REMARK           = string.Empty;

                    //2010年2月11日, 11:37:35,目前暂未实现登录部分,人员相关数据为假定值
                    SchedulingTemplateDetail.CREATEDATE   = DateTime.Now;
                    SchedulingTemplateDetail.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;
                    SchedulingTemplateDetail.UPDATEDATE   = System.DateTime.Now;
                    SchedulingTemplateDetail.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;

                    TemplateDetailList.Add(SchedulingTemplateDetail);
                }
            }
            else if (entDic.DICTIONARYVALUE.Value.ToString() == (Convert.ToInt32(SchedulingCircleType.Week) + 1).ToString())
            {
                int iWeekDays = 7;
                for (int j = 0; j < iWeekDays; j++)
                {
                    T_HR_SCHEDULINGTEMPLATEDETAIL SchedulingTemplateDetail = new T_HR_SCHEDULINGTEMPLATEDETAIL();
                    SchedulingTemplateDetail.TEMPLATEDETAILID = System.Guid.NewGuid().ToString().ToUpper();
                    SchedulingTemplateDetail.SCHEDULINGDATE   = (j + 1).ToString();
                    SchedulingTemplateDetail.SCHEDULINGINDEX  = j + 1;
                    SchedulingTemplateDetail.T_HR_SCHEDULINGTEMPLATEMASTER = SchedulingTemplateMaster;
                    SchedulingTemplateDetail.T_HR_SHIFTDEFINE = entShiftDefine;
                    SchedulingTemplateDetail.REMARK           = string.Empty;

                    //2010年2月11日, 11:37:35,目前暂未实现登录部分,人员相关数据为假定值
                    SchedulingTemplateDetail.CREATEDATE   = DateTime.Now;
                    SchedulingTemplateDetail.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;
                    SchedulingTemplateDetail.UPDATEDATE   = System.DateTime.Now;
                    SchedulingTemplateDetail.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;

                    TemplateDetailList.Add(SchedulingTemplateDetail);
                }
            }

            dgTemplateDetails.ItemsSource = TemplateDetailList;
        }
Exemplo n.º 13
0
        /// <summary>
        /// 根据选择的循环周期及默认班次方案,生成排班明细记录(临时)
        /// </summary>
        private void MakeDetailItemSource()
        {
            if (cbxkSchedulingCircleType.SelectedItem == null)
            {
                return;
            }

            ObservableCollection<T_HR_SCHEDULINGTEMPLATEDETAIL> TemplateDetailList = new ObservableCollection<T_HR_SCHEDULINGTEMPLATEDETAIL>();

            T_HR_SHIFTDEFINE entShiftDefine = new T_HR_SHIFTDEFINE();
            if (lkDefaultShiftName.DataContext != null)
            {
                entShiftDefine = lkDefaultShiftName.DataContext as T_HR_SHIFTDEFINE;
            }

            T_SYS_DICTIONARY entDic = cbxkSchedulingCircleType.SelectedItem as T_SYS_DICTIONARY;
            if (entDic.DICTIONARYVALUE.Value.ToString() == (Convert.ToInt32(SchedulingCircleType.Month) + 1).ToString())
            {
                int iMonthDays = 31;
                for (int i = 0; i < iMonthDays; i++)
                {
                    T_HR_SCHEDULINGTEMPLATEDETAIL SchedulingTemplateDetail = new T_HR_SCHEDULINGTEMPLATEDETAIL();
                    SchedulingTemplateDetail.TEMPLATEDETAILID = System.Guid.NewGuid().ToString().ToUpper();
                    SchedulingTemplateDetail.T_HR_SCHEDULINGTEMPLATEMASTER = SchedulingTemplateMaster;
                    SchedulingTemplateDetail.SCHEDULINGDATE = (i + 1).ToString();
                    SchedulingTemplateDetail.SCHEDULINGINDEX = i + 1;
                    SchedulingTemplateDetail.T_HR_SHIFTDEFINE = entShiftDefine;
                    SchedulingTemplateDetail.REMARK = string.Empty;

                    //2010年2月11日, 11:37:35,目前暂未实现登录部分,人员相关数据为假定值
                    SchedulingTemplateDetail.CREATEDATE = DateTime.Now;
                    SchedulingTemplateDetail.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;
                    SchedulingTemplateDetail.UPDATEDATE = System.DateTime.Now;
                    SchedulingTemplateDetail.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;

                    TemplateDetailList.Add(SchedulingTemplateDetail);
                }
            }
            else if (entDic.DICTIONARYVALUE.Value.ToString() == (Convert.ToInt32(SchedulingCircleType.Week) + 1).ToString())
            {
                int iWeekDays = 7;
                for (int j = 0; j < iWeekDays; j++)
                {
                    T_HR_SCHEDULINGTEMPLATEDETAIL SchedulingTemplateDetail = new T_HR_SCHEDULINGTEMPLATEDETAIL();
                    SchedulingTemplateDetail.TEMPLATEDETAILID = System.Guid.NewGuid().ToString().ToUpper();
                    SchedulingTemplateDetail.SCHEDULINGDATE = (j + 1).ToString();
                    SchedulingTemplateDetail.SCHEDULINGINDEX = j + 1;
                    SchedulingTemplateDetail.T_HR_SCHEDULINGTEMPLATEMASTER = SchedulingTemplateMaster;
                    SchedulingTemplateDetail.T_HR_SHIFTDEFINE = entShiftDefine;
                    SchedulingTemplateDetail.REMARK = string.Empty;

                    //2010年2月11日, 11:37:35,目前暂未实现登录部分,人员相关数据为假定值
                    SchedulingTemplateDetail.CREATEDATE = DateTime.Now;
                    SchedulingTemplateDetail.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;
                    SchedulingTemplateDetail.UPDATEDATE = System.DateTime.Now;
                    SchedulingTemplateDetail.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID;

                    TemplateDetailList.Add(SchedulingTemplateDetail);
                }
            }

            dgTemplateDetails.ItemsSource = TemplateDetailList;
        }