📄 submitotreq.aspx.cs
字号:
if( e.Day.Date.Date == dt.Date )
{
e.Cell.BackColor = System.Drawing.Color.DarkGreen;
e.Cell.Font.Bold = true;
break;
}
}
}
}
//选定开始日期变化时,该日相应的加班时间段也应该改变
private void cldStartDate_SelectionChanged(object sender, System.EventArgs e)
{
//重新绑定开始日期可加班的时间段
this.BindStartTimeList();
}
//选定结束日期变化时,该日相应的加班时间段也应该改变
private void cldEndDate_SelectionChanged(object sender, System.EventArgs e)
{
//重新绑定结束日期可加班的时间段
this.BindEndTimeList();
}
/// <summary>
/// 当用户改变“开始时间”日历控件的当前月份时,该方法将重新设定日历控件的选中日期,并重新计算当前月份的国定假日。
/// </summary>
/// <param name="sender">发送该事件的对象</param>
/// <param name="e">网页事件的基本参数</param>
private void cldStartDate_VisibleMonthChanged(object sender, System.Web.UI.WebControls.MonthChangedEventArgs e)
{
//该过程调用 ReCalculateHoliday() 函数,计算日历控件当月所包含的国定假日。
this.cldStartDate.SelectedDate = e.NewDate;
ReCalculateHoliday();
}
/// <summary>
/// 当用户改变“结束时间”日历控件的当前月份时,该方法将重新设定日历控件的选中日期,并重新计算当前月份的国定假日。
/// </summary>
/// <param name="sender">发送该事件的对象</param>
/// <param name="e">网页事件的基本参数</param>
private void cldEndDate_VisibleMonthChanged(object sender, System.Web.UI.WebControls.MonthChangedEventArgs e)
{
//该过程调用 ReCalculateHoliday() 函数,计算日历控件当月所包含的国定假日。
this.cldEndDate.SelectedDate = e.NewDate;
ReCalculateHoliday();
}
/// <summary>
/// 计算某指定日期是否为国定假日
/// </summary>
/// <param name="dt">指定的日期</param>
/// <returns>返回是否是国定假日的布尔值,是国定假日返回true,否则返回false</returns>
private bool IsHoliday( DateTime dt )
{
//查询 指定日期所在月份的所有国定假日
ArrayList alHoliday = new ArrayList();
int iHolidays = DBUtils.SubmitLvReq.GetHoliday(dt,ref alHoliday);
bool isHoliday = false;
if(dt.DayOfWeek == DayOfWeek.Saturday ||dt.DayOfWeek ==DayOfWeek.Sunday )
{
//指定日期为周末
isHoliday = true;
}
else
{
if(iHolidays == (int)DBResult.Success && alHoliday.Count != 0)
{
//数据库操作正确且该月存在国定假日
//判断指定日期是否是国定假日
foreach(DateTime dtHoliday in alHoliday)
{
if(dt.ToShortDateString() == dtHoliday.ToShortDateString())
{
//是国定假日或者周末
isHoliday = true;
break;
}
}
}
}
return isHoliday;
}
/// <summary>
/// 根据用户选定的加班时间,返回加班的总小时数,如果加班日期不正确,则返回 0
/// </summary>
/// <returns>返回加班的总小时数</returns>
private int CalculateHours()
{
//调用 ReCalculateHoliday() 函数,
//计算日历控件当月所包含的国定假日,还调用IsHoliday(dtStart) 函数,判断指定日期是否是国定假日。
//查询开始时间 月的国定假日
ArrayList alHolidayL = new ArrayList();
int isStartHolidays = DBUtils.SubmitLvReq.GetHoliday(cldStartDate.SelectedDate,ref alHolidayL);
//查询结束时间 月的国定假日
ArrayList alHolidayR = new ArrayList();
int isEndHolidays = DBUtils.SubmitLvReq.GetHoliday(cldEndDate.SelectedDate,ref alHolidayR);
//创建一个变量用来存储加班小时数
int iHours = 0;
//开始日期的开始时间
int iStartTime = Convert.ToInt32(this.cmbStartTime.SelectedValue);
//结束日期的结束时间
int iEndTime = Convert.ToInt32(this.cmbEndTime.SelectedValue);
//判断加班时间选择是否正确
if((this.cldStartDate.SelectedDate > this.cldEndDate.SelectedDate)
||((this.cldStartDate.SelectedDate == this.cldEndDate.SelectedDate)&&(iStartTime > iEndTime )))
{
//选择了错误的加班时间
//开始日期大于结束日期;
//或者开始日期与结束日期相等,但开始时间大于结束时间
iHours = 0;
}
else
{
//正确的选择加班时间
if((this.cldStartDate.SelectedDate == this.cldEndDate.SelectedDate))
{
//开始日期与结束日期是同一天,且不是国定假日、且结束时间大于开始时间、且不是周末
iHours = iEndTime - iStartTime;
}
else
{
//开始日期和结束日期不是同一天,且结束日期晚于开始日期
//计算开始日期当天的小时数
if(this.IsHoliday(this.cldStartDate.SelectedDate))
{
//当天是节假日,最多可能加班小时数为9小时
iHours += 9-iStartTime;
}
else
{
//当天是工作日,最多可能加班小时数为15小时
iHours += 15-iStartTime;
}
//计算结束日期当天的小时数
iHours += iEndTime;
DateTime dt = this.cldStartDate.SelectedDate .AddDays(1);
while(dt<this.cldEndDate.SelectedDate)
{
if(this.IsHoliday(dt))
{
//节假日,每天要加班9小时
iHours += 9;
}
else
{
//工作日,每天要加班15小时
iHours +=15;
}
dt = dt.AddDays(1);
}
}
}
//返回加班小时数
return iHours;
}
//点击计算加班时间
private void btnCalculate_Click(object sender, System.EventArgs e)
{
int iHours = this.CalculateHours();
if(iHours == 0)
{
//加班日期不正确
Response.Write("<script>alert('申请加班日期不正确,请重试!')</script>");
}
else
{
//加班时间正确,显示加班总小时数
this.lblTotalHours.Text = iHours.ToString();
}
}
//将加班请求记录保存到数据库中
private void btnSubmit_Click(object sender, System.EventArgs e)
{
//计算加班小时数
int iHours = this.CalculateHours();
//获取加班者编号
int iEmpID = Convert.ToInt32(Session["EmployeeID"]);
//获取加班折算方法
int iType = Convert.ToInt32(this.rdoOptionList.SelectedValue);
//获取提交时间
DateTime dtSubmit = System.DateTime.Now;
//获取开始加班时间
string strStartTime = this.cldStartDate.SelectedDate.ToShortDateString().ToString() + " "+ this.cmbStartTime.SelectedItem.Text;
DateTime dtStart = Convert.ToDateTime(strStartTime);
//获取结束时间
string strEndTime = this.cldEndDate.SelectedDate.ToShortDateString().ToString() +" " + this.cmbEndTime.SelectedItem.Text;
if(this.cmbEndTime.SelectedItem.Text == "24:00")
{
//如果结束时间为“24:00”,应转化为次日的0:00来计算
strEndTime = this.cldEndDate.SelectedDate.AddDays(1).ToString();
}
DateTime dtEnd = Convert.ToDateTime(strEndTime);
//获取审批者编号
int iApproverID = Convert.ToInt32(this.cmbApproverList.SelectedValue);
//获取加班事由
string strReason = this.txtReason.Text.Trim();
if( dtStart<System.DateTime.Now )
{
Response.Write("<script>alert('加班日期不正确')</script>");
this.lblErrorMsg.Text = "加班日期不正确";
this.lblErrorMsg.Visible = true;
}
else
{
if(iHours == 0)
{
//加班日期不正确
this.lblErrorMsg.Text = "加班日期不正确";
this.lblErrorMsg.Visible = true;
}
else
{
if(strReason == "")
{
//加班事由为空
this.lblErrorMsg.Text = "加班事由不能为空";
this.lblErrorMsg.Visible = true;
}
else
{
try
{
//判断所选择的时间段内是否已经申请了加班,如果已经申请了则不能再申请
//创建一个DataSet对象存储历史记录
DataSet dsHistoryResult = new DataSet();
//查询所选择的时间段内的历史记录
int iHasRecord = DBUtils.SubmitOTReq.QueryHistoryReq(iEmpID,iType,dtStart.ToString(),dtEnd.ToString(),ref dsHistoryResult);
if(iHasRecord == (int)DBResult.Success && dsHistoryResult.Tables[0].Rows.Count != 0)
{
//这段时间内已经有加班记录,不能再加班了
Response.Write("<script>alert('您已经申请了加班,请等待审批')</script>");
}
else
{
//所选择的时间内还没有加班记录,允许申请加班
//将加班请求保存到数据库中
DBUtils.SubmitOTReq.AddOTReq(iEmpID,iType,dtSubmit,dtStart,dtEnd,iApproverID,iHours,strReason);
Response.Write("<script>alert(' 您已经成功申请了 "+iHours+" 小时的加班,请等待审批')</script>");
}
}
catch(Exception ex)
{
//将加班请求保存到数据库中出现异常
this.lblErrorMsg.Text = "提交加班记录失败";
this.lblErrorMsg.Visible = true;
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -