📄 submitotreq.aspx.cs
字号:
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 + -