diff --git a/Doc/GridView改用ObjectDataSource計畫.md b/Doc/GridView改用ObjectDataSource計畫.md index 7bc257e..f4a1c1c 100644 --- a/Doc/GridView改用ObjectDataSource計畫.md +++ b/Doc/GridView改用ObjectDataSource計畫.md @@ -25,9 +25,9 @@ | 7 | forms/customer/fmBpjb.ascx | gvBPJB | dsBPJBGrid | BPJB | 無→BpjbDAC | **完成** | | 8 | forms/customer/fmBprj.ascx | gvBPRJ | dsBPRJGrid | BPRJ | BprjDAC(+Select) | **完成** | | 9 | forms/customer/fmBprm.ascx | gvBPRM | dsBPRMGrid | BPRM | BprmDAC(+Select) | **完成** | -| 10 | forms/customer/fmRasn.ascx | gvRASN_RAENO | dsRASN_RAENO1 | RASN+BPSNView | RasnDAC | 待辦 | -| 11 | forms/customer/fmRasn.ascx | gvRASN_RABRH | dsRASN_RABRH1 | RASN+BCLS | RasnDAC | 待辦 | -| 12 | forms/customer/fmRasn.ascx | RASNGrid | dsRASNGrid | RASN/BPJB/BPSNView | RasnDAC | 待辦 | +| 10 | forms/customer/fmRasn.ascx | gvRASN_RAENO | dsRASN_RAENO1 | RASN+BPSNView | RasnDAC(+Select) | **完成** | +| 11 | forms/customer/fmRasn.ascx | gvRASN_RABRH | dsRASN_RABRH1 | RASN+BCLS | RasnDAC(+Select) | **完成** | +| 12 | forms/customer/fmRasn.ascx | RASNGrid | dsRASNGrid | RASN/BPJB/BPSNView | RasnDAC(+Select) | **完成** | | 13 | forms/customer/fmRpfe.ascx | RPFEGrid | dsRPFEGrid | RPFE | 無 | 待辦 | | 14 | forms/flow/fmSign.ascx | gvRPAB2 | dsRPAB2 | RPAB | RpabDAC | 待辦 | | 15 | forms/flow/fmSign.ascx | gvRPAB | dsRPAB | RPAB | RpabDAC | 待辦 | @@ -149,3 +149,4 @@ | 2026-09-10 | 轉換 fmBpjb(BPJB):新增 BpjbDAC(SelectPage/SelectCount);dsBPJBGrid 改 ObjectDataSource;編譯通過 | | 2026-09-10 | 轉換 fmBprj(BPRJ):BprjDAC 新增 SelectPage/SelectCount/SelectBPRJIndex(含 LAST_YEAR 排序);dsBPRJGrid 改 ObjectDataSource;編譯通過 | | 2026-09-10 | 轉換 fmBprm(BPRM):BprmDAC 新增 SelectPage/SelectCount;dsBPRMGrid 改 ObjectDataSource;dsBPRM_Selected 拆分為 grid/form 兩個事件;編譯通過 | +| 2026-09-10 | 轉換 fmRasn(RASN,3 個 Grid):RasnDAC 新增 SelectPage/SelectCount 及 SelectRAENO/SelectRABRH;三個 datasource 改 ObjectDataSource;Search/Selected 調整;編譯通過 | diff --git a/Web/App_Code/DAC/RasnDAC.cs b/Web/App_Code/DAC/RasnDAC.cs index 82d512a..bf49014 100644 --- a/Web/App_Code/DAC/RasnDAC.cs +++ b/Web/App_Code/DAC/RasnDAC.cs @@ -12,6 +12,7 @@ using Wellan.Data; /// /// 人員派遣資料的資料處理類別 /// +[DataObject(true)] public class RasnDAC : Wellan.Data.WDAC { private DbCommand cmdSelectRasnRapyn = null; @@ -582,6 +583,124 @@ public class RasnDAC : Wellan.Data.WDAC } */ + /// + /// 派遣人員清單 (未結束,供挑選人員用) + /// + [DataObjectMethod(DataObjectMethodType.Select)] + public DataTable SelectRAENO(string RAPYN) + { + DbCommand cmd = Query.NewCommand( + @"SELECT A.RANUM, B.BPNME + FROM RASN AS A + INNER JOIN BPSNView AS B ON A.RANUM = B.BPENO + WHERE (A.RAPYN = @RAPYN) AND A.RAEDT IS NULL"); + cmd.Parameters.Add(Query.NewParameter("RAPYN", RAPYN)); + return Query.Select(cmd); + } + + /// + /// 站別統計 (未結束,供挑選站別用) + /// + [DataObjectMethod(DataObjectMethodType.Select)] + public DataTable SelectRABRH(string RAPYN) + { + DbCommand cmd = Query.NewCommand( + @"SELECT A.RABRH, B.BSSCR, COUNT(1) AS RABRH_COUNT + FROM RASN AS A + INNER JOIN BCLS AS B ON A.RABRH = B.BSCLS AND B.BSPAR = 'BPSNBRH' + WHERE (A.RAPYN = @RAPYN) AND A.RAEDT IS NULL + GROUP BY A.RABRH, B.BSSCR"); + cmd.Parameters.Add(Query.NewParameter("RAPYN", RAPYN)); + return Query.Select(cmd); + } + + private static readonly List HQ_RAPYNS = new List() { "103TYB00001", "103JYB00001" }; + + private string BuildRasnGridSql(string RAPYN, string BPENO, string BPNME, int year, StringBuilder filter, DbCommand cmd) + { + string order1, order2; + if (HQ_RAPYNS.IndexOf(RAPYN) < 0) + { + order1 = "RANUM"; + order2 = "RAEDT, RANUM"; + } + else + { + order1 = "RAEDT, RANUM"; + order2 = "RAEDT, RANUM"; + } + + if (year > 0 && HQ_RAPYNS.IndexOf(RAPYN) < 0) + { + filter.AppendFormat( + " AND ((RASDT >= '{0}/01/01' AND RASDT <= '{0}/12/31') OR (RAEDT >= '{0}/01/01' AND RAEDT <= '{0}/12/31') OR (RASDT <= '{0}/01/01' AND RAEDT >= '{0}/12/31') ) ", + year); + } + if (!string.IsNullOrEmpty(BPENO)) + { + filter.Append(" AND C.BPENO LIKE @BPENO1 "); + cmd.Parameters.Add(Query.NewParameter("BPENO1", BPENO + "%")); + } + if (!string.IsNullOrEmpty(BPNME)) + { + filter.Append(" AND C.BPNME LIKE @BPNME1 "); + cmd.Parameters.Add(Query.NewParameter("BPNME1", BPNME + "%")); + } + + return String.Format(@" +SELECT A.*, B.BPSRM, B.BPSRD, B.BPP01, B.BPP02, B.BPP03, B.BPP04, B.BPP05 +FROM + ( + SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY {0}) ROWNUM FROM RASN WHERE RAPYN=@RAPYN AND RAEDT IS NULL) T1 + UNION ALL + SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY {1}) ROWNUM FROM RASN WHERE RAPYN=@RAPYN AND RAEDT IS NOT NULL) T2 + ) A + LEFT OUTER JOIN BPJB B ON A.RAPYN=B.BPPYN AND A.RAJNO=B.BPJNO AND A.RACNO=B.BPCNO + LEFT OUTER JOIN BPSNView C ON A.RANUM=C.BPENO +WHERE 1=1 {2}", order1, order2, filter.ToString()); + } + + /// + /// 派遣紀錄 Grid 分頁查詢 + /// + [DataObjectMethod(DataObjectMethodType.Select)] + public DataTable SelectPage(int startRowIndex, int maximumRows, string RAPYN, string BPENO, string BPNME, int year) + { + DbCommand cmd = Query.NewCommand(); + + StringBuilder filter = new StringBuilder(); + string inner = BuildRasnGridSql(RAPYN, BPENO, BPNME, year, filter, cmd); + + cmd.CommandText = String.Format( + @"SELECT * FROM + ( + SELECT Q.*, ROW_NUMBER() OVER (ORDER BY CASE WHEN Q.RAEDT IS NULL THEN 0 ELSE 1 END, Q.ROWNUM) AS ROWID + FROM ( {0} ) Q + ) AS TMP + WHERE ROWID BETWEEN @STARTROWINDEX + 1 AND @STARTROWINDEX + @MAXIMUMROWS + ORDER BY ROWID", inner); + cmd.Parameters.Add(Query.NewParameter("RAPYN", RAPYN)); + cmd.Parameters.Add(Query.NewParameter("STARTROWINDEX", startRowIndex)); + cmd.Parameters.Add(Query.NewParameter("MAXIMUMROWS", maximumRows)); + + return Query.Select(cmd); + } + + /// + /// 派遣紀錄 Grid 查詢筆數 + /// + [DataObjectMethod(DataObjectMethodType.Select)] + public int SelectCount(string RAPYN, string BPENO, string BPNME, int year) + { + DbCommand cmd = Query.NewCommand(); + + StringBuilder filter = new StringBuilder(); + string inner = BuildRasnGridSql(RAPYN, BPENO, BPNME, year, filter, cmd); + + cmd.CommandText = String.Format("SELECT COUNT(*) FROM ( {0} ) Q", inner); + cmd.Parameters.Add(Query.NewParameter("RAPYN", RAPYN)); + return WDAC.GetInt32Value(Query.ExecuteScalar(cmd)); + } } diff --git a/Web/forms/customer/fmRasn.ascx b/Web/forms/customer/fmRasn.ascx index 379c857..e0a6e3c 100644 --- a/Web/forms/customer/fmRasn.ascx +++ b/Web/forms/customer/fmRasn.ascx @@ -53,28 +53,19 @@ - + - + - + - + - + - + - - + + + + + + + + HQ_RAPYNS = new List() { "103TYB00001", "103JYB00001" }; - String searchOrder1 = String.Empty, searchOrder2 = String.Empty; - if (HQ_RAPYNS.IndexOf(_RAPYN) < 0) - { - searchOrder1 = "RANUM"; - searchOrder2 = "RAEDT, RANUM"; - } - else - { - searchOrder1 = "RAEDT, RANUM"; - searchOrder2 = "RAEDT, RANUM"; - } - sql.Append(string.Format(@" -SELECT A.*, B.BPSRM, B.BPSRD, B.BPP01, B.BPP02, B.BPP03, B.BPP04, B.BPP05 -FROM - ( - SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY {0}) ROWNUM FROM RASN WHERE RAPYN=@RAPYN AND RAEDT IS NULL) T1 - UNION ALL - SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY {1}) ROWNUM FROM RASN WHERE RAPYN=@RAPYN AND RAEDT IS NOT NULL) T2 - ) A - LEFT OUTER JOIN BPJB B ON A.RAPYN=B.BPPYN AND A.RAJNO=B.BPJNO AND A.RACNO=B.BPCNO - LEFT OUTER JOIN BPSNView C ON A.RANUM=C.BPENO -WHERE 1=1 -", searchOrder1, searchOrder2)); + int year = 0; if (!string.IsNullOrEmpty(txtYY.Text) && HQ_RAPYNS.IndexOf(_RAPYN) < 0) - { - sql.Append(string.Format(" AND ((RASDT >= '{0}/01/01' AND RASDT <= '{0}/12/31') OR (RAEDT >= '{0}/01/01' AND RAEDT <= '{0}/12/31') OR (RASDT <= '{0}/01/01' AND RAEDT >= '{0}/12/31') ) ", WQuery.GetInt32Value(txtYY.Text) + WGuard1.CY11)); - } + year = WQuery.GetInt32Value(txtYY.Text) + WGuard1.CY11; - dsRASNGrid.SelectParameters.Clear(); - dsRASNGrid.SelectParameters.Add(new Parameter("RAPYN", DbType.String, _RAPYN)); - // AddSearch(sql, dsRASNGrid, "RAPYN", _RAPYN, "", true); - AddSearch(sql, dsRASNGrid, "C.BPENO", _BPENO, "", true); - AddSearch(sql, dsRASNGrid, "C.BPNME", _BPNME, "", true); - - dsRASNGrid.SelectCommand = sql.ToString(); + dsRASNGrid.SelectParameters["RAPYN"].DefaultValue = _RAPYN; + dsRASNGrid.SelectParameters["BPENO"].DefaultValue = _BPENO; + dsRASNGrid.SelectParameters["BPNME"].DefaultValue = _BPNME; + dsRASNGrid.SelectParameters["year"].DefaultValue = year.ToString(); } // 存檔前的計算動作 @@ -302,9 +271,9 @@ WHERE 1=1 RASNGrid.DataBind(); } - protected void dsRASNGrid_Selected(object sender, SqlDataSourceStatusEventArgs e) + protected void dsRASNGrid_Selected(object sender, ObjectDataSourceStatusEventArgs e) { - if (e.AffectedRows == 0) + if (e.ReturnValue is Int32 && WDAC.GetInt32Value(e.ReturnValue) == 0) { if (ForwardSource != "") RASNForm.ChangeMode(FormViewMode.Insert);