using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.Common; using Wellan.Data; using Wellan.Common; using System.Text; using System.IO; using System.Drawing; /// /// 人員出缺勤紀錄 /// 請假處理 /// 加班處理 /// 電話費處理 /// 油料費處理 /// 差勤處理 /// public partial class forms_worker_fmRpar : Wellan.Web.UI.WUserControlBase { private string _RPPYN = ""; private string _RPNUM1 = ""; private string _RPNUM2 = ""; private string _RPRDT1 = ""; private string _RPRDT2 = ""; private int _YY = 0; private string select = @"SELECT TRDAT, TRMOD, TRUSR, RPREN, RPNUM, RAITM, RPCNM, RPPYN, RPRDT, RPEDT, RPTYP, FLOOR(RPTCT / 60) AS RPTCT, RPFTR, RPDOC, APPNO, RPAPP, RPAPD, RPAPU, RPADT, RPAPN, RPANO, RPAGT, RPRTM, RPETM, RPUST, RPTC1, RPTC2, RPTC3, RPRSN, RPAGM, ISNULL(RPTCT - FLOOR(RPTCT / 60) * 60, 0) AS RPTMT"; private string from = " FROM RPAR "; private string where = " WHERE 1=1 "; private FormView RPARForm; private Panel RPARPanel; protected string rparType; private BPSN_DAC bpsn; private int 可用補休; private int 可用特休; private RparDAC rparDao; private RyerDAC ryerDao; private DbConnection conn; private string _RPREN; private string oldRPTYP; private GetData _getData; private DateTime 關帳日期; protected bool OverTimeToMinute; protected void Page_Load(object sender, EventArgs e) { _RPNUM1 = ViewState["RPNUM1"] != null ? ViewState["RPNUM1"].ToString() : ""; _RPNUM2 = ViewState["RPNUM2"] != null ? ViewState["RPNUM2"].ToString() : ""; _RPRDT1 = ViewState["RPRDT1"] != null ? ViewState["RPRDT1"].ToString() : ""; _RPRDT2 = ViewState["RPRDT2"] != null ? ViewState["RPRDT2"].ToString() : ""; //if (IsPostBack) //{ // RPARGrid.DataBind(); //} } protected override void OnInit(EventArgs e) { base.OnInit(e); dsRPARForm.ConnectionString = ConnectionString; dsRPAR_RPTYP.ConnectionString = ConnectionString; rparDao = new RparDAC(Query); ryerDao = new RyerDAC(Query); _RPPYN = GetStringParam("RPPYN"); rparType = GetStringParam("type"); dsRPAR_RPTYP.SelectParameters["BSCLS"].DefaultValue = rparType + "%"; _YY = GetIntParam("YY"); switch (rparType) { case RPAR_TYPE.T0_請假: RPARForm = RPARForm0; RPARPanel = Panel0; break; case RPAR_TYPE.T1_加班: RPARForm = RPARForm1; RPARPanel = Panel1; break; case RPAR_TYPE.T21_電話費: RPARForm = RPARForm21; RPARPanel = Panel21; break; case RPAR_TYPE.T22_油料費: RPARForm = RPARForm22; RPARPanel = Panel22; break; case RPAR_TYPE.T3_出差: RPARForm = RPARForm3; RPARPanel = Panel3; break; } if (_YY > 0) { txtYY.Text = _YY.ToString(); ddlRPPYN.DataSource = new BpaaDAC().GetBpaaWithTY(_YY + WGuard1.CY11); ddlRPPYN.DataBind(); ListItem item = ddlRPPYN.Items.FindByValue(_RPPYN); if (item != null) item.Selected = true; } else { txtYY.Focus(); } GetGridViewRowColor(RPARGrid); if (_RPPYN.CompareTo("000000001") == 0) { RegisterLookupEvent(this, "btnRPAR_RPNUM1_WQRY", "txtRPAR_RPNUM1", "txtRPAR_RPNUM1,lbRPAR_RPNUM1X", "BPSN1", "NOT EXISTS (SELECT RANUM FROM RASN WHERE RANUM=BPENO AND RAEDT IS NULL)"); RegisterLookupEvent(this, "btnRPAR_RPNUM2_WQRY", "txtRPAR_RPNUM2", "txtRPAR_RPNUM2,lbRPAR_RPNUM2X", "BPSN1", "NOT EXISTS (SELECT RANUM FROM RASN WHERE RANUM=BPENO AND RAEDT IS NULL)"); } else { RegisterLookupEvent(this, "btnRPAR_RPNUM1_WQRY", "txtRPAR_RPNUM1", "txtRPAR_RPNUM1,lbRPAR_RPNUM1X", "BPSN1", "EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + _RPPYN + "' AND RANUM=BPENO)"); RegisterLookupEvent(this, "btnRPAR_RPNUM2_WQRY", "txtRPAR_RPNUM2", "txtRPAR_RPNUM2,lbRPAR_RPNUM2X", "BPSN1", "EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + _RPPYN + "' AND RANUM=BPENO)"); } RegisterCalendarEvent(this, "btnRPAR_RPRDT1_DATE", "txtRPAR_RPRDT1"); RegisterCalendarEvent(this, "btnRPAR_RPRDT2_DATE", "txtRPAR_RPRDT2"); MultiView1.Visible = _RPPYN != ""; // 取得關帳日期 if (_RPPYN != "") { if (_RPPYN.CompareTo("000000001") != 0) { _getData = new GetData(); _getData.Query = Query; BPAARecord bpaaRecord = new BPAARecord(); DataTable bpaa = _getData.GetBPAA_BPPYN(_RPPYN); if (bpaa.Rows.Count == 0) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "無此專案"; return; } bpaaRecord.FillRecord(bpaa.Rows[0]); // 關帳日期 = bpaaRecord.BPMSD.AddMonths(1).AddDays(-1); 關帳日期 = bpaaRecord.BPMSD; OverTimeToMinute = bpaaRecord.BPOTT == "2"; } } Search(); } // 查詢按鈕 protected void btnSearch_Click(object sender, EventArgs e) { ViewState["RPNUM1"] = txtRPAR_RPNUM1.Text; ViewState["RPNUM2"] = txtRPAR_RPNUM2.Text; ViewState["RPRDT1"] = txtRPAR_RPRDT1.Text; ViewState["RPRDT2"] = txtRPAR_RPRDT2.Text; _RPNUM1 = txtRPAR_RPNUM1.Text; _RPNUM2 = txtRPAR_RPNUM2.Text; _RPRDT1 = txtRPAR_RPRDT1.Text; _RPRDT2 = txtRPAR_RPRDT2.Text; if (_RPNUM1.Length == 0 && _RPNUM2.Length == 0 && _RPRDT1.Length == 0 && _RPRDT2.Length == 0) { lbMessage.Text = GetString("NOSRHCOND"); lbMessage.Visible = true; } else { MultiView1.ActiveViewIndex = 1; Search(); RPARGrid.PageIndex = 0; RPARGrid.SelectedIndex = 0; RPARGrid.DataBind(); } } // 查詢取消按鈕 protected void btnCancel_Click(object sender, EventArgs e) { MultiView1.ActiveViewIndex = 1; } // 查詢動作 private new void Search() { if (MultiView1.ActiveViewIndex == 1) { where = " WHERE ((RPAPN IS NULL) OR ((RPAPN<>'D') AND (RPAPN=RPANO))) "; // where = " WHERE 1=1 "; switch (rparType) { case RPAR_TYPE.T0_請假: WLabel1.Text = GetString("FMRPAR00.NAME"); where += " AND RPTYP LIKE '0%' "; RPARForm = RPARForm0; RPARPanel = Panel0; RPARGrid.Columns[3].HeaderText = "開始日期"; (RPARGrid.Columns[3] as BoundField).DataFormatString = "{0:yyyyMMdd}"; RPARGrid.Columns[4].HeaderText = "結束日期"; RPARGrid.Columns[4].Visible = true; RPARGrid.Columns[6].HeaderText = "時數"; RPARGrid.Columns[6].Visible = true; RPARGrid.Columns[7].Visible = false; break; case RPAR_TYPE.T1_加班: WLabel1.Text = GetString("FMRPAR01.NAME"); where += " AND RPTYP LIKE '1%' "; RPARForm = RPARForm1; RPARPanel = Panel1; RPARGrid.Columns[3].HeaderText = "日期"; (RPARGrid.Columns[3] as BoundField).DataFormatString = "{0:yyyyMMdd}"; RPARGrid.Columns[4].HeaderText = "日期"; RPARGrid.Columns[4].Visible = false; RPARGrid.Columns[6].HeaderText = "時數"; RPARGrid.Columns[6].Visible = true; RPARGrid.Columns[7].HeaderText = "加班費"; RPARGrid.Columns[7].Visible = true; break; case RPAR_TYPE.T21_電話費: WLabel1.Text = GetString("FMRPAR021.NAME"); where += " AND RPTYP = '21' "; RPARForm = RPARForm21; RPARPanel = Panel21; RPARGrid.Columns[3].HeaderText = "年月"; (RPARGrid.Columns[3] as BoundField).DataFormatString = "{0:yyyyMM}"; RPARGrid.Columns[4].HeaderText = "年月"; RPARGrid.Columns[4].Visible = false; RPARGrid.Columns[6].Visible = false; RPARGrid.Columns[7].HeaderText = "電話費"; RPARGrid.Columns[7].Visible = true; break; case RPAR_TYPE.T22_油料費: WLabel1.Text = GetString("FMRPAR022.NAME"); where += " AND RPTYP = '22' "; RPARForm = RPARForm22; RPARPanel = Panel22; RPARGrid.Columns[3].HeaderText = "年月"; (RPARGrid.Columns[3] as BoundField).DataFormatString = "{0:yyyyMM}"; RPARGrid.Columns[4].HeaderText = "年月"; RPARGrid.Columns[4].Visible = false; RPARGrid.Columns[6].HeaderText = "公里數"; RPARGrid.Columns[6].Visible = true; RPARGrid.Columns[7].HeaderText = "費用"; RPARGrid.Columns[7].Visible = true; break; case RPAR_TYPE.T3_出差: WLabel1.Text = GetString("FMRPAR03.NAME"); where += " AND RPTYP LIKE '3%' "; RPARForm = RPARForm3; RPARPanel = Panel3; RPARGrid.Columns[3].HeaderText = "開始日期"; (RPARGrid.Columns[3] as BoundField).DataFormatString = "{0:yyyyMMdd}"; RPARGrid.Columns[4].HeaderText = "結束日期"; RPARGrid.Columns[4].Visible = true; RPARGrid.Columns[6].Visible = false; RPARGrid.Columns[7].HeaderText = "差旅費"; RPARGrid.Columns[7].Visible = true; break; } RPARPanel.Visible = true; // RPARForm.Visible = true; } DateTime RPRDT1, RPRDT2; CheckDate(_RPRDT1, out RPRDT1); CheckDate(_RPRDT2, out RPRDT2); dsRPARGrid.SelectParameters["RPPYN"].DefaultValue = _RPPYN; dsRPARGrid.SelectParameters["RPNUM1"].DefaultValue = _RPNUM1; dsRPARGrid.SelectParameters["RPNUM2"].DefaultValue = _RPNUM2; dsRPARGrid.SelectParameters["RPRDT1"].DefaultValue = RPRDT1.Ticks > 0 ? RPRDT1.ToString("yyyy-MM-dd") : ""; dsRPARGrid.SelectParameters["RPRDT2"].DefaultValue = RPRDT2.Ticks > 0 ? RPRDT2.ToString("yyyy-MM-dd") : ""; dsRPARGrid.SelectParameters["rparType"].DefaultValue = rparType; dsRPARForm.SelectCommand = select + from + " WHERE RPREN=@RPREN "; } private new void CalcFields(SqlDataSourceCommandEventArgs e) { /* // 藉由人員編號以及日期,找出相應的派遣紀錄,填入相關欄位 DbCommand cmd = Query.NewCommand("SELECT TOP 1 RAITM, RACNM, RAPYN FROM RASN WHERE RANUM=@RPNUM AND ((RASDT <= @RPRDT AND RAEDT >= @RPRDT) OR (RASDT <= @RPRDT AND RAEDT IS NULL)) ORDER BY RAITM"); cmd.Parameters.Add(Query.NewParameter("RPNUM", e.Command.Parameters["@RPNUM"].Value)); cmd.Parameters.Add(Query.NewParameter("RPRDT", e.Command.Parameters["@RPRDT"].Value)); DataTable rasn = Query.Select(cmd); if (rasn.Rows.Count > 0) { e.Command.Parameters["@RAITM"].Value = rasn.Rows[0]["RAITM"]; e.Command.Parameters["@RPCNM"].Value = rasn.Rows[0]["RACNM"]; e.Command.Parameters["@RPPYN"].Value = rasn.Rows[0]["RAPYN"]; } */ // 畫面上選哪一個專案,就填哪一個專案 e.Command.Parameters["@RPPYN"].Value = _RPPYN; // 電話費、油料費,填入類別 if (rparType.StartsWith("2")) e.Command.Parameters["@RPTYP"].Value = rparType; // 取出計算需要的資料 string rpnum = e.Command.Parameters["@RPNUM"].Value.ToString(); string rptyp = e.Command.Parameters["@RPTYP"].Value.ToString(); // 時數存成分鐘,油料費除外 int rptct = 0; if (rparType == RPAR_TYPE.T22_油料費) { rptct = Convert.ToInt32(e.Command.Parameters["@RPTCT"].Value); } else if (rparType == RPAR_TYPE.T1_加班) { rptct = Convert.ToInt32(e.Command.Parameters["@RPTCT"].Value) * 60 + Convert.ToInt32(e.Command.Parameters["@RPTMT"].Value); } else { rptct = Convert.ToInt32(e.Command.Parameters["@RPTCT"].Value) * 60; } e.Command.Parameters["@RPTCT"].Value = rptct; int rpftr = Convert.ToInt32(e.Command.Parameters["@RPFTR"].Value); DateTime rprdt = Convert.ToDateTime(e.Command.Parameters["@RPRDT"].Value); GetData calc = new GetData(); calc.Query = Query; int bpsrm; int bpp02; double bpbft; double bpaft; double bphol; string bpovr; string bplve; string bpott; calc.GetRASN_Date_Bppyn_Bpeno_Overwork_Rate(rprdt, _RPPYN, rpnum, out bpsrm, out bpp02, out bpbft, out bpaft, out bphol, out bpovr, out bplve, out bpott); switch (rparType) { case RPAR_TYPE.T0_請假: // 請假,要計算缺勤扣款 Absent absent = new Absent(); absent.bpsrm = bpsrm; absent.bpp02 = bpp02; absent.Formula = bplve; e.Command.Parameters["@RPFTR"].Value = absent.Add(rptyp, rptct); break; case RPAR_TYPE.T1_加班: // 加班,要計算加班費 ExtraWork extraWork = new ExtraWork(); // 區分前二加班、後二加班、假日加班 int rptc1; int rptc2; int rptc3; int rptc4; int rptc5; extraWork.SplitOverTime(rptyp, rptct, 0, out rptc1, out rptc2, out rptc3, out rptc4, out rptc5); extraWork.Add(rptyp, rprdt, rptct, bpsrm, bpp02, bpbft, bpaft, bphol, bpovr, bpott, rptc1, rptc2, rptc3, rptc4, rptc5); e.Command.Parameters["@RPTC1"].Value = rptc1; e.Command.Parameters["@RPTC2"].Value = rptc2; e.Command.Parameters["@RPTC3"].Value = rptc3; e.Command.Parameters["@RPTC4"].Value = rptc4; e.Command.Parameters["@RPTC5"].Value = rptc5; e.Command.Parameters["@RPFTR"].Value = extraWork.RPTA1 + extraWork.RPTA2 + extraWork.RPTA3 + extraWork.RPTA4 + extraWork.RPTA5; break; case RPAR_TYPE.T22_油料費: // 油料費,要計算補助金額 OtherFee otherFee = new OtherFee(); otherFee.Add(rptyp, rptct, rpftr); e.Command.Parameters["@RPFTR"].Value = otherFee.FuelFee; break; case RPAR_TYPE.T3_出差: break; } } protected void dsRPARForm_Inserting(object sender, SqlDataSourceCommandEventArgs e) { CalcFields(e); if (e.Cancel) { return; } conn = Query.NewConnection(Query.ConnectionString); conn.Open(); tran = conn.BeginTransaction(); try { e.Command.Connection = conn; e.Command.Transaction = tran; // 產生新的單號 // 產生新的單號 _RPREN = WGuard1.WNextRen(DateTime.UtcNow.AddHours(8), "RPAR", "RPREN", "YYYYMM<9999>", ""); string RPNUM = WDAC.GetStringValue(e.Command.Parameters["@RPNUM"].Value); e.Command.Parameters["@RPREN"].Value = _RPREN; // 如果是請假 /* if (rparType == "0") { switch (WDAC.GetStringValue(e.Command.Parameters["@RPTYP"].Value)) { // 補休 case "00": e.Command.Parameters["@RPDOC"].Value = rparDao.沖補休(tran, _RPREN, RPNUM, WDAC.GetDateTimeValue(e.Command.Parameters["@RPRDT"].Value), WDAC.GetInt32Value(e.Command.Parameters["@RPTCT"].Value)); break; // 特休 case "01": ryerDao.沖特休(RPNUM, WDAC.GetDateTimeValue(e.Command.Parameters["@RPRDT"].Value).Year, WDAC.GetInt32Value(e.Command.Parameters["@RPTCT"].Value), tran); break; } } */ } catch { tran.Rollback(); tran = null; e.Cancel = true; throw; } } protected void dsRPARForm_Inserted(object sender, SqlDataSourceStatusEventArgs e) { if (tran != null) { tran.Commit(); tran = null; } if (conn != null && conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); conn = null; } } protected void dsRPARForm_Updating(object sender, SqlDataSourceCommandEventArgs e) { CalcFields(e); if (e.Cancel) return; conn = Query.NewConnection(Query.ConnectionString); conn.Open(); tran = conn.BeginTransaction(); try { e.Command.Connection = conn; e.Command.Transaction = tran; _RPREN = WDAC.GetStringValue(e.Command.Parameters["@RPREN"].Value); string 新類別 = WDAC.GetStringValue(e.Command.Parameters["@RPTYP"].Value); DateTime 新日期 = WDAC.GetDateTimeValue(e.Command.Parameters["@RPRDT"].Value); string 新User = WDAC.GetStringValue(e.Command.Parameters["@RPNUM"].Value); int 新時數 = WDAC.GetInt32Value(e.Command.Parameters["@RPTCT"].Value); // 如果是請假 /* if (rparType == "0") { // 舊資料如果是補休,要取消沖補休 if (oldRPTYP == "00") { rparDao.取消沖補休(tran, _RPREN); } // 舊資料如果是特休,要取消沖特休 if (oldRPTYP == "01") { ryerDao.取消沖特休(tran, _RPREN); } // 新資料如果是補休,要沖補休 if (新類別 == "00") { e.Command.Parameters["@RPDOC"].Value = rparDao.沖補休(tran, _RPREN, 新User, 新日期, 新時數); } // 新資料如果是特休,要沖特休 if (新類別 == "01") { ryerDao.沖特休(新User, 新日期.Year, 新時數, tran); } } */ } catch { tran.Rollback(); tran = null; e.Cancel = true; throw; } } protected void dsRPARForm_Updated(object sender, SqlDataSourceStatusEventArgs e) { if (tran != null) { tran.Commit(); tran = null; } if (conn != null && conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); conn = null; } } protected void dsRPARForm_Deleting(object sender, SqlDataSourceCommandEventArgs e) { conn = Query.NewConnection(Query.ConnectionString); conn.Open(); tran = conn.BeginTransaction(); try { e.Command.Connection = conn; e.Command.Transaction = tran; string oldrpren = WDAC.GetStringValue(e.Command.Parameters["@OLD_RPREN"].Value); oldRPTYP = WDAC.GetStringValue(Query.ExecuteScalar("SELECT RPTYP FROM RPAR WHERE RPREN='" + oldrpren + "'", tran)); // 如果是請假 /* if (rparType == "0") { // 舊資料如果是補休,要取消沖補休 if (oldRPTYP == "00") { rparDao.取消沖補休(tran, oldrpren); } // 舊資料如果是特休,要取消沖特休 if (oldRPTYP == "01") { ryerDao.取消沖特休(tran, oldrpren); } } */ } catch { tran.Rollback(); tran = null; e.Cancel = true; throw; } } protected void dsRPARForm_Deleted(object sender, SqlDataSourceStatusEventArgs e) { if (tran != null) { tran.Commit(); tran = null; } if (conn != null && conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); conn = null; } } protected void RPARGrid_DataBound(object sender, EventArgs e) { GridView_DataBound(sender, e); if (RPARGrid.Rows.Count > 0) { if (RPARGrid.SelectedIndex == -1) RPARGrid.SelectedIndex = 0; if (RPARGrid.SelectedIndex > RPARGrid.Rows.Count - 1) RPARGrid.SelectedIndex = RPARGrid.Rows.Count - 1; RPARForm.DataBind(); } } protected void RPARGrid_PageIndexChanged(object sender, EventArgs e) { Search(); RPARGrid.SelectedIndex = 0; RPARGrid.DataBind(); } protected void dsRPARGrid_Selected(object sender, ObjectDataSourceStatusEventArgs e) { if (e.ReturnValue is Int32 && WDAC.GetInt32Value(e.ReturnValue) == 0) { switch (MultiView1.ActiveViewIndex) { case 0: lbMessage.Text = GetString("NODATA"); lbMessage.Visible = true; break; case 1: RPARForm.ChangeMode(FormViewMode.Insert); RPARForm_ModeChanged(sender, e); break; } } } protected void RPARForm_ItemCommand(object sender, FormViewCommandEventArgs e) { switch (e.CommandName) { case "Insert": break; case "Edit": break; case "Search": MultiView1.ActiveViewIndex = 0; break; case "Cancel": Search(); RPARForm.ChangeMode(FormViewMode.ReadOnly); RPARForm_ModeChanged(sender, e); break; } } protected void RPARForm_ItemDeleted(object sender, FormViewDeletedEventArgs e) { Search(); RPARGrid.DataBind(); if (RPARGrid.SelectedIndex > RPARGrid.Rows.Count - 1) { RPARGrid.SelectedIndex = RPARGrid.Rows.Count - 1; RPARGrid.DataBind(); } RPARForm.DataBind(); } protected void RPARForm_ItemInserted(object sender, FormViewInsertedEventArgs e) { Search(); } protected void RPARForm_ItemUpdated(object sender, FormViewUpdatedEventArgs e) { Search(); } protected void RPARForm_ModeChanged(object sender, EventArgs e) { switch (RPARForm.CurrentMode) { case FormViewMode.ReadOnly: RPARGrid.Visible = true; RPARGrid.DataBind(); if (RPARGrid.Rows.Count > 0) { if (RPARGrid.SelectedIndex == -1) { RPARGrid.SelectedIndex = 0; } if (OldMode == FormViewMode.Insert) { RPARGrid.PageIndex = RPARGrid.PageCount - 1; RPARGrid.DataBind(); RPARGrid.SelectedIndex = RPARGrid.Rows.Count - 1; } RPARGrid.DataBind(); RPARForm.DataBind(); } break; case FormViewMode.Edit: RPARGrid.Visible = false; break; case FormViewMode.Insert: RPARGrid.Visible = false; break; } } protected void RPARForm_ModeChanging(object sender, FormViewModeEventArgs e) { OldMode = (sender as FormView).CurrentMode; } private void GetHours(string user, DateTime rprdt) { 可用補休 = rparDao.Get可用補休(user, rprdt); 可用特休 = ryerDao.Get可用特休(user, rprdt.Year, rprdt.Month, rprdt.Day); } protected void RPARForm_DataBound(object sender, EventArgs e) { switch (RPARForm.CurrentMode) { case FormViewMode.Edit: if (_RPPYN.CompareTo("000000001") == 0) { RegisterLookupEvent(RPARForm, "btnRPAR_RPNUM_WQRY", "txtRPAR_RPNUM", "txtRPAR_RPNUM,lbRPAR_RPNUMX", "BPSN1", "NOT EXISTS (SELECT RANUM FROM RASN WHERE RANUM=BPENO AND RAEDT IS NULL)"); } else { RegisterLookupEvent(RPARForm, "btnRPAR_RPNUM_WQRY", "txtRPAR_RPNUM", "txtRPAR_RPNUM,lbRPAR_RPNUMX", "BPSN1", "EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + _RPPYN + "' AND RANUM=BPENO)"); } RegisterCalendarEvent(RPARForm, "btnRPAR_RPRDT_DATE", "txtRPAR_RPRDT"); RegisterCalendarEvent(RPARForm, "btnRPAR_RPEDT_DATE", "txtRPAR_RPEDT"); SetClientFocus(RPARForm, "txtRPAR_RPRDT"); break; case FormViewMode.Insert: if (_RPPYN.CompareTo("000000001") == 0) { RegisterLookupEvent(RPARForm, "btnRPAR_RPNUM_WQRY", "txtRPAR_RPNUM", "txtRPAR_RPNUM,lbRPAR_RPNUMX", "BPSN1", "NOT EXISTS (SELECT RANUM FROM RASN WHERE RANUM=BPENO AND RAEDT IS NULL)"); } else { RegisterLookupEvent(RPARForm, "btnRPAR_RPNUM_WQRY", "txtRPAR_RPNUM", "txtRPAR_RPNUM,lbRPAR_RPNUMX", "BPSN1", "EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + _RPPYN + "' AND RANUM=BPENO)"); } RegisterCalendarEvent(RPARForm, "btnRPAR_RPRDT_DATE", "txtRPAR_RPRDT"); RegisterCalendarEvent(RPARForm, "btnRPAR_RPEDT_DATE", "txtRPAR_RPEDT"); switch (rparType) { case RPAR_TYPE.T0_請假: (RPARForm.FindControl("txtRPAR_RPTCT") as ITextControl).Text = "0"; break; case RPAR_TYPE.T1_加班: (RPARForm.FindControl("txtRPAR_RPTCT") as ITextControl).Text = "0"; (RPARForm.FindControl("txtRPAR_RPTMT") as ITextControl).Text = "0"; break; case RPAR_TYPE.T21_電話費: (RPARForm.FindControl("txtRPAR_RPFTR") as ITextControl).Text = "0"; break; case RPAR_TYPE.T22_油料費: (RPARForm.FindControl("txtRPAR_RPTCT") as ITextControl).Text = "0"; break; case RPAR_TYPE.T3_出差: (RPARForm.FindControl("txtRPAR_RPFTR") as ITextControl).Text = "0"; break; } SetClientFocus(RPARForm, "txtRPAR_RPNUM"); break; } } protected void RPARGrid_RowDataBound(object sender, GridViewRowEventArgs e) { SetGridViewMouseBehavier(RPARGrid, e.Row); //GridView_RowDataBound_Shrink_ViewState(sender, e); } protected void RPARGrid_SelectedIndexChanged(object sender, EventArgs e) { foreach (GridViewRow row in RPARGrid.Rows) SetGridViewMouseBehavier(RPARGrid, row); } protected void RPARForm_ItemDeleting(object sender, FormViewDeleteEventArgs e) { DateTime rprdt; DateTime rpedt; CheckDate(WDAC.GetStringValue(e.Values["RPRDT"]), out rprdt); CheckDate(WDAC.GetStringValue(e.Values["RPEDT"]), out rpedt); // 刪除前檢查 // 已關帳不可刪除 if (!CheckCloseAccount(rprdt, rpedt)) { e.Cancel = true; cvMessage.IsValid = false; cvMessage.ErrorMessage = "已關帳,不可刪除"; } } protected override bool CheckInput(System.Collections.Specialized.IOrderedDictionary values) { cvMessage.ErrorMessage = ""; cvMessage.IsValid = true; BhrdDAC bhrd = new BhrdDAC(); bool result = true; string rptyp = WDAC.GetStringValue(values["RPTYP"]); switch (rparType) { case RPAR_TYPE.T0_請假: // 請假 int rptct = WDAC.GetInt32Value(values["RPTCT"]); values["RPRDT"] = CheckDate(values["RPRDT"], "請輸入正確的開始日期", ref result, cvMessage); values["RPEDT"] = CheckDate(values["RPEDT"], "請輸入正確的結束日期", ref result, cvMessage); if (result && Convert.ToDateTime(values["RPRDT"]).CompareTo(values["RPEDT"]) > 0) { result = false; cvMessage.ErrorMessage += "開始日期 不可大於 結束日期"; cvMessage.IsValid = false; } if (rptyp != RPAR_TYPE.T05_產假 && bhrd.IsHoliday(UserId, Convert.ToDateTime(values["RPRDT"]))) { result = false; cvMessage.ErrorMessage += "開始日期是假日,不需請假"; cvMessage.IsValid = false; } if (rptyp != RPAR_TYPE.T05_產假 && bhrd.IsHoliday(UserId, Convert.ToDateTime(values["RPEDT"]))) { result = false; cvMessage.ErrorMessage += "結束日期是假日,不需請假"; cvMessage.IsValid = false; } GetHours(WDAC.GetStringValue(values["RPNUM"]), WDAC.GetDateTimeValue(values["RPRDT"])); // 補休時數不足 /* if (rptyp == "00" && 可用補休 < rptct) { result = false; cvMessage.ErrorMessage += "補休時數不足!"; cvMessage.IsValid = false; } // 特休時數不足 if (rptyp == "01" && 可用特休 < rptct) { result = false; cvMessage.ErrorMessage += "特休時數不足!"; cvMessage.IsValid = false; } */ break; case RPAR_TYPE.T1_加班: // 加班 values["RPRDT"] = CheckDate(values["RPRDT"], "請輸入正確的日期", ref result, cvMessage); // 檢查一週之內只能請一天休息日加班 if (string.Format("{0},{1}", RPAR_TYPE.T13_休息日累積補休時數, RPAR_TYPE.T14_休息日請領加班費).Contains(rptyp)) { DateTime rprdt = Convert.ToDateTime(values["RPRDT"]); string rpren = WDAC.GetStringValue(values["RPREN"]); // 檢查休息日加班 string message; if (!rparDao.檢查休息日加班(UserId, rprdt, rpren, out message)) { result = false; cvMessage.ErrorMessage = message; cvMessage.IsValid = false; } } /* if (!bhrd.IsHoliday(Convert.ToDateTime(values["RPRDT"]))) { if (Convert.ToInt32(values["RPTCT"]) > 4) { result = false; cvMessage.ErrorMessage += "平日加班不可超過 4 小時"; cvMessage.IsValid = false; } } else { if (Convert.ToInt32(values["RPTCT"]) > 8) { result = false; cvMessage.ErrorMessage += "假日加班不可超過 8 小時"; cvMessage.IsValid = false; } } */ break; case RPAR_TYPE.T21_電話費: // 電話費 case RPAR_TYPE.T22_油料費: // 油料費 values["RPRDT"] = CheckDate(values["RPRDT"].ToString() + "01", "請輸入正確的年月", ref result, cvMessage); break; case RPAR_TYPE.T3_出差: // 差旅 values["RPRDT"] = CheckDate(values["RPRDT"], "請輸入正確的開始日期", ref result, cvMessage); values["RPEDT"] = CheckDate(values["RPEDT"], "請輸入正確的結束日期", ref result, cvMessage); if (result && Convert.ToDateTime(values["RPRDT"]).CompareTo(values["RPEDT"]) > 0) { result = false; cvMessage.ErrorMessage += "開始日期 不可大於 結束日期"; cvMessage.IsValid = false; } break; } ProcessCustomValidatorMessage(cvMessage); return result; } protected void RPARForm_ItemInserting(object sender, FormViewInsertEventArgs e) { if (RPARForm.FindControl("ddlRPAR_RPTYP") != null) e.Values["RPTYP"] = (RPARForm.FindControl("ddlRPAR_RPTYP") as DropDownList).SelectedValue; e.Cancel = !CheckInput(e.Values); } protected void RPARForm_ItemUpdating(object sender, FormViewUpdateEventArgs e) { if (RPARForm.FindControl("ddlRPAR_RPTYP") != null) e.NewValues["RPTYP"] = (RPARForm.FindControl("ddlRPAR_RPTYP") as DropDownList).SelectedValue; e.Cancel = !CheckInput(e.NewValues); // 記住舊類別,以便做請補休假的判斷 oldRPTYP = WDAC.GetStringValue(e.OldValues["RPTYP"]); } protected void cvRPTCT_ServerValidate(object source, ServerValidateEventArgs args) { int i; args.IsValid = args.Value != "" && Int32.TryParse(args.Value, out i) && i > 0; } protected void cvRPNUM_ServerValidate(object source, ServerValidateEventArgs args) { if (bpsn == null) bpsn = new BPSN_DAC(WConfig.GetConnectionConfig(), WConfig.GetConnectionConfigName()); args.IsValid = args.Value != "" && bpsn.IsExist(args.Value, true); } protected void Next_Click(object sender, EventArgs e) { // 檢查此使用者是否有權限處理這個專案 BprmDAC bprm = new BprmDAC(Query); if (!bprm.GetRight(ddlRPPYN.SelectedValue, UserId)) { MultiView1.Visible = false; cvMessage.ErrorMessage = "對不起,你沒有處理這個專案的權限!"; cvMessage.IsValid = false; return; } ParamList["RPPYN"] = ddlRPPYN.SelectedValue; DoAfterCommand("RPAR"); } protected void btnYY_Click(object sender, EventArgs e) { int year; if (!Int32.TryParse(txtYY.Text.Trim(), out year)) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "請輸入正確的年度"; return; } MultiView1.Visible = false; ParamList["YY"] = year; ParamList["RPPYN"] = ""; DoAfterCommand("RPAR"); } /// /// 關帳檢查 /// /// 起始日 /// 結束日 /// True=通過檢查, False=不通過檢查 protected bool CheckCloseAccount(object rprdt, object rpedt) { DateTime rdt = WDAC.GetDateTimeValue(rprdt); DateTime edt = WDAC.GetDateTimeValue(rpedt); if (edt.Ticks != 0) return (關帳日期 < rdt && 關帳日期 < edt); else return (關帳日期 < rdt); } }