⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 submitotreq.aspx.cs

📁 基于.net(c#+sql)人事管理系统
💻 CS
📖 第 1 页 / 共 2 页
字号:
			DateTime dtEnd = DateTime.Parse(strEndDate);


			//下面进行总时数统计:

			int iTotalHours = 0;
			bool bValid = true;

			//如果开始时间大于或等于结束时间,即加班时间非法。
			if ( DateTime.Compare(dtStart, dtEnd) >= 0 ) 
			{
				bValid = false;
			}

			if ( dtStart.AddDays(1) < dtEnd )
			{
				//超过一天,加班时间非法。
				bValid = false;
			}
			else
			{
				if ( dtStart.DayOfWeek != DayOfWeek.Saturday && dtStart.DayOfWeek != DayOfWeek.Sunday &&  !IsHoliday(dtStart) )
				{
					//必须是工作日加班方可继续执行:

					if ( dtStart.Day != dtEnd.Day )
					{
						//起始时间和结束时间不在同一天。

						if ( int.Parse(cmbEndTime.SelectedValue) > 9 )
						{
							//中间跨工作时间,无效。
							bValid = false;
						}

						if ( int.Parse(cmbStartTime.SelectedValue) < 18 )
						{
							//中间跨工作时间,无效。
							bValid = false;
						}

						//计算得到加班的小时数。
						iTotalHours = 24 - int.Parse(cmbStartTime.SelectedValue) + int.Parse(cmbEndTime.SelectedValue);
					}

					else
					{
						//起始时间和结束时间在同一天。

						if ( int.Parse(cmbStartTime.SelectedValue) < 9 && int.Parse(cmbEndTime.SelectedValue) > 18 )
						{
							//中间跨工作时间,无效。
							bValid = false;
						}

						//计算得到加班的小时数。
						iTotalHours = int.Parse(cmbEndTime.SelectedValue) - int.Parse(cmbStartTime.SelectedValue);

					}
				}
				else
				{
					//双休日或国定假日加班,加班时间可以是早上9点到下午18点。

					if ( dtStart.Day != dtEnd.Day )
					{
						//起始时间和结束时间不在同一天,加班时间非法。
						bValid = false;
					}
					else
					{
						//起始时间和结束时间在同一天。

						iTotalHours = int.Parse(cmbEndTime.SelectedValue) - int.Parse(cmbStartTime.SelectedValue);

						//中间跨午饭时间,减一个小时。
						int iStartHour, iEndHour;

						iStartHour = int.Parse(cmbStartTime.SelectedValue);
						if ( iStartHour <= 12 )
						{
							iStartHour += 1;
						}

						iEndHour = int.Parse(cmbEndTime.SelectedValue);
						if ( iEndHour <= 12 )
						{
							iEndHour += 1;
						}


						//计算得到加班的小时数。
						iTotalHours = iEndHour - iStartHour;

					}

				}

			}


			//如果加班时间非法,则将返回的小时数置 0。
			if ( !bValid )
			{
				iTotalHours = 0;
			}

			//返回总小时数。
			return iTotalHours;
		}
		/// <summary>
		/// 该函数计算某指定日期是否为国定假日。
		/// 参数 dt:指定的日期。
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>	
		bool IsHoliday(DateTime dt )
		{

			int iCount;
			bool bIsHoliday = false;

			//指定日期和数组 alHolidayL 中保存的国定假日进行比较,相同则说明该日期为国定假日。
			for ( iCount = 0; iCount <= alHolidayL.Count - 1; iCount++ )
			{
				if ( dt.ToString("MM/dd") == ((DateTime)(alHolidayL[iCount])).ToString("MM/dd") )
				{
					bIsHoliday = true;
				}
			}

			//指定日期和数组 alHolidayR 中保存的国定假日进行比较,相同则说明该日期为国定假日。
			for ( iCount = 0; iCount <= alHolidayR.Count - 1; iCount++ )
			{
				if ( dt.ToString("MM/dd") == ((DateTime)(alHolidayR[iCount])).ToString("MM/dd") )
				{
					bIsHoliday = true;
				}
			}

			return bIsHoliday;
		}
		/// <summary>
		/// 当用户对“开始时间”日历控件进行操作时,该方法重新计算国定假日。
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void cldStartDate_SelectionChanged(object sender, System.EventArgs e)
		{
			ReCalculateHoliday();
			FillHourList(cmbStartTime, cldStartDate.SelectedDate, 0);
		
		}
		/// <summary>
		/// 当用户对“结束时间”日历控件进行操作时,该方法重新计算国定假日。
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void cldEndDate_SelectionChanged(object sender, System.EventArgs e)
		{
			ReCalculateHoliday();
			FillHourList(cmbEndTime, cldEndDate.SelectedDate, 1);
		
		}
		/// <summary>
		/// 当用户单击“提交”按钮时,该方法将加班请求保存到数据库中。
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void btnSubmit_Click(object sender, System.EventArgs e)
		{
			int iTotalHours;

			lblTotalHours.Text = "";

			//计算用户加班的总小时数。
			iTotalHours = CalculateHours();

			//如果加班时间非法,则显示出错信息并退出。
			if ( iTotalHours <= 0 )
			{
				lblErrorMsg.Text = "请检查输入日期的正确性";
				return;

			}

			//检查“加班事由”文本框是否为空,是则显示出错信息并退出。
			if ( txtReason.Text.Trim() == "" )
			{
				lblErrorMsg.Text = "加班事由不能为空";
				return;
			}

			//获取加班审批者的员工编号。
			int iApproverID;
			iApproverID = int.Parse(cmbApproverList.SelectedItem.Value);


			//拼接加班的开始时间和结束字符串。
			string strStartDate, strEndDate;
			strStartDate = cldStartDate.SelectedDate.ToString("yyyy-MM-dd ") + cmbStartTime.SelectedItem.ToString();
			strEndDate = cldEndDate.SelectedDate.ToString("yyyy-MM-dd ") + cmbEndTime.SelectedItem.ToString();

			//将时间字符串转换成日期数据类型。
			DateTime dtStart = DateTime.Parse(strStartDate);
			DateTime dtEnd = DateTime.Parse(strEndDate);

			int iType;
			if ( rdoOptionList.Items[0].Selected )
			{
				//加班折算成年假
				iType = 1;
			}
			else
			{
				//加班折算成津贴
				iType = 2;
			}

			//向数据库提交该加班请求。
			int iRetValue;
			int iEmpID;
			iEmpID= int.Parse ((string)(Session["EmployeeID"]));
			iRetValue = DBUtils.SubmitOTReq.AddOTReq(iEmpID, iType, DateTime.Now, dtStart, dtEnd, iApproverID, iTotalHours, txtReason.Text.Trim());


			if ( iRetValue == (int)DBResult.Success )
			{
				//如果数据库操作成功,则显示提示信息。

				lblErrorMsg.Text = "";
				Response.Write("<script>alert('已成功提交加班记录!')</script>");
			}
			else
			{
				//如果数据库操作失败,一般是重复提交相同的加班时间段引起的,显示出错信息并退出。

				lblErrorMsg.Text = "提交加班记录失败!";
			}
		}
		/// <summary>
		/// 该方法将按加班日期填充加班小时下拉框,如果是工作日,则可选时间是下午18点到次日的9点;
		///如果是双休日或假日,则可选时间是上午9点到下午18点。
		///参数 cmbList:要填充的下拉框。
		///参数 dt:加班所在的日期,以此来判定是否为工作日。
		///参数 iOffset:偏移量,一般取 0 或 1,为 1 即表示结束时间要比开始时间晚一个小时。。
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		void FillHourList( DropDownList cmbList , DateTime dt, int iOffset )
		{

			int iHour;

			if ( dt.DayOfWeek != DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday && !IsHoliday(dt) )
			{
				//判定加班日期为工作日

				//清空下拉框。
				cmbList.Items.Clear();

				//从 0 点到上午 8 或 9 点依次填充下拉框。
				for ( iHour = 0; iHour<= 8 + iOffset; iHour++ )
				{
					cmbList.Items.Add(iHour.ToString() + ":00");
					cmbList.Items[cmbList.Items.Count - 1].Value = iHour.ToString();
				}

				//从 18 点到 23 点依次填充下拉框。
				for ( iHour = 18 + iOffset; iHour <= 23; iHour++ )
				{
					cmbList.Items.Add(iHour.ToString() + ":00");
					cmbList.Items[cmbList.Items.Count - 1].Value = iHour.ToString();
				}
			}
			else
			{
				//判定加班日期为双休日或国定假日

				//清空下拉框。
				cmbList.Items.Clear();

				//从上午 9 点到下午 18 点依次填充下拉框。
				for (iHour = 9 + iOffset; iHour <= 17 + iOffset; iHour++ )
				{
					cmbList.Items.Add(iHour.ToString() + ":00");
					cmbList.Items[cmbList.Items.Count - 1].Value = iHour.ToString();
				}
			}
		}
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -