using NPOI.HSSF.UserModel; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.IO; using System.Linq; using System.Net.Mail; using System.Text; using System.Web.UI; using System.Web.UI.WebControls; using Wellan.Common; using Wellan.Data; public partial class forms_flow_fmSign : Wellan.Web.UI.WUserControlBase { private RparDAC rparDao; private RpabDAC rpabDao; private BsgpDAC bsgpDao; private RyerDAC ryerDao; private RpadDAC rpadDao; private BpsnDAC bpsnDao; private DbConnection conn; private BtmeDAC btmeDao; private RtmeDAC rtmeDao; private BhrdDAC bhrdDao; private List BtmeList; private List RtmeList; private string monthBhrd; private string[] holidayData = null; protected void Page_Load(object sender, EventArgs e) { btnPage4.Visible = bsgpDao.是否是主要簽核(UserId); // btnPage5.Visible = btnPage4.Visible; AddTabButton(MV主要, 0, btnPage1); AddTabButton(MV主要, 1, btnPage2); AddTabButton(MV主要, 2, btnPage3); AddTabButton(MV主要, 3, btnPage4); AddTabButton(MV主要, 4, btnPage5); AddTabButton(MV主要, 5, btnPage6); if (txtDATE1.Text.Length == 0) txtDATE1.Text = WGuard1.WDAYTRAN(DateTime.UtcNow.AddHours(8).Date, 1).ToString("yyyyMMdd"); if (txtDATE2.Text.Length == 0) txtDATE2.Text = WGuard1.WDAYTRAN(DateTime.UtcNow.AddHours(8).Date, 31).ToString("yyyyMMdd"); if (txtDATE3.Text.Length == 0) txtDATE3.Text = WGuard1.WDAYTRAN(DateTime.UtcNow.AddHours(8).Date, 1).ToString("yyyyMMdd"); if (txtDATE4.Text.Length == 0) txtDATE4.Text = WGuard1.WDAYTRAN(DateTime.UtcNow.AddHours(8).Date, 31).ToString("yyyyMMdd"); if (txtYear.Text.Length == 0) txtYear.Text = DateTime.UtcNow.AddHours(8).Date.ToString("yyyy"); btmeDao = new BtmeDAC(Query); rtmeDao = new RtmeDAC(Query); bhrdDao = new BhrdDAC(Query); if (txtCalendarYear.Text == "") { txtCalendarYear.Text = DateTime.UtcNow.AddHours(8).ToString("yyyy"); ddlCalendarMonth.SelectedValue = DateTime.UtcNow.AddHours(8).ToString("MM"); Calendar1.VisibleDate = DateTime.UtcNow.AddHours(8).Date; StoreYYMM(); } if (!IsPostBack) { cb不分頁.Checked = WGuard1.WSetR(Query, string.Format("SIGN_NP_1_{0}", UserId), 1) == "Y"; cb過濾篩選.Checked = WGuard1.WSetR(Query, string.Format("SIGN_FT_1_{0}", UserId), 1) == "Y"; if (cb不分頁.Checked) { cb不分頁_CheckedChanged(sender, e); } if (cb過濾篩選.Checked) { cb過濾篩選_CheckedChanged(sender, e); } rblRPTYP2_SelectedIndexChanged(sender, e); } } protected override void OnInit(EventArgs e) { base.OnInit(e); dsRPAB.ConnectionString = ConnectionString; dsRPARForm.ConnectionString = ConnectionString; dsRPAR_RPTYP.ConnectionString = ConnectionString; dsRPAB2.ConnectionString = ConnectionString; rparDao = new RparDAC(Query); rpabDao = new RpabDAC(Query); bsgpDao = new BsgpDAC(Query); ryerDao = new RyerDAC(Query); rpadDao = new RpadDAC(Query); bpsnDao = new BpsnDAC(Query); RegisterLookupEvent(this, "btnCalendarUser", "txtCalendarUser", "txtCalendarUser,lbCalendarUserName", "BPSN1", ""); } protected void dsRPARGrid_Selecting(object sender, SqlDataSourceSelectingEventArgs e) { e.Command.Parameters["@RPAPU"].Value = UserId; } protected void RPARGrid_PageIndexChanged(object sender, EventArgs e) { (sender as GridView).SelectedIndex = 0; (sender as GridView).DataBind(); OpenSignForm(); } protected void RPARGrid_SelectedIndexChanged(object sender, EventArgs e) { foreach (GridViewRow row in (sender as GridView).Rows) SetGridViewMouseBehavier((sender as GridView), row); OpenSignForm(); } protected void RPARGrid_DataBound(object sender, EventArgs e) { GridView GV = sender as GridView; gvRPAB2.Visible = GV.Rows.Count > 0; if (GV.Rows.Count == 0) { GV.SelectedIndex = -1; pnlSheet.Visible = false; pnlSign.Visible = false; } else { if (GV.Rows.Count > 0 && GV.SelectedIndex == -1) { GV.SelectedIndex = 0; } else if (GV.Rows.Count > 0 && GV.Rows.Count - 1 < GV.SelectedIndex) { GV.SelectedIndex = GV.Rows.Count - 1; } OpenSignForm(); } } protected override void BindTabContent() { base.BindTabContent(); OpenSignForm(); } private void OpenSignForm() { if (MV主要.ActiveViewIndex == 0 && RPARGrid.SelectedIndex == -1) { pnlSheet.Visible = false; pnlSign.Visible = false; return; } if (MV主要.ActiveViewIndex == 3 && RPARGrid2.SelectedIndex == -1) { pnlSheet.Visible = false; pnlSign.Visible = false; return; } string rpren = ""; if (MV主要.ActiveViewIndex == 0) rpren = WDAC.GetStringValue(RPARGrid.SelectedValue); else if (MV主要.ActiveViewIndex == 3) rpren = WDAC.GetStringValue(RPARGrid2.SelectedValue); else { pnlSheet.Visible = false; pnlSign.Visible = false; return; } RPARList t = rparDao.SelectOne(rpren); if (t.Count == 0) { pnlSheet.Visible = false; pnlSign.Visible = false; return; } // RPAPN 應簽關卡數 RPANO 本關關卡 應撈第幾關簽核人 // ============== ============= ============== // 3 1 2 // 3 2 3 // 3 3 - // 2 1 3 // 2 2 - string rpapn = WDAC.GetStringValue(t[0].RPAPN); string rpano = WDAC.GetStringValue(t[0].RPANO); string rppyn = WDAC.GetStringValue(t[0].RPPYN); string rptyp = WDAC.GetStringValue(t[0].RPTYP); string bslvl = ""; switch (rptyp.Substring(0, 1)) { case RPAR_TYPE.T0_請假: dsRPAR_RPTYP.SelectParameters["BSCLS"].DefaultValue = "0%"; MultiView1.SetActiveView(View請假); RPARForm01.ChangeMode(FormViewMode.ReadOnly); RPARForm01.DataBind(); break; case RPAR_TYPE.T1_加班: dsRPAR_RPTYP.SelectParameters["BSCLS"].DefaultValue = "1%"; MultiView1.SetActiveView(View加班); RPARForm02.ChangeMode(FormViewMode.ReadOnly); RPARForm02.DataBind(); break; case RPAR_TYPE.T3_出差: dsRPAR_RPTYP.SelectParameters["BSCLS"].DefaultValue = "3%"; MultiView1.SetActiveView(View差勤); RPARForm03.ChangeMode(FormViewMode.ReadOnly); RPARForm03.DataBind(); break; default: pnlSheet.Visible = false; pnlSign.Visible = false; return; } hfRPREN.Value = rpren; hfRPAPN.Value = rpapn; hfRPANO.Value = rpano; if (rpapn == "3" && rpano == "1") bslvl = "2"; if (rpapn == "3" && rpano == "2") bslvl = "3"; if (rpapn == "2" && rpano == "1") bslvl = "3"; if (bslvl == "") { pnlNext.Visible = false; } else { pnlNext.Visible = true; dsBSGP.SelectParameters["BSPYN"].DefaultValue = rppyn; dsBSGP.SelectParameters["BSLVL"].DefaultValue = bslvl; ddlNext.DataSource = dsBSGP; ddlNext.DataBind(); } pnlSheet.Visible = (MV主要.ActiveViewIndex == 0) || (MV主要.ActiveViewIndex == 3); pnlSign.Visible = MV主要.ActiveViewIndex == 0; if (pnlSheet.Visible) gvRPAD.DataBind(); if (MV主要.ActiveViewIndex == 3) gvRPAB2.DataBind(); } protected void RPARGrid_RowDataBound(object sender, GridViewRowEventArgs e) { SetGridViewMouseBehavier(sender as GridView, e.Row); //GridView_RowDataBound_Shrink_ViewState(sender, e); } // 簽核確定 protected void btnSave_Click(object sender, EventArgs e) { string rpapn = hfRPAPN.Value; string rpano = hfRPANO.Value; conn = Query.NewConnection(Query.ConnectionString); conn.Open(); tran = conn.BeginTransaction(); try { // 核准 if (rblApprove.SelectedValue == "Y") { // 本關簽核確定 rpabDao.核准(tran, hfRPREN.Value, rpano, DateTime.UtcNow.AddHours(8), txtComment.Text, UserId); // 若有下關,送簽 if (rpapn.CompareTo(rpano) > 0) { string 下一關 = Convert.ToString(Convert.ToInt32(rpano) + 1); rpabDao.送簽(tran, hfRPREN.Value, rpapn, 下一關, ddlNext.SelectedValue, UserId); rparDao.送簽(tran, hfRPREN.Value, 下一關, ddlNext.SelectedValue); } // 若無則更新簽核狀況 else { rparDao.簽核(tran, hfRPREN.Value, "Y", DateTime.UtcNow.AddHours(8)); } } // 不核准 else { rpabDao.不核准(tran, hfRPREN.Value, rpano, DateTime.UtcNow.AddHours(8), txtComment.Text, UserId); rparDao.簽核(tran, hfRPREN.Value, "N", DateTime.UtcNow.AddHours(8)); } tran.Commit(); } catch (Exception ex) { tran.Rollback(); cvMessage.IsValid = false; cvMessage.ErrorMessage = "更新資料過程中發生錯誤:\"" + ex.Message + "\""; } finally { if (tran != null) { tran.Dispose(); tran = null; } if (conn != null && conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); conn = null; } } if (txtComment.Text.Trim().Length > 0) { string name = GetLookup("BPSN", UserId, "BPNME"); 發簽核有意見郵件(hfRPREN.Value, name, rblApprove.SelectedValue == "Y" ? "核准" : "不核准", txtComment.Text); } txtComment.Text = ""; rblApprove.SelectedValue = "Y"; RPARGrid.DataBind(); RPARGrid0.DataBind(); } protected void RPARGrid0_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "CancelSign") { string[] args = e.CommandArgument.ToString().Split('|'); if (args.Length > 4) { string rpren = args[0]; string 本關 = Convert.ToString(args[1]); string 總關 = Convert.ToString(args[2]); string rpapd = args[3]; string rpapp = args[4]; conn = Query.NewConnection(Query.ConnectionString); conn.Open(); tran = conn.BeginTransaction(); try { // 不核准的取消 = 取消本關 if (rpapp == "N") { rpabDao.取消本關(tran, rpren, 本關, UserId); rparDao.取消本關(tran, rpren); } // 不是最後一關 else if (總關.CompareTo(本關) > 0) { string 上一關簽核人 = rpabDao.退回上一關(tran, rpren, 本關, UserId); if (上一關簽核人.Length > 0) rparDao.退回上一關(tran, rpren, 上一關簽核人); } // 已經送到最後一關,但是最後一關還沒簽 else if (總關 == 本關 && rpapd == "") { string 上一關簽核人 = rpabDao.退回上一關(tran, rpren, 本關, UserId); if (上一關簽核人.Length > 0) rparDao.退回上一關(tran, rpren, 上一關簽核人); } // 已經送到最後一關,而且最後一關已簽 else if (總關 == 本關 && rpapd != "") { rpabDao.取消本關(tran, rpren, 本關, UserId); rparDao.取消本關(tran, rpren); } tran.Commit(); } catch (Exception ex) { tran.Rollback(); cvMessage.IsValid = false; cvMessage.ErrorMessage = "更新資料過程中發生錯誤:\"" + ex.Message + "\""; } finally { if (tran != null) { tran.Dispose(); tran = null; } if (conn != null) { if (conn.State == ConnectionState.Open) conn.Close(); conn.Dispose(); conn = null; } } } } RPARGrid.DataBind(); RPARGrid0.DataBind(); } /* protected override string GetBPNME(object RPENO) { return base.GetBPNME(RPENO); } */ protected string Get單據種類(object RPTYP, object RPAPN) { string rptyp = WDAC.GetStringValue(RPTYP) + " "; string rpapn = WDAC.GetStringValue(RPAPN) + " "; string s1, s2; switch (rptyp[0].ToString()) { case RPAR_TYPE.T0_請假: s1 = "[請假單]"; break; case RPAR_TYPE.T1_加班: s1 = "[加班單]"; break; case RPAR_TYPE.T3_出差: s1 = "[差旅單]"; break; default: s1 = ""; break; } switch (rpapn[0]) { case 'D': s2 = "(抽單)"; break; default: s2 = ""; break; } return s1 + s2; } protected System.Drawing.Color Get單據類別顏色(object RPAPN, object RPAPP) { string rpapn = WDAC.GetStringValue(RPAPN).Trim(); string rpapp = WDAC.GetStringValue(RPAPP).Trim(); if (rpapn == "D" || rpapp == "N") return System.Drawing.Color.Red; else return System.Drawing.Color.Blue; } //protected void btnChangePage_Click(object sender, EventArgs e) //{ // switch ((sender as Control).ID) // { // case "btnPage1": // MV主要.SetActiveView(View1); // break; // case "btnPage2": // MV主要.SetActiveView(View2); // break; // case "btnPage3": // MV主要.SetActiveView(View3); // break; // } //} protected void dsRPAR我的_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) { DateTime dt; e.Cancel = !CheckDate(txtDATE1.Text, out dt); e.InputParameters["Date1"] = dt; e.Cancel = !CheckDate(txtDATE2.Text, out dt); e.InputParameters["Date2"] = dt; } protected void dsRPAR我的督導_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) { DateTime dt; e.Cancel = !CheckDate(txtDATE3.Text, out dt); e.InputParameters["Date1"] = dt; e.Cancel = !CheckDate(txtDATE4.Text, out dt); e.InputParameters["Date2"] = dt; List RPNUMs = new List(); foreach (ListItem item in cblRPNUM4.Items) { if (item.Selected) RPNUMs.Add(item.Value); } cblRPNUM4.DataBind(); foreach (string rpnum in RPNUMs) { if (cblRPNUM4.Items.FindByValue(rpnum) != null) { cblRPNUM4.Items.FindByValue(rpnum).Selected = true; } } RPNUMs.Clear(); foreach (ListItem item in cblRPNUM4.Items) { if (item.Selected) RPNUMs.Add(item.Value); } e.InputParameters["RPNUM"] = RPNUMs; var rptyp = GetListItemCollectionSelectedValue(cblRPTYP_DETAIL.Items, ",", '\''); e.InputParameters["RPTYP"] = string.IsNullOrEmpty(rptyp) ? rblRPTYP2.SelectedValue : rptyp; e.InputParameters["RPPYN"] = GetListItemCollectionSelectedValue(cbl我督導的專案.Items, ",", '\''); } protected void btnSearch我的_Click(object sender, EventArgs e) { RPARGrid1.DataBind(); if (RPARGrid1.PageCount > 0) RPARGrid1.PageIndex = 0; } protected void btnSearch我的督導_Click(object sender, EventArgs e) { string 表單 = rblRPTYP2.SelectedValue.ToString().ToUpper(); RPARGrid2.DataBind(); } protected void btnExport我的督導_Click(object sender, EventArgs e) { DateTime date1, date2; CheckDate(txtDATE3.Text, out date1); CheckDate(txtDATE4.Text, out date2); List RPNUMs = new List(); foreach (ListItem item in cblRPNUM4.Items) { if (item.Selected) RPNUMs.Add(item.Value); } cblRPNUM4.DataBind(); foreach (string rpnum in RPNUMs) { if (cblRPNUM4.Items.FindByValue(rpnum) != null) { cblRPNUM4.Items.FindByValue(rpnum).Selected = true; } } RPNUMs.Clear(); foreach (ListItem item in cblRPNUM4.Items) { if (item.Selected) RPNUMs.Add(item.Value); } var rptyp = GetListItemCollectionSelectedValue(cblRPTYP_DETAIL.Items, ",", '\''); if ("|明細|統計|".IndexOf("|" + rblExportType.SelectedValue + "|") < 0) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "請選擇匯出格式"; return; } DataTable t = rparDao.Select我的督導專案( UserId , date1 , date2 , (string.IsNullOrEmpty(rptyp) ? rblRPTYP2.SelectedValue : rptyp) , GetListItemCollectionSelectedValue(cbl我督導的專案.Items, ",", '\'') , RPNUMs , false); List rows = t.Select().ToList(); if (t.Rows.Count == 0) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "沒有合乎條件的資料"; return; } switch (rblExportType.SelectedValue) { case "明細": Do明細表(rows); break; case "統計": Do統計表(rows); break; } } private void Do明細表(List rows) { MemoryStream ms; switch (rblRPTYP2.SelectedValue) { case "0%": ms = Do請假明細(rows); ResponseWriteFile(ms, String.Format("請假明細匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8))); break; case "1%": ms = Do加班明細(rows); ResponseWriteFile(ms, String.Format("加班明細匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8))); break; case "3%": ms = Do差旅明細(rows); ResponseWriteFile(ms, String.Format("差旅明細匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8))); break; } } private MemoryStream Do差旅明細(List rows) { 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.SetCellValue(row, col++, "單號"); excel.SetCellValue(row, col++, "人員編號"); excel.SetCellValue(row, col++, "開始日期"); excel.SetCellValue(row, col++, "結束日期"); excel.SetCellValue(row, col++, "開始時間"); excel.SetCellValue(row, col++, "結束時間"); excel.SetCellValue(row, col++, "類別"); excel.SetCellValue(row, col++, "時數"); excel.SetCellValue(row, col++, "汽車"); // F01 excel.SetCellValue(row, col++, "火車"); // F02 excel.SetCellValue(row, col++, "捷運"); // F03 excel.SetCellValue(row, col++, "高鐵"); // F04 excel.SetCellValue(row, col++, "飛機"); // F07 excel.SetCellValue(row, col++, "住宿費"); // F05 excel.SetCellValue(row, col++, "雜費"); // F06 excel.SetCellValue(row, col++, "過路費"); // F08 excel.SetCellValue(row, col++, "差旅費合計"); excel.SetCellValue(row, col++, "事由"); excel.SetCellValue(row, col++, "備註"); row++; // 內容 int totalRPF01 = 0; int totalRPF02 = 0; int totalRPF03 = 0; int totalRPF04 = 0; int totalRPF05 = 0; int totalRPF06 = 0; int totalRPF07 = 0; int totalRPF08 = 0; foreach (DataRow r in rows) { // 從 RPAD 取出差旅費明細 DataTable detail = rpadDao.SelectRpar(r["RPREN"].ToString()); // 加總各類費用 int sumRPF01 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF01"])); int sumRPF02 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF02"])); int sumRPF03 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF03"])); int sumRPF04 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF04"])); int sumRPF05 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF05"])); int sumRPF06 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF06"])); int sumRPF07 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF07"])); int sumRPF08 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF08"])); totalRPF01 += sumRPF01; totalRPF02 += sumRPF02; totalRPF03 += sumRPF03; totalRPF04 += sumRPF04; totalRPF05 += sumRPF05; totalRPF06 += sumRPF06; totalRPF07 += sumRPF07; totalRPF08 += sumRPF08; col = 0; excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPREN"])); excel.SetCellValue(row, col++, string.Format("{0} {1}" , WDAC.GetStringValue(r["RPNUM"]) , GetLookup("BPSN", WDAC.GetStringValue(r["RPNUM"]), "BPNME", ""))); excel.SetCellValue(row, col++, string.Format("{0:yyyyMMdd}", WDAC.GetDateTimeValue(r["RPRDT"]))); excel.SetCellValue(row, col++, string.Format("{0:yyyyMMdd}", WDAC.GetDateTimeValue(r["RPEDT"]))); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRTM"])); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPETM"])); excel.SetCellValue(row, col++, string.Format("{0} {1}" , WDAC.GetStringValue(r["RPTYP"]) , GetLookup("BCLS", WDAC.GetStringValue(r["RPTYP"]), "BSSCR", "BSPAR=`RPARTYP` "))); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , WDAC.GetInt32Value(r["RPTCT"]) , WDAC.GetInt32Value(r["RPTMT"]))); excel.SetCellValue(row, col++, sumRPF01); excel.SetCellValue(row, col++, sumRPF02); excel.SetCellValue(row, col++, sumRPF03); excel.SetCellValue(row, col++, sumRPF04); excel.SetCellValue(row, col++, sumRPF07); excel.SetCellValue(row, col++, sumRPF05); excel.SetCellValue(row, col++, sumRPF06); excel.SetCellValue(row, col++, sumRPF08); excel.SetCellValue(row, col++, WDAC.GetInt32Value(r["RPFTR"])); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRSN"])); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPDOC"])); row++; } // 合計 var totalRPTCT = rows.Select((x) => WDAC.GetInt32Value(x["RPTCT"])).Sum(); var totalRPTMT = rows.Select((x) => WDAC.GetInt32Value(x["RPTMT"])).Sum(); var totalRPFTR = rows.Select((x) => WDAC.GetInt32Value(x["RPFTR"])).Sum(); totalRPTCT += (int)Math.Truncate((double)totalRPTMT / (double)60); totalRPTMT = totalRPTMT % 60; col = 0; excel.SetCellValue(row, col++, "合計"); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, string.Format("{0:####0}:{1:00}", totalRPTCT, totalRPTMT)); excel.SetCellValue(row, col++, totalRPF01); excel.SetCellValue(row, col++, totalRPF02); excel.SetCellValue(row, col++, totalRPF03); excel.SetCellValue(row, col++, totalRPF04); excel.SetCellValue(row, col++, totalRPF07); excel.SetCellValue(row, col++, totalRPF05); excel.SetCellValue(row, col++, totalRPF06); excel.SetCellValue(row, col++, totalRPF08); excel.SetCellValue(row, col++, totalRPFTR); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); // 寬度 col = 0; excel.SetColumnWidth(col++, 20); excel.SetColumnWidth(col++, 20); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 40); excel.SetColumnWidth(col++, 40); MemoryStream ms = new MemoryStream(); workbook.Write(ms); return ms; } private MemoryStream Do加班明細(List rows) { 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.SetCellValue(row, col++, "單號"); excel.SetCellValue(row, col++, "人員編號"); excel.SetCellValue(row, col++, "日期"); excel.SetCellValue(row, col++, "開始時間"); excel.SetCellValue(row, col++, "結束時間"); excel.SetCellValue(row, col++, "類別"); excel.SetCellValue(row, col++, "時數"); excel.SetCellValue(row, col++, "加班費"); excel.SetCellValue(row, col++, "1又1/3時數"); excel.SetCellValue(row, col++, "1又2/3時數"); excel.SetCellValue(row, col++, "1倍時數"); excel.SetCellValue(row, col++, "休息日再延長時數"); excel.SetCellValue(row, col++, "例假日再延長時數"); excel.SetCellValue(row, col++, "事由"); excel.SetCellValue(row, col++, "備註"); row++; // 內容 foreach (DataRow r in rows) { col = 0; excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPREN"])); excel.SetCellValue(row, col++, string.Format("{0} {1}" , WDAC.GetStringValue(r["RPNUM"]) , GetLookup("BPSN", WDAC.GetStringValue(r["RPNUM"]), "BPNME", ""))); excel.SetCellValue(row, col++, string.Format("{0:yyyyMMdd}", WDAC.GetDateTimeValue(r["RPRDT"]))); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRTM"])); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPETM"])); excel.SetCellValue(row, col++, string.Format("{0} {1}" , WDAC.GetStringValue(r["RPTYP"]) , GetLookup("BCLS", WDAC.GetStringValue(r["RPTYP"]), "BSSCR", "BSPAR=`RPARTYP` "))); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , WDAC.GetInt32Value(r["RPTCT"]) , WDAC.GetInt32Value(r["RPTMT"]))); excel.SetCellValue(row, col++, WDAC.GetInt32Value(r["RPFTR"])); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , WDAC.GetInt32Value(r["RPTC1"]) , WDAC.GetInt32Value(r["RPTM1"]))); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , WDAC.GetInt32Value(r["RPTC2"]) , WDAC.GetInt32Value(r["RPTM2"]))); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , WDAC.GetInt32Value(r["RPTC3"]) , WDAC.GetInt32Value(r["RPTM3"]))); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , WDAC.GetInt32Value(r["RPTC4"]) , WDAC.GetInt32Value(r["RPTM4"]))); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , WDAC.GetInt32Value(r["RPTC5"]) , WDAC.GetInt32Value(r["RPTM5"]))); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRSN"])); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPDOC"])); row++; } // 合計 var sumRPTCT = rows.Select((x) => WDAC.GetInt32Value(x["RPTCT"])).Sum(); var sumRPTMT = rows.Select((x) => WDAC.GetInt32Value(x["RPTMT"])).Sum(); var sumRPTC1 = rows.Select((x) => WDAC.GetInt32Value(x["RPTC1"])).Sum(); var sumRPTM1 = rows.Select((x) => WDAC.GetInt32Value(x["RPTM1"])).Sum(); var sumRPTC2 = rows.Select((x) => WDAC.GetInt32Value(x["RPTC2"])).Sum(); var sumRPTM2 = rows.Select((x) => WDAC.GetInt32Value(x["RPTM2"])).Sum(); var sumRPTC3 = rows.Select((x) => WDAC.GetInt32Value(x["RPTC3"])).Sum(); var sumRPTM3 = rows.Select((x) => WDAC.GetInt32Value(x["RPTM3"])).Sum(); var sumRPTC4 = rows.Select((x) => WDAC.GetInt32Value(x["RPTC4"])).Sum(); var sumRPTM4 = rows.Select((x) => WDAC.GetInt32Value(x["RPTM4"])).Sum(); var sumRPTC5 = rows.Select((x) => WDAC.GetInt32Value(x["RPTC5"])).Sum(); var sumRPTM5 = rows.Select((x) => WDAC.GetInt32Value(x["RPTM5"])).Sum(); var sumRPFTR = rows.Select((x) => WDAC.GetInt32Value(x["RPFTR"])).Sum(); sumRPTCT += (int)Math.Truncate((double)sumRPTMT / (double)60); sumRPTMT = sumRPTMT % 60; sumRPTC1 += (int)Math.Truncate((double)sumRPTM1 / (double)60); sumRPTM1 = sumRPTM1 % 60; sumRPTC2 += (int)Math.Truncate((double)sumRPTM2 / (double)60); sumRPTM2 = sumRPTM2 % 60; sumRPTC3 += (int)Math.Truncate((double)sumRPTM3 / (double)60); sumRPTM3 = sumRPTM3 % 60; sumRPTC4 += (int)Math.Truncate((double)sumRPTM4 / (double)60); sumRPTM4 = sumRPTM4 % 60; sumRPTC5 += (int)Math.Truncate((double)sumRPTM5 / (double)60); sumRPTM5 = sumRPTM5 % 60; col = 0; excel.SetCellValue(row, col++, "合計"); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTCT, sumRPTMT)); excel.SetCellValue(row, col++, sumRPFTR); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTC1, sumRPTM1)); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTC2, sumRPTM2)); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTC3, sumRPTM3)); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTC4, sumRPTM4)); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTC5, sumRPTM5)); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); // 寬度 col = 0; excel.SetColumnWidth(col++, 20); excel.SetColumnWidth(col++, 20); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 24); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 18); excel.SetColumnWidth(col++, 18); excel.SetColumnWidth(col++, 40); excel.SetColumnWidth(col++, 40); MemoryStream ms = new MemoryStream(); workbook.Write(ms); return ms; } private MemoryStream Do請假明細(List rows) { 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.SetCellValue(row, col++, "單號"); excel.SetCellValue(row, col++, "人員編號"); excel.SetCellValue(row, col++, "開始日期"); excel.SetCellValue(row, col++, "結束日期"); excel.SetCellValue(row, col++, "開始時間"); excel.SetCellValue(row, col++, "結束時間"); excel.SetCellValue(row, col++, "類別"); excel.SetCellValue(row, col++, "時數"); excel.SetCellValue(row, col++, "扣薪金額"); excel.SetCellValue(row, col++, "事由"); excel.SetCellValue(row, col++, "備註"); row++; // 內容 foreach (DataRow r in rows) { col = 0; excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPREN"])); excel.SetCellValue(row, col++, string.Format("{0} {1}" , WDAC.GetStringValue(r["RPNUM"]) , GetLookup("BPSN", WDAC.GetStringValue(r["RPNUM"]), "BPNME", ""))); excel.SetCellValue(row, col++, string.Format("{0:yyyyMMdd}", WDAC.GetDateTimeValue(r["RPRDT"]))); excel.SetCellValue(row, col++, string.Format("{0:yyyyMMdd}", WDAC.GetDateTimeValue(r["RPEDT"]))); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRTM"])); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPETM"])); excel.SetCellValue(row, col++, string.Format("{0} {1}" , WDAC.GetStringValue(r["RPTYP"]) , GetLookup("BCLS", WDAC.GetStringValue(r["RPTYP"]), "BSSCR", "BSPAR=`RPARTYP` "))); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , WDAC.GetInt32Value(r["RPTCT"]) , WDAC.GetInt32Value(r["RPTMT"]))); excel.SetCellValue(row, col++, WDAC.GetInt32Value(r["RPFTR"])); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRSN"])); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPDOC"])); row++; } // 合計 var sumRPTCT = rows.Select((x) => WDAC.GetInt32Value(x["RPTCT"])).Sum(); var sumRPTMT = rows.Select((x) => WDAC.GetInt32Value(x["RPTMT"])).Sum(); var sumRPFTR = rows.Select((x) => WDAC.GetInt32Value(x["RPFTR"])).Sum(); sumRPTCT += (int)Math.Truncate((double)sumRPTMT / (double)60); sumRPTMT = sumRPTMT % 60; col = 0; excel.SetCellValue(row, col++, "合計"); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTCT, sumRPTMT)); excel.SetCellValue(row, col++, sumRPFTR); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); // 寬度 col = 0; excel.SetColumnWidth(col++, 20); excel.SetColumnWidth(col++, 20); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 40); excel.SetColumnWidth(col++, 40); MemoryStream ms = new MemoryStream(); workbook.Write(ms); return ms; } private void Do統計表(List rows) { var c = new RPARGroupComparer(); var groups = rows.OrderBy(o => WDAC.GetStringValue(o["RPTYP"])) .ThenBy(o => WDAC.GetStringValue(o["RPPYN"])) .ThenBy(o => WDAC.GetStringValue(o["RPNUM"])) .GroupBy(r => new RPARGroup() { RPPYN = WDAC.GetStringValue(r["RPPYN"]), RPNUM = WDAC.GetStringValue(r["RPNUM"]), RPTYP = WDAC.GetStringValue(r["RPTYP"]) }, c); MemoryStream ms; switch (rblRPTYP2.SelectedValue) { case "0%": ms = Do請假統計(rows, groups); ResponseWriteFile(ms, String.Format("請假統計匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8))); break; case "1%": ms = Do加班統計(rows, groups); ResponseWriteFile(ms, String.Format("加班統計匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8))); break; case "3%": ms = Do差旅統計(rows, groups); ResponseWriteFile(ms, String.Format("差旅統計匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8))); break; } } private MemoryStream Do差旅統計(List rows, IEnumerable> groups) { 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.SetCellValue(row, col++, "類別"); excel.SetCellValue(row, col++, "人員編號"); excel.SetCellValue(row, col++, "時數"); excel.SetCellValue(row, col++, "差旅費"); excel.SetCellValue(row, col++, "專案名稱"); excel.SetCellValue(row, col++, "備註"); row++; // 明細 var totalRPTCT = 0; var totalRPTMT = 0; var totalRPFTR = 0; foreach (var g in groups) { var k = g.Key; var sumRPTCT = g.Select(x => WDAC.GetInt32Value(x["RPTCT"])).Sum(); var sumRPTMT = g.Select(x => WDAC.GetInt32Value(x["RPTMT"])).Sum(); var sumRPFTR = g.Select(x => WDAC.GetInt32Value(x["RPFTR"])).Sum(); var sumRPDOC = string.Join("/", g.Select(x => WDAC.GetStringValue(x["RPDOC"])).ToArray()); totalRPTCT += sumRPTCT; totalRPTMT += sumRPTMT; totalRPFTR += sumRPFTR; sumRPTCT += (int)Math.Truncate((double)sumRPTMT / (double)60); sumRPTMT = sumRPTMT % 60; col = 0; excel.SetCellValue(row, col++, string.Format("{0} {1}" , k.RPTYP , GetLookup("BCLS", k.RPTYP, "BSSCR", "BSPAR=`RPARTYP` "))); excel.SetCellValue(row, col++, string.Format("{0} {1}" , k.RPNUM , GetLookup("BPSN", k.RPNUM, "BPNME", ""))); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , sumRPTCT , sumRPTMT)); excel.SetCellValue(row, col++, sumRPFTR); excel.SetCellValue(row, col++, GetLookup("BPAA", k.RPPYN, "BPPYM", "")); excel.SetCellValue(row, col++, sumRPDOC); row++; } // 合計 totalRPTCT += (int)Math.Truncate((double)totalRPTMT / (double)60); totalRPTMT = totalRPTMT % 60; col = 0; excel.SetCellValue(row, col++, "合計"); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", totalRPTCT, totalRPTMT)); excel.SetCellValue(row, col++, totalRPFTR); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); // 寬度 col = 0; excel.SetColumnWidth(col++, 25); excel.SetColumnWidth(col++, 15); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 40); excel.SetColumnWidth(col++, 100); MemoryStream ms = new MemoryStream(); workbook.Write(ms); return ms; } private MemoryStream Do加班統計(List rows, IEnumerable> groups) { 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.SetCellValue(row, col++, "類別"); excel.SetCellValue(row, col++, "人員編號"); excel.SetCellValue(row, col++, "時數"); excel.SetCellValue(row, col++, "加班費"); excel.SetCellValue(row, col++, "1又1/3時數"); excel.SetCellValue(row, col++, "1又2/3時數"); excel.SetCellValue(row, col++, "1倍時數"); excel.SetCellValue(row, col++, "休息日再延長時數"); excel.SetCellValue(row, col++, "例假日再延長時數"); excel.SetCellValue(row, col++, "專案名稱"); excel.SetCellValue(row, col++, "備註"); row++; // 明細 var totalRPTCT = 0; var totalRPTMT = 0; var totalRPFTR = 0; foreach (var g in groups) { var k = g.Key; var sumRPTCT = g.Select(x => WDAC.GetInt32Value(x["RPTCT"])).Sum(); var sumRPTMT = g.Select(x => WDAC.GetInt32Value(x["RPTMT"])).Sum(); var sumRPTC1 = g.Select(x => WDAC.GetInt32Value(x["RPTC1"])).Sum(); var sumRPTM1 = g.Select(x => WDAC.GetInt32Value(x["RPTM1"])).Sum(); var sumRPTC2 = g.Select(x => WDAC.GetInt32Value(x["RPTC2"])).Sum(); var sumRPTM2 = g.Select(x => WDAC.GetInt32Value(x["RPTM2"])).Sum(); var sumRPTC3 = g.Select(x => WDAC.GetInt32Value(x["RPTC3"])).Sum(); var sumRPTM3 = g.Select(x => WDAC.GetInt32Value(x["RPTM3"])).Sum(); var sumRPTC4 = g.Select(x => WDAC.GetInt32Value(x["RPTC4"])).Sum(); var sumRPTM4 = g.Select(x => WDAC.GetInt32Value(x["RPTM4"])).Sum(); var sumRPTC5 = g.Select(x => WDAC.GetInt32Value(x["RPTC5"])).Sum(); var sumRPTM5 = g.Select(x => WDAC.GetInt32Value(x["RPTM5"])).Sum(); var sumRPFTR = g.Select(x => WDAC.GetInt32Value(x["RPFTR"])).Sum(); var sumRPDOC = string.Join("/", g.Select(x => WDAC.GetStringValue(x["RPDOC"])).ToArray()); totalRPTCT += sumRPTCT; totalRPTMT += sumRPTMT; totalRPFTR += sumRPFTR; sumRPTCT += (int)Math.Truncate((double)sumRPTMT / (double)60); sumRPTMT = sumRPTMT % 60; sumRPTC1 += (int)Math.Truncate((double)sumRPTM1 / (double)60); sumRPTM1 = sumRPTM1 % 60; sumRPTC2 += (int)Math.Truncate((double)sumRPTM2 / (double)60); sumRPTM2 = sumRPTM2 % 60; sumRPTC3 += (int)Math.Truncate((double)sumRPTM3 / (double)60); sumRPTM3 = sumRPTM3 % 60; sumRPTC4 += (int)Math.Truncate((double)sumRPTM4 / (double)60); sumRPTM4 = sumRPTM4 % 60; sumRPTC5 += (int)Math.Truncate((double)sumRPTM5 / (double)60); sumRPTM5 = sumRPTM5 % 60; col = 0; excel.SetCellValue(row, col++, string.Format("{0} {1}" , k.RPTYP , GetLookup("BCLS", k.RPTYP, "BSSCR", "BSPAR=`RPARTYP` "))); excel.SetCellValue(row, col++, string.Format("{0} {1}" , k.RPNUM , GetLookup("BPSN", k.RPNUM, "BPNME", ""))); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , sumRPTCT , sumRPTMT)); excel.SetCellValue(row, col++, sumRPFTR); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , sumRPTC1 , sumRPTM1)); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , sumRPTC2 , sumRPTM2)); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , sumRPTC3 , sumRPTM3)); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , sumRPTC4 , sumRPTM4)); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , sumRPTC5 , sumRPTM5)); excel.SetCellValue(row, col++, GetLookup("BPAA", k.RPPYN, "BPPYM", "")); excel.SetCellValue(row, col++, sumRPDOC); row++; } // 合計 totalRPTCT += (int)Math.Truncate((double)totalRPTMT / (double)60); totalRPTMT = totalRPTMT % 60; col = 0; excel.SetCellValue(row, col++, "合計"); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", totalRPTCT, totalRPTMT)); excel.SetCellValue(row, col++, totalRPFTR); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); // 寬度 col = 0; excel.SetColumnWidth(col++, 25); excel.SetColumnWidth(col++, 15); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 15); excel.SetColumnWidth(col++, 15); excel.SetColumnWidth(col++, 40); excel.SetColumnWidth(col++, 100); MemoryStream ms = new MemoryStream(); workbook.Write(ms); return ms; } private MemoryStream Do請假統計(List rows, IEnumerable> groups) { 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.SetCellValue(row, col++, "類別"); excel.SetCellValue(row, col++, "人員編號"); excel.SetCellValue(row, col++, "時數"); excel.SetCellValue(row, col++, "扣薪金額"); excel.SetCellValue(row, col++, "專案名稱"); excel.SetCellValue(row, col++, "備註"); row++; // 明細 var totalRPTCT = 0; var totalRPTMT = 0; var totalRPFTR = 0; foreach (var g in groups) { var k = g.Key; var sumRPTCT = g.Select(x => WDAC.GetInt32Value(x["RPTCT"])).Sum(); var sumRPTMT = g.Select(x => WDAC.GetInt32Value(x["RPTMT"])).Sum(); var sumRPFTR = g.Select(x => WDAC.GetInt32Value(x["RPFTR"])).Sum(); var sumRPDOC = string.Join("/", g.Select(x => WDAC.GetStringValue(x["RPDOC"])).ToArray()); sumRPTCT += (int)Math.Truncate((double)sumRPTMT / (double)60); sumRPTMT = sumRPTMT % 60; totalRPTCT += sumRPTCT; totalRPTMT += sumRPTMT; totalRPFTR += sumRPFTR; col = 0; excel.SetCellValue(row, col++, string.Format("{0} {1}" , k.RPTYP , GetLookup("BCLS", k.RPTYP, "BSSCR", "BSPAR=`RPARTYP` "))); excel.SetCellValue(row, col++, string.Format("{0} {1}" , k.RPNUM , GetLookup("BPSN", k.RPNUM, "BPNME", ""))); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}" , sumRPTCT , sumRPTMT)); excel.SetCellValue(row, col++, sumRPFTR); excel.SetCellValue(row, col++, GetLookup("BPAA", k.RPPYN, "BPPYM", "")); excel.SetCellValue(row, col++, sumRPDOC); row++; } // 合計 totalRPTCT += (int)Math.Truncate((double)totalRPTMT / (double)60); totalRPTMT = totalRPTMT % 60; col = 0; excel.SetCellValue(row, col++, "合計"); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", totalRPTCT, totalRPTMT)); excel.SetCellValue(row, col++, totalRPFTR); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); // 寬度 col = 0; excel.SetColumnWidth(col++, 25); excel.SetColumnWidth(col++, 15); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 40); excel.SetColumnWidth(col++, 100); MemoryStream ms = new MemoryStream(); workbook.Write(ms); return ms; } protected string Get關卡名稱(object RPANO, object RPAPN) { string rpano = WDAC.GetStringValue(RPANO); string rpapn = WDAC.GetStringValue(RPAPN); if (rpano == "1") return "第 1 關"; else if ((rpano == "2" && rpapn == "2") || (rpano == "3" && rpapn == "3")) return "第 2 關"; else if (rpano == "2" && rpapn == "3") return "長官關"; else if (rpano == "D") return "抽單"; else return rpano; } private new void CalcFields(SqlDataSourceCommandEventArgs e) { // 取出計算需要的資料 string rppyn = e.Command.Parameters["@RPPYN"].Value.ToString(); string rpnum = e.Command.Parameters["@RPNUM"].Value.ToString(); string rptyp = e.Command.Parameters["@RPTYP"].Value.ToString(); int rptct = Convert.ToInt32(e.Command.Parameters["@RPTCT"].Value); int rpftr = Convert.ToInt32(e.Command.Parameters["@RPFTR"].Value); DateTime rprdt = Convert.ToDateTime(e.Command.Parameters["@RPRDT"].Value); TimeCalc timeCalc = new TimeCalc(); 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); string 起時; string 迄時; switch (MultiView1.ActiveViewIndex) { case 0: // 請假,要計算缺勤扣款與請假時數 // 計算請假時數 DateTime rpedt = Convert.ToDateTime(e.Command.Parameters["@RPEDT"].Value); 起時 = e.Command.Parameters["@RPRTM"].Value.ToString(); 迄時 = e.Command.Parameters["@RPETM"].Value.ToString(); rptct = timeCalc.計算請假總時數(rpnum, rprdt, rpedt, 起時, 迄時, rptyp, bpott == "1"); e.Command.Parameters["@RPTCT"].Value = rptct; // 計算請假扣款 Absent absent = new Absent(); absent.bpsrm = bpsrm; absent.bpp02 = bpp02; absent.Formula = bplve; // e.Command.Parameters["@RPFTR"].Value = absent.Add(rptyp, rptct); e.Command.Parameters["@RPFTR"].Value = absent.Add(rpnum, rptyp, rprdt, rpedt, 起時, 迄時, rprdt, rpedt, bpott == "1"); break; case 1: // 加班,要計算加班費與前二、後二、假日加班時數 // 計算加班時數 起時 = e.Command.Parameters["@RPRTM"].Value.ToString(); 迄時 = e.Command.Parameters["@RPETM"].Value.ToString(); rptct = timeCalc.計算加班時數(rpnum, rprdt, 起時, 迄時, RPAR_TYPE.休息日加班(rptyp)); e.Command.Parameters["@RPTCT"].Value = rptct; int RPTC1 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC1"].Value) * 60 + (bpott == "2" ? WDAC.GetInt32Value(e.Command.Parameters["@RPTM1"].Value) : 0); int RPTC2 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC2"].Value) * 60 + (bpott == "2" ? WDAC.GetInt32Value(e.Command.Parameters["@RPTM2"].Value) : 0); int RPTC3 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC3"].Value) * 60 + (bpott == "2" ? WDAC.GetInt32Value(e.Command.Parameters["@RPTM3"].Value) : 0); int RPTC4 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC4"].Value) * 60 + (bpott == "2" ? WDAC.GetInt32Value(e.Command.Parameters["@RPTM4"].Value) : 0); int RPTC5 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC5"].Value) * 60 + (bpott == "2" ? WDAC.GetInt32Value(e.Command.Parameters["@RPTM5"].Value) : 0); 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; if (rptct < RPTC1 + RPTC2 + RPTC3 + RPTC4 + RPTC5) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "各項時數之和 不可大於 加班時數!"; e.Cancel = true; } ExtraWork extraWork = new ExtraWork(); extraWork.Add(rptyp, rprdt, rptct, bpsrm, bpp02, bpbft, bpaft, bphol, bpovr, bpott, RPTC1, RPTC2, RPTC3, RPTC4, RPTC5); e.Command.Parameters["@RPFTR"].Value = extraWork.RPTA1 + extraWork.RPTA2 + extraWork.RPTA3 + extraWork.RPTA4 + extraWork.RPTA5; e.Command.Parameters["@RPTA1"].Value = extraWork.RPTA1; e.Command.Parameters["@RPTA2"].Value = extraWork.RPTA2; e.Command.Parameters["@RPTA3"].Value = extraWork.RPTA3; e.Command.Parameters["@RPTA4"].Value = extraWork.RPTA4; e.Command.Parameters["@RPTA5"].Value = extraWork.RPTA5; break; case 2: 起時 = e.Command.Parameters["@RPRTM"].Value.ToString(); 迄時 = e.Command.Parameters["@RPETM"].Value.ToString(); rptct = timeCalc.計算加班時數(rpnum, rprdt, 起時, 迄時, "13,14".Contains(rptyp)); e.Command.Parameters["@RPTCT"].Value = rptct; break; } } protected void dsRpad_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) { if (MV主要.ActiveViewIndex == 0) e.InputParameters["rpren"] = RPARGrid.SelectedValue; else if (MV主要.ActiveViewIndex == 3) e.InputParameters["rpren"] = RPARGrid2.SelectedValue; } protected void dsRPARForm_Selecting(object sender, SqlDataSourceSelectingEventArgs e) { if (MV主要.ActiveViewIndex == 0) e.Command.Parameters["@RPREN"].Value = RPARGrid.SelectedValue; else if (MV主要.ActiveViewIndex == 3) e.Command.Parameters["@RPREN"].Value = RPARGrid2.SelectedValue; } protected void dsRPARForm_Updating(object sender, SqlDataSourceCommandEventArgs e) { bool result = true; e.Command.Parameters["@RPRDT"].Value = CheckDate(e.Command.Parameters["@RPRDT"].Value, "請輸入正確的開始日期", ref result, cvMessage); if (MultiView1.ActiveViewIndex == 0 || MultiView1.ActiveViewIndex == 2) e.Command.Parameters["@RPEDT"].Value = CheckDate(e.Command.Parameters["@RPEDT"].Value, "請輸入正確的結束日期", ref result, cvMessage); e.Cancel = !result; CalcFields(e); if (e.Cancel) return; TimeCalc timeCalc = new TimeCalc(); conn = Query.NewConnection(Query.ConnectionString); conn.Open(); tran = conn.BeginTransaction(); try { e.Command.Connection = conn; e.Command.Transaction = tran; string rpnum = WDAC.GetStringValue(e.Command.Parameters["@RPNUM"].Value); string rpren = WDAC.GetStringValue(e.Command.Parameters["@RPREN"].Value); string 新類別 = WDAC.GetStringValue(e.Command.Parameters["@RPTYP"].Value); DateTime 新日期 = WDAC.GetDateTimeValue(e.Command.Parameters["@RPRDT"].Value); int 新時數 = WDAC.GetInt32Value(e.Command.Parameters["@RPTCT"].Value); string rppyn = WDAC.GetStringValue(e.Command.Parameters["@RPPYN"].Value); string bpott = new BpaaDAC(Query).GetOverTimeType(rppyn); string oldRPTYP = WDAC.GetStringValue(Query.ExecuteScalar("SELECT RPTYP FROM RPAR WHERE RPREN='" + rpren + "'", tran)); // 如果是請假 if (MultiView1.ActiveViewIndex == 0) { // 舊資料如果是補休,要取消沖補休 if (oldRPTYP == RPAR_TYPE.T00_補休) { rparDao.取消沖補休(tran, rpren); } // 舊資料如果是特休,要取消沖特休 if (oldRPTYP == RPAR_TYPE.T01_特休) { ryerDao.取消沖特休(tran, rpren); } // 新資料如果是補休,要沖補休 if (新類別 == RPAR_TYPE.T00_補休) { e.Command.Parameters["@RPDOC"].Value = rparDao.沖補休(tran, rpren, rpnum, 新日期, 新時數); } // 新資料如果是特休,要沖特休 if (新類別 == RPAR_TYPE.T01_特休) { ryerDao.沖特休(rpnum, 新日期.Year, 新時數, tran); } // 新資料如果是事假或家庭照顧假,要檢查可用事假時數 if (新類別 == RPAR_TYPE.T02_事假 || 新類別 == RPAR_TYPE.T0B_家庭照顧假) { int 年度事假; if (int.TryParse(WGuard1.WSetR("UNRPARTIME", 5), out 年度事假)) 年度事假 = 年度事假 * 60; else 年度事假 = 112 * 60; if (年度事假 - rparDao.Get已請事假(UserId, 新日期, rpren) - 新時數 < 0) e.Command.Parameters["@RPALT"].Value = "可用事假時數不足"; else e.Command.Parameters["@RPALT"].Value = ""; } // 新資料如果是病假,要檢查可用病假時數 if (新類別 == RPAR_TYPE.T03_病假) { int 年度病假; if (int.TryParse(WGuard1.WSetR("UNRPARTIME", 6), out 年度病假)) 年度病假 = 年度病假 * 60; else 年度病假 = 240 * 60; if (年度病假 - rparDao.Get已請病假(UserId, 新日期, rpren) - 新時數 < 0) e.Command.Parameters["@RPALT"].Value = "可用病假時數不足"; else e.Command.Parameters["@RPALT"].Value = ""; } } // 加班 else if (MultiView1.ActiveViewIndex == 1) { string 起時 = e.Command.Parameters["@RPRTM"].Value.ToString(); string 迄時 = e.Command.Parameters["@RPETM"].Value.ToString(); 新時數 = timeCalc.計算加班時數(rpnum, 新日期, 起時, 迄時, "13,14".Contains(新類別)); e.Command.Parameters["@RPTCT"].Value = 新時數; } // 差旅 else if (MultiView1.ActiveViewIndex == 2) { DateTime 起日 = WDAC.GetDateTimeValue(e.Command.Parameters["@RPRDT"].Value); DateTime 迄日 = WDAC.GetDateTimeValue(e.Command.Parameters["@RPEDT"].Value); string 起時 = e.Command.Parameters["@RPRTM"].Value.ToString(); string 迄時 = e.Command.Parameters["@RPETM"].Value.ToString(); 新時數 = timeCalc.計算差旅時數(rpnum, 起日, 迄日, 起時, 迄時); e.Command.Parameters["@RPTCT"].Value = 新時數; } } 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 RPARForm_ItemUpdated(object sender, FormViewUpdatedEventArgs e) { if (MV主要.ActiveViewIndex == 3) { RPARGrid2.DataBind(); } } protected void btnUpdate_Click(object sender, EventArgs e) { switch (MultiView1.ActiveViewIndex) { case 0: RPARForm01.ChangeMode(FormViewMode.Edit); break; case 1: RPARForm02.ChangeMode(FormViewMode.Edit); break; case 2: RPARForm03.ChangeMode(FormViewMode.Edit); break; } } protected string GetPhraseClientClick(string rparType, object BPCNT) { string CID = ""; switch (rparType) { case "1": CID = (RPARForm02.FindControl("txtRPAR_RPDOC") as Control).ClientID; break; case "3": CID = (RPARForm03.FindControl("txtRPAR_RPDOC") as Control).ClientID; break; } if (CID.Length > 0) return String.Format("javascript:FillMessage(\"{0}\", \"{1}\");return false;", CID, BPCNT); else return "javascript:return false;"; } protected void btnInsertRPAD_Click(object sender, EventArgs e) { string _RPREN = WDAC.GetStringValue(RPARForm03.SelectedValue); //_RPSTP = WDAC.GetStringValue(ViewState["RPSTP"]); //_RPEDP = WDAC.GetStringValue(ViewState["RPEDP"]); DateTime rpdat; CheckDate(txtRPDAT.Text, out rpdat); rpadDao.InsertOne(UserId, _RPREN, txtRPSTP.Text, txtRPEDP.Text, WDAC.GetInt32Value(txtRPF01.Text), WDAC.GetInt32Value(txtRPF02.Text), WDAC.GetInt32Value(txtRPF03.Text), WDAC.GetInt32Value(txtRPF04.Text), WDAC.GetInt32Value(txtRPF05.Text), WDAC.GetInt32Value(txtRPF06.Text), WDAC.GetInt32Value(txtRPF07.Text), WDAC.GetInt32Value(txtRPF08.Text), 0, 0, rpdat, txtRPVCH.Text, txtRPDOC.Text); gvRPAD.DataBind(); RPARForm03.DataBind(); RPARGrid2.DataBind(); txtRPDAT.Text = ""; //txtRPSTP.Text = _RPSTP; //txtRPEDP.Text = _RPEDP; txtRPF01.Text = ""; txtRPF02.Text = ""; txtRPF03.Text = ""; txtRPF04.Text = ""; txtRPF05.Text = ""; txtRPF06.Text = ""; txtRPF07.Text = ""; txtRPF08.Text = ""; txtRPVCH.Text = ""; txtRPDOC.Text = ""; } protected void dsRpad_Updating(object sender, ObjectDataSourceMethodEventArgs e) { DateTime rpdat; CheckDate(WDAC.GetStringValue(e.InputParameters["rpdat"]), out rpdat); e.InputParameters["rpdat"] = rpdat; e.InputParameters["rpf09"] = 0; e.InputParameters["rpf10"] = 0; } protected void dsRpad_Updated(object sender, ObjectDataSourceStatusEventArgs e) { if (MV主要.ActiveViewIndex == 3) { RPARForm03.DataBind(); RPARGrid2.DataBind(); } } protected void dsRpad_Deleted(object sender, ObjectDataSourceStatusEventArgs e) { if (MV主要.ActiveViewIndex == 3) { RPARForm03.DataBind(); RPARGrid2.DataBind(); } } protected void gvRPAD_DataBound(object sender, EventArgs e) { //gvRPAD.Columns[14].Visible = MV主要.ActiveViewIndex == 3; pnlRpadInsert.Visible = MV主要.ActiveViewIndex == 3; } protected void RPARForm_DataBound(object sender, EventArgs e) { if ((sender as FormView).CurrentMode == FormViewMode.Edit) { FormView fv = sender as FormView; RegisterLookupEvent(fv, "btnRPAR_RPAGT_WQRY", "txtRPAR_RPAGT", "txtRPAR_RPAGT,txtRPAR_RPAGM", "BPSNEML", "EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + (fv.FindControl("hfRPAR_RPPYN") as HiddenField).Value + "' AND RANUM=BPENO)", false); } } protected void ds我督導專案的人員_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) { DateTime dt; e.Cancel = !CheckDate(txtDATE3.Text, out dt); e.InputParameters["Date1"] = dt; e.Cancel = !CheckDate(txtDATE4.Text, out dt); e.InputParameters["Date2"] = dt; var rptyp = GetListItemCollectionSelectedValue(cblRPTYP_DETAIL.Items, ",", '\''); e.InputParameters["RPTYP"] = string.IsNullOrEmpty(rptyp) ? rblRPTYP2.SelectedValue : rptyp; e.InputParameters["RPPYN"] = GetListItemCollectionSelectedValue(cbl我督導的專案.Items, ",", '\''); } protected void RPARGrid1_DataBound(object sender, EventArgs e) { } protected void btnYearOK_Click(object sender, EventArgs e) { // ddl我督導的專案.DataBind(); cbl我督導的專案.DataBind(); RPARGrid2.DataBind(); } protected void dsRPAB2_Selecting(object sender, SqlDataSourceSelectingEventArgs e) { if (RPARGrid2.SelectedValue != null) e.Command.Parameters["@RPREN"].Value = RPARGrid2.SelectedValue; //(sender as SqlDataSource).SelectParameters["RPREN"].DefaultValue = WDAC.GetStringValue(RPARGrid2.SelectedValue); } protected string GetAttachLink(string RPREN) { return RparDAC.GetAttachLink(RPREN, Page); //string f = string.Format("{0}\\{1}.jpg", Server.MapPath("~/UploadedPicture/RPAR_ATTACHMENT"), RPREN); //if (File.Exists(f)) // return string.Format("附件檢視", // ResolveClientUrl("~/UploadedPicture/RPAR_ATTACHMENT/"), RPREN); //else // return "無附件"; } private void 發簽核有意見郵件(string _RPREN, string 簽核人員, string 簽核結果, string 簽核意見) { RPARList t = rparDao.SelectOne(_RPREN); if (t.Count > 0) { string 員工號 = GetLookup("BPSN", t[0].RPNUM, "BPNME"); string 員工電郵 = bpsnDao.GetEmail(t[0].RPNUM); string 類別 = t[0].RPTYP; switch (類別.Substring(0, 1)) { case RPAR_TYPE.T0_請假: 類別 = "請假"; break; case RPAR_TYPE.T1_加班: 類別 = "加班"; break; case RPAR_TYPE.T3_出差: 類別 = "差旅"; break; default: return; } // 發送郵件 try { MailMessage mm = new MailMessage(); mm.Subject = String.Format("{1}簽核意見通知 [單號:{0}]", _RPREN, 類別); mm.To.Add(new MailAddress(員工電郵)); mm.BodyEncoding = Encoding.UTF8; mm.IsBodyHtml = true; mm.Body = File.ReadAllText(Server.MapPath("~/Template/簽核意見通知.html")) .Replace("{類別}", 類別) .Replace("{單號}", _RPREN) .Replace("{簽核人員}", 簽核人員) .Replace("{簽核結果}", 簽核結果) .Replace("{簽核意見}", 簽核意見) ; Wellan.Service.WMailSender.GetInstance().Send(mm, string.Format("簽核意見通知 單號:{0}", _RPREN)); } catch { } } } protected void RPARGrid0_RowDataBound(object sender, GridViewRowEventArgs e) { //GridView_RowDataBound_Shrink_ViewState(sender, e); } protected void RPARGrid1_RowDataBound(object sender, GridViewRowEventArgs e) { //GridView_RowDataBound_Shrink_ViewState(sender, e); } protected void gvRPAD_RowDataBound(object sender, GridViewRowEventArgs e) { //GridView_RowDataBound_Shrink_ViewState(sender, e); } private void StoreYYMM() { hfCalendarYear.Value = Calendar1.VisibleDate.ToString("yyyy", WGuard1.InvariantCulture); hfCalendarMonth.Value = Calendar1.VisibleDate.ToString("MM"); } protected void btnCalendarGoto_Click(object sender, EventArgs e) { Calendar1.VisibleDate = Convert.ToDateTime(txtCalendarYear.Text + "/" + ddlCalendarMonth.SelectedValue + "/01"); StoreYYMM(); } protected void btnCalendarSave_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(txtCalendarUser.Text)) { return; } for (int i = 1; i <= 31; i++) { if (Request[String.Format("BTME{0:00}", i)] != null) { var rttid = WDAC.GetStringValue(Request[String.Format("BTME{0:00}", i)]); rtmeDao.SetDay(txtCalendarUser.Text, new DateTime(Convert.ToInt32(hfCalendarYear.Value), Convert.ToInt32(hfCalendarMonth.Value), i), rttid, txtCalendarUser.Text); } } Calendar1.VisibleDate = Convert.ToDateTime(hfCalendarYear.Value + "/" + hfCalendarMonth.Value + "/01", WGuard1.InvariantCulture); } protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { e.Cell.Style["padding"] = "3px"; e.Cell.Style["border"] = "2px solid white"; // 非本月,結束處理 if (e.Day.IsOtherMonth) return; // 本月,清除重畫 e.Cell.Controls.Clear(); Label aLabel = new Label(); aLabel.Text = e.Day.Date.Day.ToString(); aLabel.Font.Name = "Tahoma"; aLabel.Font.Size = new FontUnit("16pt"); aLabel.Font.Bold = true; aLabel.ForeColor = System.Drawing.Color.Black; e.Cell.Controls.Add(aLabel); // 加入換行的 Literal Literal aBR = new Literal(); aBR.Text = "
"; e.Cell.Controls.Add(aBR); //加入 DropDownList 用以挑選假日型態 DropDownList aDDL = new DropDownList(); aDDL.ID = String.Format("BTME{0:00}", e.Day.Date.Day); aDDL.Style.Add("width", "95%"); aDDL.Style.Add("top", "2px"); aDDL.Style.Add("font-size", "9pt"); // aDDL.Enabled = false; if (monthBhrd == null) { if (!e.Day.IsWeekend) aDDL.CssClass = "NORMAL"; } else { var d = monthBhrd.Substring(e.Day.Date.Day - 1, 1); if (d == "-" || d == "B") aDDL.CssClass = "NORMAL"; } BtmeList.ForEach(btmeItem => { aDDL.Items.Add(new ListItem(btmeItem.BTTID, btmeItem.BTTID)); }); var rtmeItem = RtmeList.FirstOrDefault(p => p.RTDAT == e.Day.Date); if (rtmeItem != null) { aDDL.SelectedValue = rtmeItem.RTTID; } else { aDDL.SelectedValue = ""; } e.Cell.Controls.Add(aDDL); var dayType = "-"; if (holidayData == null) { if (e.Day.IsWeekend) dayType = "H"; else dayType = "-"; } else { dayType = holidayData[e.Day.Date.Month - 1].Substring(e.Day.Date.Day - 1, 1); } switch (dayType) { case "-": e.Cell.BackColor = System.Drawing.Color.White; break; case "H": e.Cell.BackColor = System.Drawing.Color.FromArgb(0xFF99CC); break; case "B": e.Cell.BackColor = System.Drawing.Color.FromArgb(0xFFFF99); break; case "N": e.Cell.BackColor = System.Drawing.Color.FromArgb(0x0099FF); break; case "V": e.Cell.BackColor = System.Drawing.Color.FromArgb(0xFF9900); break; case "O": e.Cell.BackColor = System.Drawing.Color.FromArgb(0x99CC00); break; case "T": e.Cell.BackColor = System.Drawing.Color.FromArgb(0x999999); break; case "E": e.Cell.BackColor = System.Drawing.Color.FromArgb(0xCC7FFF); break; case "A": e.Cell.BackColor = System.Drawing.Color.FromArgb(0x7FCCFF); break; } } protected void Calendar1_PreRender(object sender, EventArgs e) { // 取得班表資料 BtmeList = btmeDao.SelectAll(); BtmeList.Insert(0, new BtmeItem() { BTTID = "", BTNME = "預設班表", BTSTM = WGuard1.WSetR("UNRPARTIME", 1), BTETM = WGuard1.WSetR("UNRPARTIME", 2), BTRST = WGuard1.WSetR("UNRPARTIME", 3), BTRED = WGuard1.WSetR("UNRPARTIME", 4) }); gvBTME.DataSource = BtmeList; gvBTME.DataBind(); ddBhrd.DataSource = BtmeList; ddBhrd.DataTextField = "BTTID"; ddBhrd.DataValueField = "BTTID"; ddBhrd.DataBind(); // 取得員工班表資料 Calendar1.VisibleDate = Convert.ToDateTime(txtCalendarYear.Text + "/" + ddlCalendarMonth.SelectedValue + "/01"); RtmeList = rtmeDao.SelectMonth(txtCalendarUser.Text, Calendar1.VisibleDate); monthBhrd = bhrdDao.GetMonth(Calendar1.VisibleDate.Year, Calendar1.VisibleDate.Month); // 取得節假日資料 holidayData = new BhrdDAC().GetYear(Calendar1.VisibleDate.Year); } protected void Calendar1_VisibleMonthChanged(object sender, MonthChangedEventArgs e) { txtCalendarYear.Text = Calendar1.VisibleDate.ToString("yyyy"); ddlCalendarMonth.SelectedValue = Calendar1.VisibleDate.ToString("MM"); StoreYYMM(); } protected void cbCalendarUser_SelectedIndexChanged(object sender, EventArgs e) { // DO NOTHING } protected void btnCalendarUserOK_Click(object sender, EventArgs e) { lbCalendarUserName.DataBind(); } protected void dsRPAR未簽_Selected(object sender, ObjectDataSourceStatusEventArgs e) { if (e.ReturnValue is DataTable) { // 從中取得人員與單據類別 } } protected void cb不分頁_CheckedChanged(object sender, EventArgs e) { RPARGrid.AllowPaging = !cb不分頁.Checked; WGuard1.WSetW(Query, string.Format("SIGN_NP_1_{0}", UserId), 1, cb不分頁.Checked ? "Y" : "N", UserId); } protected void cb過濾篩選_CheckedChanged(object sender, EventArgs e) { pnl過濾篩選.Visible = cb過濾篩選.Checked; cblRPNUMFilter.Items.Clear(); cblRPNUMFilter.DataBind(); RPARGrid.DataBind(); WGuard1.WSetW(Query, string.Format("SIGN_FT_1_{0}", UserId), 1, cb過濾篩選.Checked ? "Y" : "N", UserId); } protected void cblRPNUMFilter_DataBinding(object sender, EventArgs e) { var rows = rparDao.Select未簽核ByUser(UserId, "", ""); var rpnums = new List(); foreach (DataRow row in rows.Rows) { var v = row["RPNUM"].ToString(); if (!rpnums.Contains(v)) { rpnums.Add(v); } } rpnums.Sort(); foreach (var rpnum in rpnums) { var bpnme = GetLookup("BPSN", rpnum, "BPNME", ""); cblRPNUMFilter.Items.Add(new ListItem(string.Format("{0} {1}", rpnum, bpnme), rpnum)); } } protected void dsRPAR未簽_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) { e.InputParameters["RPTYP"] = string.Join(",", cblRPTYPFilter.Items.Cast() .Where(p => p.Selected) .Select(p => p.Value) .ToArray()); e.InputParameters["RPNUM"] = string.Join(",", cblRPNUMFilter.Items.Cast() .Where(p => p.Selected) .Select(p => p.Value) .ToArray()); } protected void cblRPTYPFilter_SelectedIndexChanged(object sender, EventArgs e) { var b = PostBackControlId.Split('$'); if (b.Length > 2) { if (cbRPTYPFilterOne.Checked) { for (var i = 0; i < cblRPTYPFilter.Items.Count; i++) { if (i.ToString() != b[2]) cblRPTYPFilter.Items[i].Selected = false; } } } RPARGrid.DataBind(); } protected void cblRPNUMFilter_SelectedIndexChanged(object sender, EventArgs e) { var b = PostBackControlId.Split('$'); if (b.Length > 2) { if (cbRPNUMFilterOne.Checked) { for (var i = 0; i < cblRPNUMFilter.Items.Count; i++) { if (i.ToString() != b[2]) cblRPNUMFilter.Items[i].Selected = false; } } } RPARGrid.DataBind(); } protected void btnRPTYPFilterNone_Click(object sender, EventArgs e) { foreach (ListItem i in cblRPTYPFilter.Items) { i.Selected = false; } RPARGrid.DataBind(); } protected void btnRPNUMFilterNone_Click(object sender, EventArgs e) { foreach (ListItem i in cblRPNUMFilter.Items) { i.Selected = false; } RPARGrid.DataBind(); } protected void cbRPTYPFilterOne_CheckedChanged(object sender, EventArgs e) { if (cbRPTYPFilterOne.Checked) { foreach (ListItem i in cblRPTYPFilter.Items) { if (i.Value != cblRPTYPFilter.SelectedValue) i.Selected = false; } } } protected void cbRPNUMFilterOne_CheckedChanged(object sender, EventArgs e) { if (cbRPNUMFilterOne.Checked) { foreach (ListItem i in cblRPNUMFilter.Items) { if (i.Value != cblRPNUMFilter.SelectedValue) i.Selected = false; } } } protected void rblRPTYP2_SelectedIndexChanged(object sender, EventArgs e) { cblRPTYP_DETAIL.DataSource = Query.Select(string.Format("SELECT BSCLS, BSSCR FROM BCLS WHERE BSPAR = 'RPARTYP' AND BSCLS LIKE '{0}' AND BLOCK='Y'", rblRPTYP2.SelectedValue)); cblRPTYP_DETAIL.DataTextField = "BSSCR"; cblRPTYP_DETAIL.DataValueField = "BSCLS"; switch (rblRPTYP2.SelectedValue) { case "0%": cblRPTYP_DETAIL.RepeatColumns = 7; break; case "1%": cblRPTYP_DETAIL.RepeatColumns = 3; break; case "3%": cblRPTYP_DETAIL.RepeatColumns = 5; break; } cblRPTYP_DETAIL.DataBind(); cblRPNUM4.DataBind(); RPARGrid2.DataBind(); } //protected void ddl我督導的專案_SelectedIndexChanged(object sender, EventArgs e) //{ // cblRPNUM4.DataBind(); //} protected void cbl我督導的專案_SelectedIndexChanged(object sender, EventArgs e) { cblRPNUM4.DataBind(); RPARGrid2.DataBind(); } protected void cblRPTYP_DETAIL_SelectedIndexChanged(object sender, EventArgs e) { cblRPNUM4.DataBind(); RPARGrid2.DataBind(); } protected void btnDateOK_Click(object sender, EventArgs e) { RPARGrid2.DataBind(); } } internal class RPARGroup { public string RPPYN; public string RPNUM; public string RPTYP; } internal class RPARGroupComparer : IEqualityComparer { public bool Equals(RPARGroup x, RPARGroup y) { return string.Format("{0}{1}{2}", x.RPNUM, x.RPNUM, x.RPTYP) == string.Format("{0}{1}{2}", y.RPNUM, y.RPNUM, y.RPTYP); } public int GetHashCode(RPARGroup obj) { return 0; } }