using System; using System.Data; using System.Web.UI.WebControls; using Wellan.Data; using Wellan.Common; using System.Text; using System.IO; using NPOI.HSSF.UserModel; using System.Collections.Generic; /// /// 人員資料處理 /// public partial class forms_worker_fmBpsn : Wellan.Web.UI.WUserControlBase { private string _BPENO = ""; private string _BPNME = ""; private string _BPENM = ""; private string _BPIDN = ""; private string _BPEDY_TYPE = ""; private string _BPDPT_TYPE = ""; private string _BPSDY1 = ""; private string _BPSDY2 = ""; private string _BPEDY1 = ""; private string _BPEDY2 = ""; private string select = @" SELECT A.* , B.RAPYN, C.BPPYM RAPYNX, B.RABRH, D.BSSCR RABRHX, B.RAJNO, E.BPJME RAJNOX, B.RACNO , F.BPCME RACNOX, ISNULL(H.RPCPY, G.RPCPY) AS RPCPY , ROW_NUMBER() OVER (ORDER BY A.BPENO) ROWID "; private string from = @" FROM BPSNView A LEFT OUTER JOIN RASN B ON A.BPENO=B.RANUM AND (B.RAEDT IS NULL OR (B.RASDT <= @TODAY AND B.RAEDT >= @TODAY)) LEFT OUTER JOIN BPAA C ON B.RAPYN=C.BPPYN LEFT OUTER JOIN BCLS D ON D.BSCLS=B.RABRH AND D.BSPAR='BPSNBRH' LEFT OUTER JOIN BPJA E ON E.BPPYN=B.RAPYN AND E.BPJNO=B.RAJNO LEFT OUTER JOIN BPJB F ON F.BPPYN=B.RAPYN AND F.BPJNO=B.RAJNO AND F.BPCNO=B.RACNO LEFT OUTER JOIN RPIR G ON A.BPENO=G.RPENO AND G.RPREN=(SELECT MAX(RPREN) FROM RPIR WHERE RPENO=A.BPENO) LEFT OUTER JOIN RPIB H ON G.RPREN=H.RPREN AND H.RPITM=(SELECT MAX(RPITM) FROM RPIB WHERE RPREN=H.RPREN) "; private string where = " WHERE 1=1 "; // private string order = " ORDER BY BPENO "; private bool fileOK = false; internal BprmDAC bprmDAC; protected void Page_Load(object sender, EventArgs e) { _BPENO = ViewState["BPSN_BPENO"] != null ? ViewState["BPSN_BPENO"].ToString() : ""; _BPNME = ViewState["BPSN_BPNME"] != null ? ViewState["BPSN_BPNME"].ToString() : ""; _BPENM = ViewState["BPSN_BPENM"] != null ? ViewState["BPSN_BPENM"].ToString() : ""; _BPIDN = ViewState["BPSN_BPIDN"] != null ? ViewState["BPSN_BPIDN"].ToString() : ""; _BPEDY_TYPE = ViewState["BPSN_BPEDY_TYPE"] != null ? ViewState["BPSN_BPEDY_TYPE"].ToString() : "0"; _BPDPT_TYPE = ViewState["BPSN_BPDPT_TYPE"] != null ? ViewState["BPSN_BPDPT_TYPE"].ToString() : "0"; _BPSDY1 = ViewState["BPSN_BPSDY1"] != null ? ViewState["BPSN_BPSDY1"].ToString() : ""; _BPSDY2 = ViewState["BPSN_BPSDY2"] != null ? ViewState["BPSN_BPSDY2"].ToString() : ""; _BPEDY1 = ViewState["BPSN_BPEDY1"] != null ? ViewState["BPSN_BPEDY1"].ToString() : ""; _BPEDY2 = ViewState["BPSN_BPEDY2"] != null ? ViewState["BPSN_BPEDY2"].ToString() : ""; //if (GetStringParam("BPENO") != null) //{ // txtBPNUM.Text = GetStringParam("BPENO"); // ParamList.Clear(); // Search(); //} if (!IsPostBack) { ddlBPEDY.SelectedValue = "1"; GridView1.DataBind(); } } protected override void OnInit(EventArgs e) { base.OnInit(e); dsBPSNForm.SelectCommand = @" SELECT A.*, B.RAPYN, C.BPPYM RAPYNX, B.RABRH, D.BSSCR RABRHX, B.RAJNO, E.BPJME RAJNOX, B.RACNO, F.BPCME RACNOX, ISNULL(H.RPCPY, G.RPCPY) AS RPCPY FROM BPSNView A LEFT OUTER JOIN RASN B ON A.BPENO=B.RANUM AND B.RASDT <= @TODAY AND (B.RAEDT IS NULL OR B.RAEDT >= @TODAY) LEFT OUTER JOIN BPAA C ON B.RAPYN=C.BPPYN LEFT OUTER JOIN BCLS D ON D.BSCLS=B.RABRH AND D.BSPAR='BPSNBRH' LEFT OUTER JOIN BPJA E ON E.BPPYN=B.RAPYN AND E.BPJNO=B.RAJNO LEFT OUTER JOIN BPJB F ON F.BPPYN=B.RAPYN AND F.BPJNO=B.RAJNO AND F.BPCNO=B.RACNO LEFT OUTER JOIN RPIR G ON A.BPENO=G.RPENO AND G.RPREN=(SELECT MAX(RPREN) FROM RPIR WHERE RPENO=A.BPENO) LEFT OUTER JOIN RPIB H ON G.RPREN=H.RPREN AND H.RPITM=(SELECT MAX(RPITM) FROM RPIB WHERE RPREN=H.RPREN) WHERE A.BPENO=@BPENO "; dsBPSNForm.InsertCommand = @" INSERT INTO BPSN (BPENO, BPNME, BPENM, BPGNR, BPBDY, BPIDN, BPAMY, BPAED, BPMRY, BPCHN, BPHGT, BPWGT, BPDIS, BPAZC, BPACT, BPACY, BPASA, BPLZC, BPLCT, BPLCY, BPLSA, BPEML, BPHTL, BPOTL, BPOTX, BPWTC, BPMB1, BPMB2, BPCTT, BPIDT, BPSTP, BPSCH, BPSUB, BPSGR, BPST2, BPSC2, BPSU2, BPSG2, BPPIC, BPTYP, BPSDY, BPEDY, BPAWD, BPDPT, BPSWY, BPBNK, BPACC, BPDOC, BPEM2, TRDAT, TRMOD, TRUSR, APPNO) VALUES (@BPENO, @BPNME, @BPENM, @BPGNR, @BPBDY, @BPIDN, @BPAMY, @BPAED, @BPMRY, @BPCHN, @BPHGT, @BPWGT, @BPDIS, @BPAZC, @BPACT, @BPACY, @BPASA, @BPLZC, @BPLCT, @BPLCY, @BPLSA, @BPEML, @BPHTL, @BPOTL, @BPOTX, @BPWTC, @BPMB1, @BPMB2, @BPCTT, @BPIDT, @BPSTP, @BPSCH, @BPSUB, @BPSGR, @BPST2, @BPSC2, @BPSU2, @BPSG2, @BPPIC, @BPTYP, @BPSDY, @BPEDY, @BPAWD, @BPDPT, @BPSWY, @BPBNK, @BPACC, @BPDOC, @BPEM2, GETDATE(), 'INSERT', @TRUSR, 1)"; dsBPSNForm.UpdateCommand = @" UPDATE dbo.BPSN SET BPENO = @BPENO, BPNME = @BPNME, BPENM = @BPENM, BPGNR = @BPGNR, BPBDY = @BPBDY, BPIDN = @BPIDN, BPAMY = @BPAMY, BPAED = @BPAED, BPMRY = @BPMRY, BPCHN = @BPCHN, BPHGT = @BPHGT, BPWGT = @BPWGT, BPDIS = @BPDIS, BPAZC = @BPAZC, BPACT = @BPACT, BPACY = @BPACY, BPASA = @BPASA, BPLZC = @BPLZC, BPLCT = @BPLCT, BPLCY = @BPLCY, BPLSA = @BPLSA, BPEML = @BPEML, BPHTL = @BPHTL, BPOTL = @BPOTL, BPOTX = @BPOTX, BPWTC = @BPWTC, BPMB1 = @BPMB1, BPMB2 = @BPMB2, BPCTT = @BPCTT, BPIDT = @BPIDT, BPSTP = @BPSTP, BPSCH = @BPSCH, BPSUB = @BPSUB, BPSGR = @BPSGR, BPST2 = @BPST2, BPSC2 = @BPSC2, BPSU2 = @BPSU2, BPSG2 = @BPSG2, BPPIC = @BPPIC, BPTYP = @BPTYP, BPDPT = @BPDPT, BPSWY = @BPSWY, BPBNK = @BPBNK, BPACC = @BPACC, BPDOC = @BPDOC, BPEM2 = @BPEM2, TRDAT = GETDATE(), TRMOD = 'UPDATE', TRUSR = @TRUSR, APPNO = APPNO + 1 WHERE BPENO = @OLD_BPENO AND APPNO = @OLD_APPNO"; dsBPSNForm.DeleteCommand = @"DELETE BPSN WHERE BPENO = @OLD_BPENO AND APPNO = @OLD_APPNO"; dsBPSNForm.ConnectionString = ConnectionString; dsBPSNGrid.ConnectionString = ConnectionString; dsBPSN_BPTYP.ConnectionString = ConnectionString; dsBPSN_BPGNR.ConnectionString = ConnectionString; dsBPSN_BPSGR.ConnectionString = ConnectionString; dsBPSN_BPMRY.ConnectionString = ConnectionString; dsBPSN_BPAMY.ConnectionString = ConnectionString; dsBPSN_BPIDT.ConnectionString = ConnectionString; dsBPSN_BPDIS.ConnectionString = ConnectionString; dsBPSN_BPDPT.ConnectionString = ConnectionString; dsBPSN_BPSWY.ConnectionString = ConnectionString; dsBPSN_BPTYP.SelectCommand = GetListSql("BCLS", "BSPAR = 'BPSNTYP'"); dsBPSN_BPGNR.SelectCommand = GetListSql("BCLS", "BSPAR = 'BPSNGNR'"); dsBPSN_BPSGR.SelectCommand = "SELECT '' BSCLS, '' BSSCR UNION " + GetListSql("BCLS", "BSPAR = 'BPSNSGR'"); dsBPSN_BPMRY.SelectCommand = GetListSql("BCLS", "BSPAR = 'BPSNMRY'"); dsBPSN_BPAMY.SelectCommand = GetListSql("BCLS", "BSPAR = 'BPSNAMY'"); dsBPSN_BPIDT.SelectCommand = GetListSql("BCLS", "BSPAR = 'BPSNIDT'"); dsBPSN_BPDIS.SelectCommand = GetListSql("BCLS", "BSPAR = 'BPSNDIS'"); dsBPSN_BPDPT.SelectCommand = "SELECT BDNUM, BDNAM FROM BDPT ORDER BY BDNUM"; dsBPSN_BPSWY.SelectCommand = GetListSql("BCLS", "BSPAR = 'BPSNSWY'"); GetGridViewRowColor(GridView1); RegisterCalendarEvent(this, "btnBPSN_BPSDY1_DATE", "txtBPSN_BPSDY1"); RegisterCalendarEvent(this, "btnBPSN_BPSDY2_DATE", "txtBPSN_BPSDY2"); RegisterCalendarEvent(this, "btnBPSN_BPEDY1_DATE", "txtBPSN_BPEDY1"); RegisterCalendarEvent(this, "btnBPSN_BPEDY2_DATE", "txtBPSN_BPEDY2"); RegisterCalendarEvent(this, "btnExportDate1Date", "txtExportDate1"); RegisterCalendarEvent(this, "btnExportDate2Date", "txtExportDate2"); SetClientFocus(txtBPNUM); bprmDAC = new BprmDAC(Query); switch (MultiView1.ActiveViewIndex) { case 0: { break; } case 1: { Search(); break; } } } // 查詢按鈕 protected void btnSearch_Click(object sender, EventArgs e) { cvMessage.ErrorMessage = ""; cvMessage.IsValid = true; bool result = true; // 檢查輸入的日期 DateTime aDateTime; if (txtBPSN_BPSDY1.Text != "") { aDateTime = CheckDate(txtBPSN_BPSDY1.Text, "到職日開始日期不合理", ref result, cvMessage); if (aDateTime.Ticks > 0) _BPSDY1 = aDateTime.ToString(WGuard1.InvariantCulture); else _BPSDY1 = ""; } if (txtBPSN_BPSDY2.Text != "") { aDateTime = CheckDate(txtBPSN_BPSDY2.Text, "到職日結束日期不合理", ref result, cvMessage); if (aDateTime.Ticks > 0) _BPSDY2 = aDateTime.ToString(WGuard1.InvariantCulture); else _BPSDY2 = ""; } if (txtBPSN_BPEDY1.Text != "") { aDateTime = CheckDate(txtBPSN_BPEDY1.Text, "離職日開始日期不合理", ref result, cvMessage); if (aDateTime.Ticks > 0) _BPEDY1 = aDateTime.ToString(WGuard1.InvariantCulture); else _BPEDY1 = ""; } if (txtBPSN_BPEDY2.Text != "") { aDateTime = CheckDate(txtBPSN_BPEDY2.Text, "離職日結束日期不合理", ref result, cvMessage); if (aDateTime.Ticks > 0) _BPEDY2 = aDateTime.ToString(WGuard1.InvariantCulture); else _BPEDY2 = ""; } if (result) { MultiView1.ActiveViewIndex = 1; Search(); GridView1.PageIndex = 0; GridView1.SelectedIndex = 0; GridView1.DataBind(); // 查詢有資料時,才將查詢條件紀錄在 ViewState 中 if (GridView1.Rows.Count > 0) { ViewState["BPSN_BPENO"] = _BPENO; ViewState["BPSN_BPNME"] = _BPNME; ViewState["BPSN_BPENM"] = _BPENM; ViewState["BPSN_BPIDN"] = _BPIDN; ViewState["BPSN_BPEDY_TYPE"] = _BPEDY_TYPE; ViewState["BPSN_BPDPT_TYPE"] = _BPDPT_TYPE; ViewState["BPSN_BPSDY1"] = _BPSDY1; ViewState["BPSN_BPSDY2"] = _BPSDY2; ViewState["BPSN_BPEDY1"] = _BPEDY1; ViewState["BPSN_BPEDY2"] = _BPEDY2; } } } // 取消查詢按鈕 protected void btnCancel_Click(object sender, EventArgs e) { Search(); GridView1.DataBind(); MultiView1.ActiveViewIndex = 1; } // 查詢動作 private new void Search() { _BPENO = txtBPNUM.Text; _BPNME = txtBPNAM.Text; _BPENM = txtBPENM.Text; _BPIDN = txtBPIDN.Text; _BPEDY_TYPE = ddlBPEDY.SelectedValue; _BPDPT_TYPE = ddlBPDPT.SelectedValue; StringBuilder sql = new StringBuilder(); sql.Append(select); sql.Append(from); sql.Append(where); dsBPSNGrid.SelectParameters.Clear(); dsBPSNGrid.SelectParameters.Add("TODAY", String.Format(WGuard1.InvariantCulture, "{0:yyyy-MM-dd}", DateTime.UtcNow.AddHours(8).Date)); if (canSearch) { AddSearch(sql, dsBPSNGrid, "BPENO", _BPENO, "", true); AddSearch(sql, dsBPSNGrid, "BPNME", _BPNME, "", true); AddSearch(sql, dsBPSNGrid, "BPENM", _BPENM, "", true); AddSearch(sql, dsBPSNGrid, "BPIDN", _BPIDN, "", true); switch (_BPEDY_TYPE) { case "1": sql.Append(" AND (BPEDY IS NULL OR BPEDY >= @TODAY) "); break; case "2": sql.Append(" AND (BPEDY < @TODAY)"); break; } switch (_BPDPT_TYPE) { case "1": sql.Append(String.Format(" AND BPDPT IN {0} ", PublicVariable.InnerDepartment)); break; case "2": sql.Append(String.Format(" AND BPDPT NOT IN {0} ", PublicVariable.InnerDepartment)); break; } AddSearch(sql, dsBPSNGrid, "BPSDY", _BPSDY1, _BPSDY2, true); AddSearch(sql, dsBPSNGrid, "BPEDY", _BPEDY1, _BPEDY2, true); if (!BpsnDAC.IsManager(UserId)) { sql.Append(" AND BPENO NOT IN ('00001','00002','00003') "); } } else { AddSearch(sql, dsBPSNGrid, "BPENO", UserId, "", true); } // sql.Append(order); dsBPSNGrid.SelectCommand = sql.ToString(); if (!string.IsNullOrEmpty(GetStringParam("BPENO")) || !string.IsNullOrEmpty(WDAC.GetStringValue(ViewState["RPENO"]))) { string bpeno = ""; if (!string.IsNullOrEmpty(GetStringParam("BPENO"))) bpeno = GetStringParam("BPENO"); if (!string.IsNullOrEmpty(WDAC.GetStringValue(ViewState["RPENO"]))) bpeno = WDAC.GetStringValue(ViewState["RPENO"]); var cmdIndex = Query.NewCommand(); cmdIndex.CommandText = string.Format("SELECT ROWID - 1 FROM ( {0} ) T WHERE BPENO = @TARGET", dsBPSNGrid.SelectCommand); Query.AddParam(cmdIndex, "TODAY", DateTime.UtcNow.AddHours(8).Date); Query.AddParam(cmdIndex, "BPENO1", _BPENO); Query.AddParam(cmdIndex, "BPNME1", _BPNME); Query.AddParam(cmdIndex, "BPENM1", _BPENM); Query.AddParam(cmdIndex, "BPIDN1", _BPIDN); Query.AddParam(cmdIndex, "BPSDY1", _BPSDY1); Query.AddParam(cmdIndex, "BPSDY2", _BPSDY2); Query.AddParam(cmdIndex, "BPEDY1", _BPEDY1); Query.AddParam(cmdIndex, "BPEDY2", _BPEDY2); Query.AddParam(cmdIndex, "TARGET", bpeno); var o = Query.ExecuteScalar(cmdIndex); int idx = (o is Int32 || o is Int64) ? WDAC.GetInt32Value(o) : -1; if (idx >= 0) { GridView1.PageIndex = idx / GridView1.PageSize; GridView1.SelectedIndex = idx % GridView1.PageSize; } ParamList.Clear(); ViewState.Remove("RPENO"); } } // 存檔前的計算動作 private new void CalcFields(SqlDataSourceCommandEventArgs e) { // e.Command.Parameters["@BPWTC"].Value = (fvBpsn.FindControl("cbBPSN_BPWTC") as CheckBox).Checked ? "Y" : "N"; if (fileOK) { try { FileUpload fu = fvBpsn.FindControl("fuBPSN_BPPIC") as FileUpload; string ext = Path.GetExtension(fu.FileName).ToLower(); string bpeno = e.Command.Parameters["@BPENO"].Value.ToString(); string fileName = bpeno + ext; // 儲存原圖 //fu.PostedFile.SaveAs(RootPath + "/UploadedPicture/" + fileName); e.Command.Parameters["@BPPIC"].Value = fileName; string tFullName = RootPath + "/UploadedPicture/" + "T_" + bpeno + ".jpg"; // 縮圖的存檔路徑 MemoryStream 縮圖 = WGuard1.縮圖(fu.PostedFile.InputStream, 300, 350); File.WriteAllBytes(tFullName, 縮圖.ToArray()); } catch { throw; } } } protected void dsBPSNForm_Inserting(object sender, SqlDataSourceCommandEventArgs e) { e.Command.Parameters["@BPAWD"].Value = "\u007f\u007f\u007f\u007f"; // 工讀生用其他規則編號 string newBPENO = WGuard1.WNextRen( DateTime.UtcNow.AddHours(8) , "BPSN" , "BPENO" , string.Format("{0}", e.Command.Parameters["@BPTYP"].Value) == "5" ? "\"T\"<9999>" : "<99999>" , ""); e.Command.Parameters["@BPENO"].Value = newBPENO; ViewState["RPENO"] = newBPENO; CalcFields(e); } protected void dsBPSNForm_Updating(object sender, SqlDataSourceCommandEventArgs e) { CalcFields(e); } protected void GridView1_DataBound(object sender, EventArgs e) { GridView_DataBound(sender, e); if (GridView1.Rows.Count > 0) { if (GridView1.SelectedIndex < 0) { GridView1.SelectedIndex = 0; } else if (GridView1.SelectedIndex > GridView1.Rows.Count - 1) { GridView1.SelectedIndex = GridView1.Rows.Count - 1; } } else if (GridView1.Rows.Count == 0 && GridView1.PageIndex > 0) { GridView1.PageIndex--; GridView1.SelectedIndex = 9999; GridView1.DataBind(); } fvBpsn.DataBind(); } protected void GridView1_PageIndexChanged(object sender, EventArgs e) { Search(); GridView1.SelectedIndex = 0; GridView1.DataBind(); } protected void dsBPSNGrid_Selected(object sender, SqlDataSourceStatusEventArgs e) { if (e.AffectedRows == 0) { if (MultiView1.ActiveViewIndex == 0) { lbMessage.Text = GetString("NODATA"); lbMessage.Visible = true; } MultiView1.ActiveViewIndex = 0; lbMessage.Text = GetString("NODATA"); lbMessage.Visible = true; } } protected void fvBpsn_ItemCommand(object sender, FormViewCommandEventArgs e) { switch (e.CommandName) { case "Search": MultiView1.ActiveViewIndex = 0; txtBPNUM.Text = ""; txtBPNAM.Text = ""; txtBPENM.Text = ""; txtBPIDN.Text = ""; break; case "Cancel": Search(); fvBpsn.ChangeMode(FormViewMode.ReadOnly); fvBpsn_ModeChanged(sender, e); break; case "Export": MultiView1.ActiveViewIndex = 2; txtExportDate1.Text = ""; txtExportDate2.Text = ""; txtExportBPENO1.Text = ""; txtExportBPENO2.Text = ""; for (int i = 0; i < rblEmploymentStatus.Items.Count; i++) { rblEmploymentStatus.Items[i].Selected = false; } for (int i = 0; i < rblWhereType.Items.Count; i++) { rblWhereType.Items[i].Selected = false; } for (int i = 0; i < cblExportColumns.Items.Count; i++) { cblExportColumns.Items[i].Selected = true; } rblEmploymentStatus.Items[0].Selected = true; rblWhereType.Items[0].Selected = true; cblExportProjects.Items.Clear(); break; case "RPIR": ParamList["mode"] = "BPSN"; ParamList["BPENO"] = fvBpsn.DataKey.Values["BPENO"]; DoAfterCommand("RPIR"); break; case "RPSN": ViewState["RPENO"] = fvBpsn.DataKey.Values["BPENO"]; ViewState["RPNME"] = GetLookup("BPSN", fvBpsn.DataKey.Values["BPENO"].ToString(), "BPNME"); MultiView1.ActiveViewIndex = 3; break; } } protected void fvBpsn_ItemDeleted(object sender, FormViewDeletedEventArgs e) { Search(); GridView1.DataBind(); fvBpsn.DataBind(); } protected void fvBpsn_ItemInserted(object sender, FormViewInsertedEventArgs e) { Search(); } protected void fvBpsn_ItemUpdated(object sender, FormViewUpdatedEventArgs e) { Search(); } protected void fvBpsn_ModeChanged(object sender, EventArgs e) { if (fvBpsn.CurrentMode == FormViewMode.ReadOnly) { GridView1.Visible = true; GridView1.DataBind(); if (GridView1.Rows.Count > 0 && GridView1.SelectedIndex == -1) { GridView1.SelectedIndex = 0; } fvBpsn.DataBind(); } else { GridView1.Visible = false; } } protected void fvBpsn_ModeChanging(object sender, FormViewModeEventArgs e) { OldMode = (sender as FormView).CurrentMode; } protected void fvBpsn_DataBound(object sender, EventArgs e) { if (fvBpsn.CurrentMode == FormViewMode.Insert || fvBpsn.CurrentMode == FormViewMode.Edit) { RegisterCalendarEvent(fvBpsn, "btnBPSN_BPBDY_DATE", "txtBPSN_BPBDY"); RegisterCalendarEvent(fvBpsn, "btnBPSN_BPAED_DATE", "txtBPSN_BPAED"); RegisterCalendarEvent(fvBpsn, "btnBPSN_BPSDY_DATE", "txtBPSN_BPSDY"); RegisterCalendarEvent(fvBpsn, "btnBPSN_BPEDY_DATE", "txtBPSN_BPEDY"); RegisterLookupEvent(fvBpsn, "btnBPSN_BPBNK_WQRY", "txtBPSN_BPBNK", "txtBPSN_BPBNK,lbBPSN_BPBNKX", "BRML"); if (fvBpsn.CurrentMode == FormViewMode.Insert) { //(fvBpsn.FindControl("ddlBPSN_BPTYP") as RadioButtonList).SelectedIndex = 0; (fvBpsn.FindControl("rbBPSN_BPGNR") as RadioButtonList).SelectedIndex = 0; //(fvBpsn.FindControl("rbBPSN_BPDIS") as RadioButtonList).SelectedIndex = 0; } } switch (fvBpsn.CurrentMode) { case FormViewMode.Insert: SetControlFocus(fvBpsn, "txtBPSN_BPNME"); break; case FormViewMode.Edit: SetControlFocus(fvBpsn, "txtBPSN_BPNME"); break; case FormViewMode.ReadOnly: if (fvBpsn.DataItem != null) ViewState["OLD_BPENO"] = (fvBpsn.DataItem as DataRowView)["BPENO"]; SetControlVisible(fvBpsn, "pnlBank", canUpdate); SetControlEnabled(fvBpsn, "btnInsert", canInsert); SetControlEnabled(fvBpsn, "btnEdit", canUpdate); SetControlEnabled(fvBpsn, "btnDelete", canDelete); SetControlEnabled(fvBpsn, "btnSearch", canSearch); break; } } protected void BPPICValidator_ServerValidate(object source, ServerValidateEventArgs args) { args.IsValid = true; // 處理上傳照片 string ext = ""; FileUpload fu = fvBpsn.FindControl("fuBPSN_BPPIC") as FileUpload; if (fu.HasFile && fu.PostedFile.ContentType.ToLower().IndexOf("image") >= 0) { // 檢查副檔名 ext = Path.GetExtension(fu.FileName).ToLower(); String[] allowedExt = { ".gif", ".jpeg", ".jpg" }; for (int i = 0; i < allowedExt.Length; i++) { if (ext == allowedExt[i]) { fileOK = true; } } // 檢查檔案大小 if (fileOK && fu.PostedFile.ContentLength < 204800) fileOK = true; else fileOK = false; if (!fileOK) { args.IsValid = false; return; } } else { args.IsValid = false; } } protected void dsBPSNForm_Deleted(object sender, SqlDataSourceStatusEventArgs e) { // 資料刪除之後,要刪除圖檔 string bpeno = e.Command.Parameters["@OLD_BPENO"].Value.ToString(); string[] pictures = Directory.GetFiles(RootPath + "/UploadedPicture", bpeno + ".*"); foreach (string picture in pictures) File.Delete(picture); if (File.Exists(RootPath + "/UploadedPicture/T_" + bpeno + ".jpg")) File.Delete(RootPath + "/UploadedPicture/T_" + bpeno + ".jpg"); } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { SetGridViewMouseBehavier(GridView1, e.Row); // GridView_RowDataBound_Shrink_ViewState(sender, e); } protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { foreach (GridViewRow row in GridView1.Rows) SetGridViewMouseBehavier(GridView1, row); } protected void fvBpsn_ItemDeleting(object sender, FormViewDeleteEventArgs e) { // 刪除前檢查 // 1. 檢查是否有派遣紀錄 // 2. 檢查是否有任職紀錄 } protected new bool CheckInput(System.Collections.Specialized.IOrderedDictionary values) { cvMessage.ErrorMessage = ""; cvMessage.IsValid = true; bool result = true; if (values["BPBDY"].ToString() != "") values["BPBDY"] = CheckDate(values["BPBDY"], "請輸入正確的出生年月日", ref result, cvMessage); if (values["BPAED"].ToString() != "") values["BPAED"] = CheckDate(values["BPAED"], "請輸入正確的退伍日期", ref result, cvMessage); if (values["BPSDY"] != null && values["BPSDY"].ToString() != "") values["BPSDY"] = CheckDate(values["BPSDY"], "請輸入正確的到職日期", ref result, cvMessage); if (values["BPEDY"] != null && values["BPEDY"].ToString() != "") values["BPEDY"] = CheckDate(values["BPEDY"], "請輸入正確的離職日期", ref result, cvMessage); if (values["BPEML"].ToString() != "") CheckEmail(values["BPEML"], "電子郵件格式不正確", ref result, cvMessage); if (values["BPEM2"].ToString() != "") CheckEmail(values["BPEM2"], "電子郵件(薪資單)格式不正確", ref result, cvMessage); ProcessCustomValidatorMessage(cvMessage); return result; } protected void fvBpsn_ItemInserting(object sender, FormViewInsertEventArgs e) { e.Cancel = !CheckInput(e.Values); var bptyp = WQuery.GetStringValue(e.Values["BPTYP"]); int bpidnCount = WQuery.GetInt32Value( Query.ExecuteScalar( String.Format("SELECT COUNT(1) FROM BPSNView WHERE BPIDN='{0}' AND BPTYP IN ({1})" , e.Values["BPIDN"] , bptyp == "5" ? "5" : "1,2,3,4") ) ); if (bpidnCount > 0) { e.Cancel = true; cvMessage.IsValid = false; cvMessage.ErrorMessage += "身份證字號已存在
"; ProcessCustomValidatorMessage(cvMessage); } } protected void fvBpsn_ItemUpdating(object sender, FormViewUpdateEventArgs e) { e.Cancel = !CheckInput(e.NewValues); } protected void dsBPSNForm_Selecting(object sender, SqlDataSourceSelectingEventArgs e) { e.Command.Parameters["@TODAY"].Value = String.Format(WGuard1.InvariantCulture, "{0:yyyy-MM-dd}", DateTime.UtcNow.AddHours(8).Date); } protected void btnDoExport_Click(object sender, EventArgs e) { DateTime date1, date2; if (!WGuard1.CheckDate(txtExportDate1.Text, out date1)) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "起始日期不正確"; return; } if (!WGuard1.CheckDate(txtExportDate2.Text, out date2)) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "結束日期不正確"; return; } StringBuilder sql = new StringBuilder(); sql.Append(@" SELECT A.* , B.RAPYN -- 專案 , C.BPPYM RAPYNX -- 專案名稱 , B.RABRH -- 站別 , D.BSSCR RABRHX -- 站別名稱 , B.RAJNO -- 職稱 , E.BPJME RAJNOX -- 職稱名稱 -- , B.RACNO -- 等級 -- , F.BPCME RACNOX -- 等級名稱 , ISNULL(H.RPCPY, G.RPCPY) AS RPCPY -- 公司別 , I.BDNAM BPDPTX -- 部門名稱 , GNR.BSSCR BPGNRX -- 性別名稱 , TYP.BSSCR BPTYPX -- 人員類別名稱 , STP.BSSCR BPSTPX -- 最高學歷名稱 , SGR.BSSCR BPSGRX -- 畢肄業名稱 , IDT.BSSCR BPIDTX -- 身份類別名稱 -- , BNK.BCNAM BPBNKX -- 銀行名稱 , CONCAT((SELECT BNKB.BCNAM FROM BRML BNKB WHERE BNKB.BCNUM=SUBSTRING(A.BPBNK, 1, 3)), BNK.BCNAM) BPBNKX -- 銀行名稱 FROM BPSNView A LEFT OUTER JOIN RASN B ON A.BPENO = B.RANUM AND (B.RASDT <= @DATE2 AND (B.RAEDT IS NULL OR B.RAEDT >= @DATE2) OR B.RAEDT BETWEEN @DATE1 AND @DATE2) LEFT OUTER JOIN BPAA C ON B.RAPYN = C.BPPYN LEFT OUTER JOIN BCLS D ON D.BSCLS = B.RABRH AND D.BSPAR = 'BPSNBRH' LEFT OUTER JOIN BPJA E ON E.BPPYN = B.RAPYN AND E.BPJNO = B.RAJNO -- LEFT OUTER JOIN BPJB F ON F.BPPYN = B.RAPYN AND F.BPJNO = B.RAJNO AND F.BPCNO=B.RACNO LEFT OUTER JOIN RPIR G ON A.BPENO = G.RPENO AND G.RPREN = (SELECT MAX(RPREN) FROM RPIR WHERE RPENO = A.BPENO) LEFT OUTER JOIN RPIB H ON G.RPREN = H.RPREN AND H.RPITM = (SELECT MAX(RPITM) FROM RPIB WHERE RPREN = H.RPREN) LEFT OUTER JOIN BDPT I ON A.BPDPT = I.BDNUM LEFT OUTER JOIN BCLS GNR ON A.BPGNR = GNR.BSCLS AND GNR.BSPAR = 'BPSNGNR' LEFT OUTER JOIN BCLS TYP ON A.BPTYP = TYP.BSCLS AND TYP.BSPAR = 'BPSNTYP' LEFT OUTER JOIN BCLS STP ON A.BPSTP = STP.BSCLS AND STP.BSPAR = 'BPSNSTP' LEFT OUTER JOIN BCLS SGR ON A.BPSGR = SGR.BSCLS AND SGR.BSPAR = 'BPSNSGR' LEFT OUTER JOIN BCLS IDT ON A.BPIDT = IDT.BSCLS AND IDT.BSPAR = 'BPSNIDT' -- LEFT OUTER JOIN BRMLView BNK ON A.BPBNK = BNK.BCNUM LEFT OUTER JOIN BRML BNK ON A.BPBNK = BNK.BCNUM WHERE 1=1 "); var cmd = Query.NewCommand(); Query.AddParam(cmd, "DATE1", date1); Query.AddParam(cmd, "DATE2", date2); Query.AddParam(cmd, "MMDD1", string.Format("{0:MMdd}", date1)); Query.AddParam(cmd, "MMDD2", string.Format("{0:MMdd}", date2)); if (!string.IsNullOrEmpty(txtExportBPENO1.Text) && !string.IsNullOrEmpty(txtExportBPENO2.Text)) { sql.Append(" AND BPENO BETWEEN @BPENO1 AND @BPENO2 "); } else if (!string.IsNullOrEmpty(txtExportBPENO1.Text) && string.IsNullOrEmpty(txtExportBPENO2.Text)) { sql.Append(" AND BPENO >= @BPENO1"); } else if (string.IsNullOrEmpty(txtExportBPENO1.Text) && !string.IsNullOrEmpty(txtExportBPENO2.Text)) { sql.Append(" AND BPENO <= @BPENO2"); } Query.AddParam(cmd, "BPENO1", txtExportBPENO1.Text); Query.AddParam(cmd, "BPENO2", txtExportBPENO2.Text); List rapyns = new List(); List rapynNames = new List(); for (int i = 0; i < cblExportProjects.Items.Count; i++) { if (cblExportProjects.Items[i].Selected && cblExportProjects.Items[i].Value != "") { rapyns.Add(string.Format("@RAPYN{0}", i)); rapynNames.Add(cblExportProjects.Items[i].Text); Query.AddParam(cmd, string.Format("RAPYN{0}", i), cblExportProjects.Items[i].Value); } } if (rapyns.Count > 0) { sql.Append(string.Format(" AND B.RAPYN IN ({0}) ", string.Join(", ", rapyns.ToArray()))); } else { rapynNames.Add("【全部】"); } switch (rblEmploymentStatus.SelectedValue) { case "STAFF": sql.Append(" AND (BPSDY <= @DATE2 AND (BPEDY IS NULL OR BPEDY >= @DATE2) OR BPEDY BETWEEN @DATE1 AND @DATE2) "); // sql.Append(" AND BPEDY IS NULL "); break; case "QUIT": // sql.Append(" AND NOT (BPSDY <= @DATE2 AND (BPEDY IS NULL OR BPEDY >= @DATE2) OR BPEDY BETWEEN @DATE1 AND @DATE2) "); sql.Append(" AND BPEDY IS NOT NULL "); break; } switch (rblWhereType.SelectedValue) { case "BPSDY": sql.Append(" AND BPSDY BETWEEN @DATE1 AND @DATE2 "); break; case "BPEDY": sql.Append(" AND BPEDY BETWEEN @DATE1 AND @DATE2 "); break; case "BPBDY": sql.Append(" AND SUBSTRING(CONVERT(varchar, BPBDY, 112), 5, 4) BETWEEN @MMDD1 AND @MMDD2 "); break; } sql.Append(" ORDER BY BPENO "); cmd.CommandText = sql.ToString(); DataTable t = Query.Select(cmd); if (t.Rows.Count == 0) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "沒有符合條件的資料"; return; } HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.CreateSheet("報表") as HSSFSheet; sheet.ForceFormulaRecalculation = true; Excel excel = new Excel(); excel.WorkBook = workbook; excel.Sheet = sheet; int row = 0; int col = 0; // 抬頭 excel.MergeCell(row, 0, row, 6); excel.SetCellValue(row, 0, "人員資料匯出"); row++; excel.MergeCell(row, 1, row, 5); excel.SetCellValue(row, 0, "日期期間:"); excel.SetCellValue(row, 1, string.Format("{0} ~ {1}", txtExportDate1.Text, txtExportDate2.Text)); row++; excel.SetCellValue(row, 0, "專案:"); excel.MergeCell(row, 1, row, 10); excel.SetCellValue(row, 1, string.Join("/", rapynNames.ToArray())); row++; excel.SetCellValue(row, 0, "員工編號:"); excel.MergeCell(row, 1, row, 5); if (string.IsNullOrEmpty(txtExportBPENO1.Text) && string.IsNullOrEmpty(txtExportBPENO2.Text)) excel.SetCellValue(row, 1, "全部"); if (string.IsNullOrEmpty(txtExportBPENO1.Text) && !string.IsNullOrEmpty(txtExportBPENO2.Text)) excel.SetCellValue(row, 1, string.Format("{0} ~", txtExportBPENO1.Text)); if (!string.IsNullOrEmpty(txtExportBPENO1.Text) && string.IsNullOrEmpty(txtExportBPENO2.Text)) excel.SetCellValue(row, 1, string.Format("~ {0}", txtExportBPENO2.Text)); row++; excel.SetCellValue(row, 0, "在職狀況:"); excel.SetCellValue(row, 1, string.Format("{0}", rblEmploymentStatus.SelectedItem.Text)); row++; excel.SetCellValue(row, 0, "匯出類型:"); excel.SetCellValue(row, 1, string.Format("{0}", rblWhereType.SelectedItem.Text)); row += 2; // 標題 for (int x = 0; x < cblExportColumns.Items.Count; x++) { if (cblExportColumns.Items[x].Selected) { if (cblExportColumns.Items[x].Value == "BPMBL") { excel.SetCellValue(row, col++, "手機一"); excel.SetCellValue(row, col++, "手機二"); continue; } excel.SetCellValue(row, col++, cblExportColumns.Items[x].Text); } } row++; // 內容 foreach (DataRow r in t.Rows) { // BPENO 人員編號 // BPNME 人員姓名 // BOGNRX 性別 // BPIDN 身份證字號 // BPBDY 出生年月日 // BPAAA 戶籍地 BPAZC BPACT BPACY BPASA // BPLLL 現住地 BPLZC BPLCT BPLCY BPLSA // BPHTL 住家電話 // BPMBL 手機 // BPEML 電子郵件 // BPEM2 電子郵件(薪資單) // BPSTPX 最高學歷 // BPSCH 最高學歷學校 // BPSUB 最高學歷科系 // BPIDTX 身份類別 // BPSDY 到職日期 // BPEDY 離職日期 // BPBNKX 銀行 // BPBNK 分行代碼 // BPACC 帳號 // RAPYNX 派駐專案 // RABRHX 站別 // RAJNOX 職稱 col = 0; for (int x = 0; x < cblExportColumns.Items.Count; x++) { if (cblExportColumns.Items[x].Selected) { if (cblExportColumns.Items[x].Value == "BPAAA") { excel.SetCellValue(row, col++, string.Format("{0} {1}{2}{3}", r["BPAZC"], r["BPACT"], r["BPACY"], r["BPASA"])); continue; } if (cblExportColumns.Items[x].Value == "BPLLL") { excel.SetCellValue(row, col++, string.Format("{0} {1}{2}{3}", r["BPLZC"], r["BPLCT"], r["BPLCY"], r["BPLSA"])); continue; } if (cblExportColumns.Items[x].Value == "BPMBL") { excel.SetCellValue(row, col++, string.Format("{0}", r["BPMB1"])); excel.SetCellValue(row, col++, string.Format("{0}", r["BPMB2"])); continue; } if (r[cblExportColumns.Items[x].Value] is System.DateTime) { excel.SetCellValue(row, col++, string.Format(WGuard1.InvariantCulture, "{0:yyyy/MM/dd}", r[cblExportColumns.Items[x].Value])); continue; } excel.SetCellValue(row, col++, string.Format("{0}", r[cblExportColumns.Items[x].Value])); } } row++; } MemoryStream ms = new MemoryStream(); workbook.Write(ms); ResponseWriteFile(ms, String.Format("人員資料匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8))); } protected void btnCancelExport_Click(object sender, EventArgs e) { Search(); GridView1.DataBind(); MultiView1.ActiveViewIndex = 1; } protected void btnExportSearchProject_Click(object sender, EventArgs e) { DateTime date1, date2; if (!WGuard1.CheckDate(txtExportDate1.Text, out date1)) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "起始日期不正確"; return; } if (!WGuard1.CheckDate(txtExportDate2.Text, out date2)) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "結束日期不正確"; return; } cblExportProjects.DataSource = new BpaaDAC().GetBpaaWithTYPlusNoneNotCheckYear(date1.Year, date2.Year); cblExportProjects.DataTextField = "BPPYM"; cblExportProjects.DataValueField = "BPPYN"; cblExportProjects.DataBind(); } protected string GetBDPTList() { var r = new List(); foreach (DataRow row in GetListData("BDPT", "").Rows) { r.Add(new { BDNUM = row["BDNUM"], BDNAM = row["BDNAM"] }); } return Newtonsoft.Json.JsonConvert.SerializeObject(r); } protected void btnBack_Click(object sender, EventArgs e) { // txtBPNUM.Text = WDAC.GetStringValue(ViewState["RPENO"]); ddlBPEDY.SelectedValue = "0"; Search(); GridView1.DataBind(); MultiView1.ActiveViewIndex = 1; } protected void dsBPSNForm_Inserted(object sender, SqlDataSourceStatusEventArgs e) { // } protected void btnExportColumnsSelectAll_Click(object sender, EventArgs e) { foreach (ListItem item in cblExportColumns.Items) { item.Selected = true; } } protected void btnExportColumnsSelectNone_Click(object sender, EventArgs e) { foreach (ListItem item in cblExportColumns.Items) { item.Selected = false; } } }