📄 submitlvreq.aspx.cs
字号:
//该过程调用 ReCalculateHoliday() 函数,计算日历控件当月所包含的国定假日。
this.cldEndDate.SelectedDate = e.NewDate;
this.lblEndDay.Text = this.cldEndDate.SelectedDate.ToShortDateString();
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 || this.IsHoliday(this.cldStartDate.SelectedDate))
)
)
{
//开始日期大于结束日期;
//或者开始日期与结束日期相等,但开始时间大于结束时间或者该日是国定假日或者是周末
iHours = 0;
}
else
{
//正确的选择请假时间
if((this.cldStartDate.SelectedDate == this.cldEndDate.SelectedDate))
{
//开始日期与结束日期是同一天,且不是国定假日、且结束时间大于开始时间、且不是周末
iHours = iEndTime - iStartTime;
}
else
{
//开始日期和结束日期不是同一天,且结束日期晚于开始日期
//计算开始日期当天的小时数
if(!this.IsHoliday(this.cldStartDate.SelectedDate))
{
iHours += 8-iStartTime;
}
//计算结束日期当天的小时数
if(!this.IsHoliday(this.cldEndDate.SelectedDate))
{
iHours += iEndTime;
}
DateTime dt = this.cldStartDate.SelectedDate .AddDays(1);
while(dt<this.cldEndDate.SelectedDate)
{
if(!this.IsHoliday(dt))
{
iHours += 8;
}
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>");
}
this.lblTotalHours.Text = iHours.ToString();
}
//将请假请求保存到数据库中
private void btnSubmit_Click(object sender, System.EventArgs e)
{
//计算请假小时数
int iHours = this.CalculateHours();
//获取请假者编号
int iEmpID = Convert.ToInt32(Session["EmployeeID"]);
//获取提交时间
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;
DateTime dtEnd = Convert.ToDateTime(strEndTime);
//获取审批者编号
int iApproverID = 0;
//从数据库中获取常规请假天数
int iDays = 0;
int isSuccess=DBUtils.SubmitLvReq.GetNormalLeaveDays(ref iDays);
int NormalHours = 0;
if(isSuccess == (int)DBResult.Success)
{
//成功从数据库中获取常规请假天数
NormalHours = iDays * 8;
}
if(iHours < NormalHours)
{
//常规请假,可由部门经理审批
iApproverID = Convert.ToInt32(this.cmbApproverList.SelectedValue);
}
else
{
//获取总经理的编号
try
{
DBUtils.Employee.GetCEOInfo(ref iApproverID);
}
catch(Exception ex)
{
this.lblErrorMsg.Text = "请假小时超过常规请假小时数,应交总经理审批";
this.lblErrorMsg.Visible = true;
iApproverID = Convert.ToInt32(this.cmbApproverList.Items[1]);
}
}
//获取请假事由
string strReason = this.txtReason.Text.Trim();
//可用的年假小时数
int MaxHours = Convert.ToInt32(this.lblALhours.Text.Trim());
if( dtStart<System.DateTime.Now )
{
Response.Write("<script>alert('请假日期不正确')</script>");
this.lblErrorMsg.Text = "请假日期不正确";
this.lblErrorMsg.Visible = true;
}
else
{
if(iHours > MaxHours)
{
//所请的小时数超过可用的年假小时数
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.SubmitLvReq.QueryHistoryReq(iEmpID,dtStart.ToString(),dtEnd.ToString(),ref dsHistoryResult);
if(iHasRecord == (int)DBResult.Success && dsHistoryResult.Tables[0].Rows.Count != 0)
{
//这段时间内已经有请假记录,不能再请假了
Response.Write("<script>alert('您已经请假了,请等待审批')</script>");
}
else
{
//所选择的时间内还没有请假记录,允许申请请假
//将请假请求保存到数据库中
DBUtils.SubmitLvReq.AddLeaveReq(iEmpID,dtSubmit,dtStart,dtEnd,iApproverID,iHours,strReason);
//更新可用请假小时数
int lastHours = Convert.ToInt32(this.lblALhours.Text) - iHours;
this.lblALhours.Text = lastHours.ToString();
Response.Write("<script>alert('提交请假成功,请等待审批')</script>");
}
}
catch(Exception ex)
{
//将请假请求保存到数据库中出现异常
this.lblErrorMsg.Text = "提交请假记录失败";
this.lblErrorMsg.Visible = true;
}
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -