public void DoWork() { T_HR_ATTENDANCESOLUTION ent = new T_HR_ATTENDANCESOLUTION(); // 在此处添加操作实现 return; }
public bool Save(ref T_HR_ATTENDANCESOLUTION entAttSol) { bool flag = false; if (lkSchedulingTemplateMaster.DataContext == null) { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr("REQUIRED", "SCHEDULINGTEMPLATEMASTER")); return(false); } if (dgSEList.ItemsSource == null) { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr("REQUIRED", "SCHEDULINGTEMPLATEDETAILSET")); return(false); } if (entAttSol.WORKDAYTYPE == "1" && entAttSol.WORKDAYS == null || entAttSol.WORKDAYS == 0) { Utility.ShowCustomMessage(MessageTypes.Error, "工作天数", "工作天数计算方式设定为“固定方式”时,工作天数(天/月)必须大于0"); return(false); } entAttSol.T_HR_SCHEDULINGTEMPLATEMASTER = entTemplateMaster; flag = true; return(flag); }
/// <summary> /// 重新提交 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void btnReSubmit_Click(object sender, RoutedEventArgs e) { string strAttendanceSolutionID = string.Empty; if (dgAttSolList.SelectedItems == null) { ComfirmWindow.ConfirmationBox(Utility.GetResourceStr("CONFIRMINFO"), Utility.GetResourceStr("SELECTERROR", "ReSubmit"), Utility.GetResourceStr("CONFIRMBUTTON")); return; } if (dgAttSolList.SelectedItems.Count == 0) { ComfirmWindow.ConfirmationBox(Utility.GetResourceStr("CONFIRMINFO"), Utility.GetResourceStr("SELECTERROR", "ReSubmit"), Utility.GetResourceStr("CONFIRMBUTTON")); return; } T_HR_ATTENDANCESOLUTION ent = dgAttSolList.SelectedItems[0] as T_HR_ATTENDANCESOLUTION; strAttendanceSolutionID = ent.ATTENDANCESOLUTIONID.ToString(); AttSolRdForm formAttSolRd = new AttSolRdForm(FormTypes.Resubmit, strAttendanceSolutionID); EntityBrowser entBrowser = new EntityBrowser(formAttSolRd); formAttSolRd.MinWidth = 630; formAttSolRd.MinHeight = 380; entBrowser.FormType = FormTypes.Resubmit; entBrowser.ReloadDataEvent += new EntityBrowser.refreshGridView(browser_ReloadDataEvent); entBrowser.Show <string>(DialogMode.Default, SMT.SAAS.Main.CurrentContext.Common.ParentLayoutRoot, "", (result) => { }); }
public bool Save(ref T_HR_ATTENDANCESOLUTION entAttSol) { bool flag = false; if (lkSchedulingTemplateMaster.DataContext == null) { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr("REQUIRED", "SCHEDULINGTEMPLATEMASTER")); return false; } if (dgSEList.ItemsSource == null) { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr("REQUIRED", "SCHEDULINGTEMPLATEDETAILSET")); return false; } if (entAttSol.WORKDAYTYPE == "1" && entAttSol.WORKDAYS == null || entAttSol.WORKDAYS == 0) { Utility.ShowCustomMessage(MessageTypes.Error, "工作天数", "工作天数计算方式设定为“固定方式”时,工作天数(天/月)必须大于0"); return false; } entAttSol.T_HR_SCHEDULINGTEMPLATEMASTER = entTemplateMaster; flag = true; return flag; }
/// <summary> /// 根据公司ID,查询一段时间内的公休假 /// </summary> /// <param name="T_HR_ATTENDANCESOLUTION"></param> /// <param name="dtStart"></param> /// <param name="dtEnd"></param> /// <returns></returns> public IQueryable <T_HR_OUTPLANDAYS> GetOutPlanDaysRdListByCompanyIdAndDate(T_HR_ATTENDANCESOLUTION entAttSol, DateTime dtStart, DateTime dtEnd, string strDayType) { if (entAttSol == null) { return(null); } return(GetOutPlanDaysByCompanyIDAndDate(entAttSol.OWNERCOMPANYID, dtStart, dtEnd, strDayType)); }
/// <summary> /// 根据主键索引,获得指定的假期记录以便查看编辑 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void clientAtt_GetAttendanceSolutionByIDCompleted(object sender, GetAttendanceSolutionByIDCompletedEventArgs e) { if (e.Error == null) { entAttendanceSolution = e.Result; if (FormType == FormTypes.Resubmit) { entAttendanceSolution.CHECKSTATE = Convert.ToInt32(CheckStates.UnSubmit).ToString(); } entAttendanceSolution.UPDATEDATE = DateTime.Now; entAttendanceSolution.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; this.DataContext = entAttendanceSolution; cbIsCurrentMonth.IsChecked = false; if (entAttendanceSolution.ISCURRENTMONTH == (Convert.ToInt32(IsChecked.Yes) + 1).ToString()) { cbIsCurrentMonth.IsChecked = true; } //结算岗位 if (!string.IsNullOrWhiteSpace(entAttendanceSolution.LEFTOFFICERECEIVEPOSTNAME)) { lkBalancePost.TxtLookUp.Text = entAttendanceSolution.LEFTOFFICERECEIVEPOSTNAME; } //如果ISAUTOIMPORTPUNCH=0 表示不自动导入; =1表示自动导入 if (entAttendanceSolution.ISAUTOIMPORTPUNCH == "0") { this.RadN.IsChecked = true; } else { this.RadY.IsChecked = true; } if (entAttendanceSolution.CHECKSTATE != Convert.ToInt32(CheckStates.UnSubmit).ToString()) { UnEnableFormControl(); this.ucOTReward.IsEnabled = false; this.ucDeduct.IsEnabled = false; //this.ucDef.IsEnabled = false; //this.ucDef.dgSEList.IsEnabled = true; //this.ucDef.cbxkSchedulingCircleType.IsEnabled = false; //this.ucDef.lkSchedulingTemplateMaster.IsEnabled = false; //this.ucDef.txtRemark.IsEnabled = false; this.ucLeave.IsEnabled = false; } RefreshUI(RefreshedTypes.AuditInfo); SetToolBar(); } else { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr(e.Error.Message)); } }
private void InitForm() { entAttendanceSolution = new T_HR_ATTENDANCESOLUTION(); entAttendanceSolution.ISEXPIRED = "0"; entAttendanceSolution.YOUTHEXTEND = "0"; cbIsExpired.IsChecked = false; cbYouthIsExpired.IsChecked = false; this.DataContext = entAttendanceSolution; }
/// <summary> /// 新增时,数据初始化 /// </summary> private void InitForm() { entAttendanceSolution = new T_HR_ATTENDANCESOLUTION(); entOvertimeReward = new T_HR_OVERTIMEREWARD(); //加班设置(T_HR_ATTENDANCESOLUTION 仅设置此部分存储及初始化当前页面的设置) entAttendanceSolution.OVERTIMEVALID = "0"; entAttendanceSolution.OVERTIMEPAYTYPE = "0"; entAttendanceSolution.OVERTIMECHECK = "0"; cbOTTimeCheck.IsChecked = false; entAttendanceSolution.T_HR_OVERTIMEREWARD = entOvertimeReward; this.DataContext = entAttendanceSolution; }
/// <summary> /// 根据主键索引,获得指定的假期记录以便查看编辑 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void clientAtt_GetAttendanceSolutionByIDCompleted(object sender, GetAttendanceSolutionByIDCompletedEventArgs e) { if (e.Error == null) { entAttendanceSolution = e.Result; entAttendanceSolution.UPDATEDATE = DateTime.Now; entAttendanceSolution.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; this.DataContext = entAttendanceSolution; } else { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr(e.Error.Message)); } }
/// <summary> /// 效验输入基本信息内容 /// </summary> /// <param name="entAttSol"></param> private void CheckSubmitForm(ref T_HR_ATTENDANCESOLUTION entAttSol) { if (entAttSol == null) { return; } decimal dAllowLostCardTimes = 0, dAllowLateMaxMinute = 0, dAllowLateMaxTimes = 0; decimal.TryParse(nudLostCardTimes.Value.ToString(), out dAllowLostCardTimes); decimal.TryParse(nudLateMaxMinute.Value.ToString(), out dAllowLateMaxMinute); decimal.TryParse(nudLateMaxTimes.Value.ToString(), out dAllowLateMaxTimes); entAttSol.ALLOWLOSTCARDTIMES = dAllowLostCardTimes; entAttSol.ALLOWLATEMAXMINUTE = dAllowLateMaxMinute; entAttSol.ALLOWLATEMAXTIMES = dAllowLateMaxTimes; }
public bool Save(ref T_HR_ATTENDANCESOLUTION entAttSol, out ObservableCollection <T_HR_ATTENDFREELEAVE> entListTemp) { bool flag = false; entListTemp = new ObservableCollection <T_HR_ATTENDFREELEAVE>(); CheckSubmitForm(ref entAttSol); if (entAttSol == null) { return(false); } if (dgLeaveSetlist.ItemsSource == null) { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr("REQUIRED", "ATTENDANCEUNUSUALDEDUCT")); return(false); } entLeaveTypeSets = dgLeaveSetlist.ItemsSource as ObservableCollection <T_HR_LEAVETYPESET>; entListTemp.Clear(); for (int i = 0; i < entLeaveTypeSets.Count; i++) { T_HR_ATTENDFREELEAVE entTemp = new T_HR_ATTENDFREELEAVE(); entTemp.ATTENDFREELEAVEID = System.Guid.NewGuid().ToString(); entTemp.T_HR_LEAVETYPESET = entLeaveTypeSets[i] as T_HR_LEAVETYPESET; entTemp.T_HR_ATTENDANCESOLUTION = entAttSol; entTemp.CREATEDATE = DateTime.Now; entTemp.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; entTemp.UPDATEDATE = System.DateTime.Now; entTemp.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; entListTemp.Add(entTemp); } if (entListTemp.Count > 0) { flag = true; } return(flag); }
/// <summary> /// 非编辑状态,定义初始化数据 /// </summary> private void InitBasicForm() { entAttendanceSolution = new T_HR_ATTENDANCESOLUTION(); entAttendanceSolution.ATTENDANCESOLUTIONID = System.Guid.NewGuid().ToString().ToUpper(); //权限控制 entAttendanceSolution.OWNERCOMPANYID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].CompanyID; entAttendanceSolution.OWNERDEPARTMENTID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].DepartmentID; entAttendanceSolution.OWNERPOSTID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].PostID; entAttendanceSolution.OWNERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; //2010年2月11日, 11:37:35,目前暂未实现登录部分,人员相关数据为假定值 entAttendanceSolution.CREATEDATE = DateTime.Now; entAttendanceSolution.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; entAttendanceSolution.UPDATEDATE = System.DateTime.Now; entAttendanceSolution.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; //页面初始化加载的临时数据 entAttendanceSolution.ATTENDANCETYPE = "0"; entAttendanceSolution.CARDTYPE = "0"; entAttendanceSolution.WORKDAYTYPE = "0"; entAttendanceSolution.ISCURRENTMONTH = "1"; cbIsCurrentMonth.IsChecked = false; //加班设置 entAttendanceSolution.OVERTIMEVALID = "0"; entAttendanceSolution.OVERTIMEPAYTYPE = "0"; entAttendanceSolution.OVERTIMECHECK = "0"; //考勤异常设置 entAttendanceSolution.ALLOWLOSTCARDTIMES = 0; entAttendanceSolution.ALLOWLATEMAXMINUTE = 0; entAttendanceSolution.ALLOWLATEMAXTIMES = 0; //请假设置 entAttendanceSolution.ANNUALLEAVESET = "0"; entAttendanceSolution.ISEXPIRED = "0"; //审核 entAttendanceSolution.CHECKSTATE = Convert.ToInt32(SMT.SaaS.FrameworkUI.CheckStates.UnSubmit).ToString(); entAttendanceSolution.EDITSTATE = Convert.ToInt32(SMT.SaaS.FrameworkUI.EditStates.UnActived).ToString(); this.DataContext = entAttendanceSolution; }
public bool Save(out T_HR_ATTENDANCESOLUTION entAttSol) { bool flag = false; entAttSol = new T_HR_ATTENDANCESOLUTION(); CheckSubmitForm(out flag); if (!flag) { entAttSol = null; return(false); } entAttSol = Utility.Clone(entAttendanceSolution); flag = true; return(flag); }
/// <summary> /// /// </summary> private void InitForm() { entAttendanceSolution = new T_HR_ATTENDANCESOLUTION(); entAttendanceSolution.ATTENDANCESOLUTIONID = System.Guid.NewGuid().ToString().ToUpper(); //权限控制 entAttendanceSolution.OWNERCOMPANYID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].CompanyID; entAttendanceSolution.OWNERDEPARTMENTID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].DepartmentID; entAttendanceSolution.OWNERPOSTID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].PostID; entAttendanceSolution.OWNERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; //2010年2月11日, 11:37:35,目前暂未实现登录部分,人员相关数据为假定值 entAttendanceSolution.CREATEDATE = DateTime.Now; entAttendanceSolution.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; entAttendanceSolution.UPDATEDATE = System.DateTime.Now; entAttendanceSolution.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; //页面初始化加载的临时数据 entAttendanceSolution.ATTENDANCETYPE = "0"; entAttendanceSolution.CARDTYPE = "0"; entAttendanceSolution.WORKDAYTYPE = "0"; entAttendanceSolution.ISCURRENTMONTH = "0"; //加班设置 entAttendanceSolution.OVERTIMEVALID = "0"; entAttendanceSolution.OVERTIMEPAYTYPE = "0"; entAttendanceSolution.OVERTIMECHECK = "0"; //考勤异常设置 entAttendanceSolution.ALLOWLOSTCARDTIMES = 0; entAttendanceSolution.ALLOWLATEMAXMINUTE = 0; entAttendanceSolution.ALLOWLATEMAXTIMES = 0; //请假设置 entAttendanceSolution.ANNUALLEAVESET = "0"; entAttendanceSolution.ISEXPIRED = "0"; //审核 entAttendanceSolution.CHECKSTATE = Convert.ToInt32(SMT.SaaS.FrameworkUI.CheckStates.UnSubmit).ToString(); entAttendanceSolution.EDITSTATE = Convert.ToInt32(SMT.SaaS.FrameworkUI.EditStates.UnActived).ToString(); this.DataContext = entAttendanceSolution; }
private void lkAttSol_FindClick(object sender, EventArgs e) { Dictionary <string, string> cols = new Dictionary <string, string>(); cols.Add("ATTENDANCESOLUTIONNAME", "ATTENDANCESOLUTIONNAME"); LookupForm lookup = new LookupForm(SMT.Saas.Tools.OrganizationWS.EntityNames.AttendanceSolution, typeof(T_HR_ATTENDANCESOLUTION[]), cols); lookup.SelectedClick += (o, ev) => { T_HR_ATTENDANCESOLUTION ent = lookup.SelectedObj as T_HR_ATTENDANCESOLUTION; if (ent != null) { lkAttSol.DataContext = ent; } }; lookup.Show <string>(DialogMode.Default, SMT.SAAS.Main.CurrentContext.Common.ParentLayoutRoot, "", (result) => {}); }
/// <summary> /// 效验并整理提交的表单 /// </summary> /// <param name="entAttendanceSolutionDeducts"></param> /// <param name="entAttendFreeLeaves"></param> /// <returns></returns> private bool CheckAndSubmitTabForm(ref T_HR_ATTENDANCESOLUTION entAttSol, ref ObservableCollection <T_HR_ATTENDANCESOLUTIONDEDUCT> entAttendanceSolutionDeducts, ref ObservableCollection <T_HR_ATTENDFREELEAVE> entAttendFreeLeaves) { bool flag = false; CheckBasicForm(out flag); if (!flag) { return(false); } flag = ucOTReward.Save(ref entAttSol); if (!flag) { return(false); } flag = ucDeduct.Save(ref entAttSol, out entAttendanceSolutionDeducts); if (!flag) { return(false); } flag = ucLeave.Save(ref entAttSol, out entAttendFreeLeaves); if (!flag) { return(false); } flag = ucDef.Save(ref entAttSol); if (!flag) { return(false); } this.DataContext = entAttSol; return(flag); }
/// <summary> /// 获取考勤方案对应的考勤异常配置信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void clientAtt_GetAttendanceSolutionDeductRdListByAttSolIDCompleted(object sender, GetAttendanceSolutionDeductRdListByAttSolIDCompletedEventArgs e) { if (e.Error == null) { entAttendanceSolutionDeducts = e.Result; if (entAttendanceSolutionDeducts == null) { entAttendanceSolutionDeducts = new ObservableCollection <T_HR_ATTENDANCESOLUTIONDEDUCT>(); } if (entAttendanceSolutionDeducts.Count > 0) { entAttendanceSolution = new T_HR_ATTENDANCESOLUTION(); entAttendanceSolution = entAttendanceSolutionDeducts[0].T_HR_ATTENDANCESOLUTION; nudLostCardTimes.Value = double.Parse(entAttendanceSolution.ALLOWLOSTCARDTIMES.Value.ToString()); nudLateMaxMinute.Value = double.Parse(entAttendanceSolution.ALLOWLATEMAXMINUTE.Value.ToString()); nudLateMaxTimes.Value = double.Parse(entAttendanceSolution.ALLOWLATEMAXTIMES.Value.ToString()); entAttendanceDeductMasters = new ObservableCollection <T_HR_ATTENDANCEDEDUCTMASTER>(); foreach (T_HR_ATTENDANCESOLUTIONDEDUCT item in entAttendanceSolutionDeducts) { entAttendanceDeductMasters.Add(item.T_HR_ATTENDANCEDEDUCTMASTER); } if (entAttendanceDeductMasters.Count > 0) { dgAttendanceDeductlist.ItemsSource = entAttendanceDeductMasters; } } this.DataContext = entAttendanceSolutionDeducts; } else { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr(e.Error.Message)); } }
/// <summary> /// 删除指定的考勤方案 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void btnDelete_Click(object sender, RoutedEventArgs e) { string strID = ""; if (dgAttSolList.SelectedItems == null) { ComfirmWindow.ConfirmationBox(Utility.GetResourceStr("CONFIRMINFO"), Utility.GetResourceStr("SELECTERROR", "DELETE"), Utility.GetResourceStr("CONFIRMBUTTON")); return; } if (dgAttSolList.SelectedItems.Count == 0) { ComfirmWindow.ConfirmationBox(Utility.GetResourceStr("CONFIRMINFO"), Utility.GetResourceStr("SELECTERROR", "DELETE"), Utility.GetResourceStr("CONFIRMBUTTON")); return; } foreach (object ovj in dgAttSolList.SelectedItems) { T_HR_ATTENDANCESOLUTION entAttSol = ovj as T_HR_ATTENDANCESOLUTION; string Result = ""; if (entAttSol != null) { strID = entAttSol.ATTENDANCESOLUTIONID; if (entAttSol.CHECKSTATE != Convert.ToInt32(CheckStates.UnSubmit).ToString()) { ComfirmWindow.ConfirmationBox(Utility.GetResourceStr("CONFIRMINFO"), Utility.GetResourceStr("DELETEAUDITERROR"), Utility.GetResourceStr("CONFIRMBUTTON")); return; } ComfirmWindow delComfirm = new ComfirmWindow(); delComfirm.OnSelectionBoxClosed += (obj, result) => { clientAtt.RemoveAttendanceSolutionAsync(strID); }; delComfirm.SelectionBox(Utility.GetResourceStr("DELETECONFIRM"), Utility.GetResourceStr("DELETEALTER"), ComfirmWindow.titlename, Result); } } }
/// <summary> /// 校验输入的查询条件 /// </summary> /// <param name="strVacName"></param> /// <param name="strFineType"></param> private void CheckInputFilter(ref string strAttendanceSolutionID, ref string strAssignedObjectType, ref string strCheckState) { if (lkAttSol.DataContext != null) { T_HR_ATTENDANCESOLUTION ent = lkAttSol.DataContext as T_HR_ATTENDANCESOLUTION; strAttendanceSolutionID = ent.ATTENDANCESOLUTIONID; } if (cbxkAssignedObjectType.SelectedItem != null) { T_SYS_DICTIONARY entDic = cbxkAssignedObjectType.SelectedItem as T_SYS_DICTIONARY; if (!string.IsNullOrEmpty(entDic.DICTIONARYID) && !string.IsNullOrEmpty(entDic.DICTIONCATEGORY)) { strAssignedObjectType = entDic.DICTIONARYVALUE.ToString(); } } if (toolbar1.cbxCheckState.SelectedItem != null) { T_SYS_DICTIONARY entDic = toolbar1.cbxCheckState.SelectedItem as T_SYS_DICTIONARY; strCheckState = entDic.DICTIONARYVALUE.ToString(); } }
/// <summary> /// 保存 /// </summary> /// <param name="entAttSol"></param> /// <returns></returns> public bool Save(ref T_HR_ATTENDANCESOLUTION entAttSol) { bool flag = false; if (entAttSol == null) { return(false); } if (string.IsNullOrEmpty(entAttSol.ATTENDANCESOLUTIONID)) { return(false); } if (entAttendanceSolution == null) { return(false); } CheckSubmitForm(out flag); if (!flag) { return(false); } entAttSol.OVERTIMEVALID = entAttendanceSolution.OVERTIMEVALID; entAttSol.OVERTIMEPAYTYPE = entAttendanceSolution.OVERTIMEPAYTYPE; entAttSol.OVERTIMECHECK = entAttendanceSolution.OVERTIMECHECK; entAttSol.ONEDAYOVERTIMEHOURS = entAttendanceSolution.ONEDAYOVERTIMEHOURS; entAttSol.T_HR_OVERTIMEREWARD = entAttendanceSolution.T_HR_OVERTIMEREWARD; flag = true; return(flag); }
/// <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); }
/// <summary> /// 获取指定员工的实际销假天数(实际销假天数=销假天数-公休假天数-每周休息天数),实际销假时长(按小时计,实际销假合计时长=非整天销假时长-当日作息间隙休息时间+整天销假时长) /// </summary> /// <param name="strCancelLeaveId">当前销假记录的ID</param> /// <param name="strEmployeeID">员工ID</param> /// <param name="dtLeaveStartTime">销假起始时间</param> /// <param name="dtLeaveEndTime">销假截止时间</param> /// <param name="dLeaveDay">实际销假天数</param> /// <param name="dLeaveTime">实际销假时长</param> /// <param name="dLeaveTotalTime">实际销假合计时长</param> public string GetRealCancelLeaveDayByEmployeeIdAndDate(string strCancelLeaveId, string strEmployeeID, DateTime dtCancelLeaveStartTime, DateTime dtCancelLeaveEndTime, ref decimal dCancelLeaveDay, ref decimal dCancelLeaveTime, ref decimal dCancelLeaveTotalTime) { string strMsg = string.Empty; try { T_HR_EMPLOYEECANCELLEAVE entCancelLeaveRecord = GetEmployeeCancelLeaveByID(strCancelLeaveId); bool flag = false; if (entCancelLeaveRecord != null) { if (entCancelLeaveRecord.STARTDATETIME == dtCancelLeaveStartTime && entCancelLeaveRecord.ENDDATETIME == dtCancelLeaveEndTime) { if (entCancelLeaveRecord.LEAVEDAYS == null) { dCancelLeaveDay = 0; } else { dCancelLeaveDay = entCancelLeaveRecord.LEAVEDAYS.Value; } if (entCancelLeaveRecord.LEAVEHOURS == null) { dCancelLeaveTime = 0; } else { dCancelLeaveTime = entCancelLeaveRecord.LEAVEHOURS.Value; } if (entCancelLeaveRecord.TOTALHOURS == null) { dCancelLeaveTotalTime = 0; } else { dCancelLeaveTotalTime = entCancelLeaveRecord.TOTALHOURS.Value; } flag = true; } } if (flag) { return(strMsg); } DateTime dtStart, dtEnd = new DateTime(); decimal dTotalLeaveDay = 0; //起止时间的时长 DateTime.TryParse(dtCancelLeaveStartTime.ToString("yyyy-MM-dd"), out dtStart); //获取销假起始日期 DateTime.TryParse(dtCancelLeaveEndTime.ToString("yyyy-MM-dd"), out dtEnd); //获取销假截止日期 AttendanceSolutionAsignBLL bllAttendSolAsign = new AttendanceSolutionAsignBLL(); T_HR_ATTENDANCESOLUTIONASIGN entAttendSolAsign = bllAttendSolAsign.GetAttendanceSolutionAsignByEmployeeIDAndDate(strEmployeeID, dtStart); if (entAttendSolAsign == null) { //当前员工没有分配考勤方案,无法提交销假申请 return("{NONEXISTASIGNEDATTENSOL}"); } //获取考勤方案 T_HR_ATTENDANCESOLUTION entAttendSol = entAttendSolAsign.T_HR_ATTENDANCESOLUTION; decimal dWorkTimePerDay = entAttendSol.WORKTIMEPERDAY.Value; decimal dWorkMode = entAttendSol.WORKMODE.Value; int iWorkMode = 0; int.TryParse(dWorkMode.ToString(), out iWorkMode);//获取工作制(工作天数/周) List <int> iWorkDays = new List <int>(); Utility.GetWorkDays(iWorkMode, ref iWorkDays);//获取每周上班天数 OutPlanDaysBLL bllOutPlanDays = new OutPlanDaysBLL(); IQueryable <T_HR_OUTPLANDAYS> entOutPlanDays = bllOutPlanDays.GetOutPlanDaysRdListByEmployeeID(strEmployeeID); 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 >= dtStart && s.ENDDATE <= dtEnd); // 销假时间要在开始时间和结束时间之间 //注释掉没考虑某一区间的情况 //IQueryable<T_HR_OUTPLANDAYS> entWorkDays = entOutPlanDays.Where(s => s.DAYTYPE == strWorkDayType && s.STARTDATE <= dtStart && s.ENDDATE >= dtEnd); //条件过滤有四种情况 //1:在区间内 //2:大于开始时间且结束时间小于销假结束时间 //3:开始日期大于 销假开始日期且结束日期处于有效期之间 //4:开始日期小于销假开始日期且结束日期在开始时间和结束时间 IQueryable <T_HR_OUTPLANDAYS> entWorkDays = entOutPlanDays.Where(s => s.DAYTYPE == strWorkDayType && ((s.STARTDATE <= dtStart && s.ENDDATE >= dtEnd) || (s.STARTDATE >= dtStart && s.ENDDATE <= dtEnd) || (s.STARTDATE >= dtStart && s.STARTDATE <= dtEnd && s.ENDDATE >= dtEnd) || (s.STARTDATE <= dtStart && s.ENDDATE >= dtStart && s.ENDDATE <= dtEnd))); SchedulingTemplateDetailBLL bllTemplateDetail = new SchedulingTemplateDetailBLL(); IQueryable <T_HR_SCHEDULINGTEMPLATEDETAIL> entTemplateDetails = bllTemplateDetail.GetTemplateDetailRdListByAttendanceSolutionId(entAttendSol.ATTENDANCESOLUTIONID); T_HR_SCHEDULINGTEMPLATEMASTER entTemplateMaster = entTemplateDetails.FirstOrDefault().T_HR_SCHEDULINGTEMPLATEMASTER; TimeSpan ts = dtEnd.Subtract(dtStart); decimal dVacDay = 0, dWorkDay = 0; decimal dLeaveFirstDayTime = 0, dLeaveLastDayTime = 0, dLeaveFirstLastTime = 0;//请假第一天的时长,请假最后一天的时长,请假首尾两天合计时长 if (dtCancelLeaveStartTime != dtCancelLeaveEndTime) { EmployeeLeaveRecordBLL bllLeaveRecord = new EmployeeLeaveRecordBLL(); bllLeaveRecord.CalculateNonWholeDayLeaveTime(dtCancelLeaveStartTime, dtStart, entTemplateMaster, entTemplateDetails, entVacDays, entWorkDays, iWorkDays, "S", ref dLeaveFirstDayTime); bllLeaveRecord.CalculateNonWholeDayLeaveTime(dtCancelLeaveEndTime, dtEnd, entTemplateMaster, entTemplateDetails, entVacDays, entWorkDays, iWorkDays, "E", ref dLeaveLastDayTime); dLeaveFirstLastTime = dLeaveFirstDayTime + dLeaveLastDayTime; if (dtStart == dtEnd) { dLeaveFirstLastTime = dLeaveFirstLastTime - dWorkTimePerDay * 60; } } else { dLeaveFirstLastTime = dWorkTimePerDay * 60; } dTotalLeaveDay = ts.Days; if (ts.Days > 0) { //取得总的请假天数(此天数扣除了首尾两天的时间,根据请假的情况,可能包含了公休假及周假天数,扣除首尾两天的计算只适合请三天以上的) int iDays = ts.Days - 1; dTotalLeaveDay = iDays; for (int i = 0; i < iDays; i++) { int j = i + 1; bool isVacDay = false; DateTime dtCurDate = dtStart.AddDays(j); if (iWorkDays.Contains(Convert.ToInt32(dtCurDate.DayOfWeek)) == false) { dVacDay += 1; } if (entVacDays.Count() > 0) { foreach (T_HR_OUTPLANDAYS item_Vac in entVacDays) { if (item_Vac.STARTDATE.Value <= dtCurDate && item_Vac.ENDDATE >= dtCurDate) { isVacDay = true; break; } } } if (isVacDay) { dVacDay += 1; } if (entWorkDays.Count() > 0) { foreach (T_HR_OUTPLANDAYS item_Work in entWorkDays) { if (item_Work.STARTDATE.Value <= dtCurDate && item_Work.ENDDATE >= dtCurDate) { dWorkDay += 1; break; } } } } } dCancelLeaveDay = dTotalLeaveDay - dVacDay + dWorkDay; //请假天数 = 请假天数-首尾两天 - 总休假天数 + 休假调剂工作天数 decimal dTempTime = decimal.Round((dLeaveFirstLastTime) / 60, 1); if (dTempTime >= dWorkTimePerDay) { decimal dTempDay = decimal.Round(dTempTime / dWorkTimePerDay, 2); string[] strList = dTempDay.ToString().Split('.'); if (strList.Length == 2) { dCancelLeaveDay += decimal.Parse(strList[0].ToString()); dCancelLeaveTime = dTempTime - dWorkTimePerDay * decimal.Parse(strList[0].ToString()); } else { dCancelLeaveDay += dTempDay; } } else if (dTempTime < dWorkTimePerDay) { dCancelLeaveTime = dTempTime; } dCancelLeaveTotalTime = dCancelLeaveDay * dWorkTimePerDay + dCancelLeaveTime; } catch (Exception ex) { strMsg = ex.Message; Utility.SaveLog(ex.ToString()); } return(strMsg); }
/// <summary> /// 保存 /// </summary> /// <param name="entAttSol"></param> /// <returns></returns> public bool Save(ref T_HR_ATTENDANCESOLUTION entAttSol) { bool flag = false; if (entAttSol == null) { return false; } if (string.IsNullOrEmpty(entAttSol.ATTENDANCESOLUTIONID)) { return false; } if (entAttendanceSolution == null) { return false; } CheckSubmitForm(out flag); if (!flag) { return false; } entAttSol.OVERTIMEVALID = entAttendanceSolution.OVERTIMEVALID; entAttSol.OVERTIMEPAYTYPE = entAttendanceSolution.OVERTIMEPAYTYPE; entAttSol.OVERTIMECHECK = entAttendanceSolution.OVERTIMECHECK; entAttSol.ONEDAYOVERTIMEHOURS = entAttendanceSolution.ONEDAYOVERTIMEHOURS; entAttSol.T_HR_OVERTIMEREWARD = entAttendanceSolution.T_HR_OVERTIMEREWARD; flag = true; return flag; }
/// <summary> /// 效验输入基本信息内容 /// </summary> /// <param name="entAttSol"></param> private void CheckSubmitForm(ref T_HR_ATTENDANCESOLUTION entAttSol) { if (entAttSol == null) { return; } decimal dAdjustExpiredValue = 0; decimal dYouthAdjustExpiredValue = 0; if (cbxkAnnualLeaveSet.SelectedItem == null) { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ANNUALLEAVESET"), string.Format(Utility.GetResourceStr("REQUIRED"), Utility.GetResourceStr("ANNUALLEAVESET"))); //entAttSol = null; return; } else { T_SYS_DICTIONARY entDic = cbxkAnnualLeaveSet.SelectedItem as T_SYS_DICTIONARY; if (string.IsNullOrEmpty(entDic.DICTIONARYID) || string.IsNullOrEmpty(entDic.DICTIONCATEGORY) || string.IsNullOrEmpty(entDic.DICTIONARYVALUE.ToString())) { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ANNUALLEAVESET"), string.Format(Utility.GetResourceStr("REQUIRED"), Utility.GetResourceStr("ANNUALLEAVESET"))); entAttSol = null; return; } entAttSol.ANNUALLEAVESET = entDic.DICTIONARYVALUE.Value.ToString(); } if (dgLeaveSetlist.ItemsSource == null) { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("LEAVESETFORM"), string.Format(Utility.GetResourceStr("REQUIRED"), Utility.GetResourceStr("LEAVESETFORM"))); return; } //注释原因:在加班单终审时没有进行加1判断 //entAttendanceSolution.ISEXPIRED = (Convert.ToInt32(IsChecked.No) + 1).ToString(); entAttendanceSolution.ISEXPIRED = (Convert.ToInt32(IsChecked.No)).ToString(); entAttendanceSolution.YOUTHEXTEND = (Convert.ToInt32(IsChecked.No)).ToString(); entAttSol.ISEXPIRED = (Convert.ToInt32(IsChecked.No)).ToString(); entAttSol.YOUTHEXTEND = (Convert.ToInt32(IsChecked.No)).ToString(); if (cbIsExpired.IsChecked.Value == true) { //entAttendanceSolution.ISEXPIRED = (Convert.ToInt32(IsChecked.Yes) + 1).ToString(); //entAttSol.ISEXPIRED = (Convert.ToInt32(IsChecked.Yes) + 1).ToString(); entAttendanceSolution.ISEXPIRED = (Convert.ToInt32(IsChecked.Yes)).ToString(); entAttSol.ISEXPIRED = (Convert.ToInt32(IsChecked.Yes)).ToString(); decimal.TryParse(nudAdjustExpiredValue.Value.ToString(), out dAdjustExpiredValue); if (dAdjustExpiredValue <= 0) { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ADJUSTEXPIREDVALUE"), string.Format(Utility.GetResourceStr("DATECOMPARE"), Utility.GetResourceStr("ADJUSTEXPIREDVALUE"), "0")); entAttSol = null; return; } } if (cbYouthIsExpired.IsChecked.Value == true) { entAttendanceSolution.YOUTHEXTEND = (Convert.ToInt32(IsChecked.Yes)).ToString(); entAttSol.YOUTHEXTEND = (Convert.ToInt32(IsChecked.Yes)).ToString(); decimal.TryParse(nudYouthAdjustExpiredValue.Value.ToString(), out dYouthAdjustExpiredValue); if (dYouthAdjustExpiredValue <= 0) { Utility.ShowCustomMessage(MessageTypes.Error, "提示", "三八五四延长时间不能小于或等于0"); entAttSol = null; return; } } entAttSol.ADJUSTEXPIREDVALUE = dAdjustExpiredValue; entAttSol.YOUTHEXTENDVALUE = dYouthAdjustExpiredValue; }
/// <summary> /// 效验并整理提交的表单 /// </summary> /// <param name="entAttendanceSolutionDeducts"></param> /// <param name="entAttendFreeLeaves"></param> /// <returns></returns> private bool CheckAndSubmitTabForm(ref T_HR_ATTENDANCESOLUTION entAttSol, ref ObservableCollection<T_HR_ATTENDANCESOLUTIONDEDUCT> entAttendanceSolutionDeducts, ref ObservableCollection<T_HR_ATTENDFREELEAVE> entAttendFreeLeaves) { bool flag = false; CheckBasicForm(out flag); if (!flag) { return false; } flag = ucOTReward.Save(ref entAttSol); if (!flag) { return false; } flag = ucDeduct.Save(ref entAttSol, out entAttendanceSolutionDeducts); if (!flag) { return false; } flag = ucLeave.Save(ref entAttSol, out entAttendFreeLeaves); if (!flag) { return false; } flag = ucDef.Save(ref entAttSol); if (!flag) { return false; } this.DataContext = entAttSol; return flag; }
public string ModifyAttendanceSolution(T_HR_ATTENDANCESOLUTION entTemp) { using (AttendanceSolutionBLL bllAttendanceSolution = new AttendanceSolutionBLL()) { return bllAttendanceSolution.ModifyAttSol(entTemp); } }
public bool Save(ref T_HR_ATTENDANCESOLUTION entAttSol, out ObservableCollection<T_HR_ATTENDFREELEAVE> entListTemp) { bool flag = false; entListTemp = new ObservableCollection<T_HR_ATTENDFREELEAVE>(); CheckSubmitForm(ref entAttSol); if (entAttSol == null) { return false; } if (dgLeaveSetlist.ItemsSource == null) { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr("REQUIRED", "ATTENDANCEUNUSUALDEDUCT")); return false; } entLeaveTypeSets = dgLeaveSetlist.ItemsSource as ObservableCollection<T_HR_LEAVETYPESET>; entListTemp.Clear(); for (int i = 0; i < entLeaveTypeSets.Count; i++) { T_HR_ATTENDFREELEAVE entTemp = new T_HR_ATTENDFREELEAVE(); entTemp.ATTENDFREELEAVEID = System.Guid.NewGuid().ToString(); entTemp.T_HR_LEAVETYPESET = entLeaveTypeSets[i] as T_HR_LEAVETYPESET; entTemp.T_HR_ATTENDANCESOLUTION = entAttSol; entTemp.CREATEDATE = DateTime.Now; entTemp.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; entTemp.UPDATEDATE = System.DateTime.Now; entTemp.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; entListTemp.Add(entTemp); } if (entListTemp.Count > 0) { flag = true; } return flag; }
/// <summary> /// 根据主键索引,获得指定的假期记录以便查看编辑 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void clientAtt_GetAttendanceSolutionByIDCompleted(object sender, GetAttendanceSolutionByIDCompletedEventArgs e) { if (e.Error == null) { entAttendanceSolution = e.Result; if (FormType == FormTypes.Resubmit) { entAttendanceSolution.CHECKSTATE = Convert.ToInt32(CheckStates.UnSubmit).ToString(); } entAttendanceSolution.UPDATEDATE = DateTime.Now; entAttendanceSolution.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; this.DataContext = entAttendanceSolution; cbIsCurrentMonth.IsChecked = false; if (entAttendanceSolution.ISCURRENTMONTH == (Convert.ToInt32(IsChecked.Yes) + 1).ToString()) { cbIsCurrentMonth.IsChecked = true; } //如果ISAUTOIMPORTPUNCH=0 表示不自动导入; =1表示自动导入 if (entAttendanceSolution.ISAUTOIMPORTPUNCH=="0") { this.RadN.IsChecked = true; } else { this.RadY.IsChecked = true; } if (entAttendanceSolution.CHECKSTATE != Convert.ToInt32(CheckStates.UnSubmit).ToString()) { UnEnableFormControl(); this.ucOTReward.IsEnabled = false; this.ucDeduct.IsEnabled = false; this.ucDef.IsEnabled = false; this.ucLeave.IsEnabled = false; } RefreshUI(RefreshedTypes.AuditInfo); SetToolBar(); } else { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr(e.Error.Message)); } }
/// <summary> /// 获取考勤方案对应的考勤异常配置信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void clientAtt_GetAttendanceSolutionDeductRdListByAttSolIDCompleted(object sender, GetAttendanceSolutionDeductRdListByAttSolIDCompletedEventArgs e) { if (e.Error == null) { entAttendanceSolutionDeducts = e.Result; if (entAttendanceSolutionDeducts == null) { entAttendanceSolutionDeducts = new ObservableCollection<T_HR_ATTENDANCESOLUTIONDEDUCT>(); } if (entAttendanceSolutionDeducts.Count > 0) { entAttendanceSolution = new T_HR_ATTENDANCESOLUTION(); entAttendanceSolution = entAttendanceSolutionDeducts[0].T_HR_ATTENDANCESOLUTION; nudLostCardTimes.Value = double.Parse(entAttendanceSolution.ALLOWLOSTCARDTIMES.Value.ToString()); nudLateMaxMinute.Value = double.Parse(entAttendanceSolution.ALLOWLATEMAXMINUTE.Value.ToString()); nudLateMaxTimes.Value = double.Parse(entAttendanceSolution.ALLOWLATEMAXTIMES.Value.ToString()); entAttendanceDeductMasters = new ObservableCollection<T_HR_ATTENDANCEDEDUCTMASTER>(); foreach (T_HR_ATTENDANCESOLUTIONDEDUCT item in entAttendanceSolutionDeducts) { entAttendanceDeductMasters.Add(item.T_HR_ATTENDANCEDEDUCTMASTER); } if (entAttendanceDeductMasters.Count > 0) { dgAttendanceDeductlist.ItemsSource = entAttendanceDeductMasters; } } this.DataContext = entAttendanceSolutionDeducts; } else { Utility.ShowCustomMessage(MessageTypes.Error, Utility.GetResourceStr("ERROR"), Utility.GetResourceStr(e.Error.Message)); } }
public string ModifyAttendanceSolutionAndChangeRelation(T_HR_ATTENDANCESOLUTION entTemp, List<T_HR_ATTENDANCESOLUTIONDEDUCT> entAttendanceSolutionDeducts, List<T_HR_ATTENDFREELEAVE> entAttendFreeLeaves) { using (AttendanceSolutionBLL bllAttendanceSolution = new AttendanceSolutionBLL()) { return bllAttendanceSolution.ModifyAndChangeRelation(entTemp, entAttendanceSolutionDeducts, entAttendFreeLeaves); } }
/// <summary> /// 计算外出确认时长 /// </summary> /// <param name="strEmployeeId"></param> /// <param name="dtOTStart"></param> /// <param name="dtOTEnd"></param> /// <param name="dOverTimeHours"></param> /// <returns></returns> public string CalculateOverTimeHours(string strEmployeeId, DateTime dtOTStart, DateTime dtOTEnd, ref string dOverTimeHours) { string strRes = string.Empty; decimal dTotalOverTimeHours = 0; DateTime dtStart, dtEnd = new DateTime(); dtStart = dtOTStart; dtEnd = dtOTEnd; //DateTime.TryParse(dtOTStart.ToString("yyyy-MM-dd"), out dtStart); //获取请假起始日期 //DateTime.TryParse(dtOTEnd.ToString("yyyy-MM-dd"), out dtEnd); //获取请假截止日期 AttendanceSolutionAsignBLL bllAttendSolAsign = new AttendanceSolutionAsignBLL(); T_HR_ATTENDANCESOLUTIONASIGN entAttendSolAsign = bllAttendSolAsign.GetAttendanceSolutionAsignByEmployeeIDAndDate(strEmployeeId, dtStart); if (entAttendSolAsign == null) { //当前员工没有分配考勤方案,无法提交请假申请 return("没有找到员工分配的考勤方案!"); } //获取考勤方案 T_HR_ATTENDANCESOLUTION entAttendSol = entAttendSolAsign.T_HR_ATTENDANCESOLUTION; decimal dWorkTimePerDay = entAttendSol.WORKTIMEPERDAY.Value; decimal dWorkMode = entAttendSol.WORKMODE.Value; int iWorkMode = 0; int.TryParse(dWorkMode.ToString(), out iWorkMode);//获取工作制(工作天数/周) List <int> iWorkDays = new List <int>(); Utility.GetWorkDays(iWorkMode, ref iWorkDays); OutPlanDaysBLL bllOutPlanDays = new OutPlanDaysBLL(); IQueryable <T_HR_OUTPLANDAYS> entOutPlanDays = bllOutPlanDays.GetOutPlanDaysRdListByEmployeeID(strEmployeeId); 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 >= dtStart && s.ENDDATE <= dtEnd); SchedulingTemplateDetailBLL bllTemplateDetail = new SchedulingTemplateDetailBLL(); IQueryable <T_HR_SCHEDULINGTEMPLATEDETAIL> entTemplateDetails = bllTemplateDetail.GetTemplateDetailRdListByAttendanceSolutionId(entAttendSol.ATTENDANCESOLUTIONID); T_HR_SCHEDULINGTEMPLATEMASTER entTemplateMaster = entTemplateDetails.FirstOrDefault().T_HR_SCHEDULINGTEMPLATEMASTER; dtEnd = new DateTime(dtEnd.Year, dtEnd.Month, dtEnd.Day, dtEnd.Hour, dtEnd.Minute, 0); dtStart = new DateTime(dtStart.Year, dtStart.Month, dtStart.Day, dtStart.Hour, dtStart.Minute, 0); TimeSpan ts = dtEnd.Subtract(dtStart); int iOTDays = ts.Days; string strMsg = string.Empty; dTotalOverTimeHours = iOTDays * dWorkTimePerDay + ts.Hours; if (dTotalOverTimeHours > 0) { dOverTimeHours = Math.Round(dTotalOverTimeHours, 0) + "小时"; } if (ts.Minutes > 0) { dOverTimeHours = dOverTimeHours + ts.Minutes + "分"; } return(strRes + strMsg); }
public bool Save(out T_HR_ATTENDANCESOLUTION entAttSol) { bool flag = false; entAttSol = new T_HR_ATTENDANCESOLUTION(); CheckSubmitForm(out flag); if (!flag) { entAttSol = null; return false; } entAttSol = Utility.Clone(entAttendanceSolution); flag = true; return flag; }