using System; using System.Data; using System.Configuration; using System.Data.Common; using System.Collections; using System.ComponentModel; using System.Text; using Wellan.Common; using Wellan.Data; /// /// 取得專案年度接單資料 /// [DataObject(true)] public class BpaaDAC : Wellan.Data.WDAC { public BpaaDAC() { } public BpaaDAC(string connectionConfig, string connectionConfigName) : this() { this._connectionConfig = connectionConfig; this._connectionConfigName = connectionConfigName; } public BpaaDAC(WQuery query) { this._query = query; } /// /// 取得所有年度專案計畫代號與名稱,不含總公司 /// 20141230 修改,必定包含 103 年度新譽與展譽 /// /// public DataTable GetBpaa() { DbCommand cmd = Query.NewCommand( @"SELECT BPPYN, BPPYM FROM ( SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS FROM BPAA WHERE (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001') UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS -- 移除展育 -- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001' FROM BPAA WHERE BPPYN = '103TYB00001' ) AS TMP1 ORDER BY CLS, BPPYN"); return Query.Select(cmd); } /// /// 取得指定年度專案計畫代號與名稱,不含總公司 /// 20141230 修改,必定包含 103 年度新譽與展譽 /// /// 指定年度 /// public DataTable GetBpaa(int year) { DbCommand cmd = Query.NewCommand( @"SELECT BPPYN, BPPYM FROM ( SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS FROM BPAA WHERE (BPYER=@BPYER) AND (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001') UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS -- 移除展育 -- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001' FROM BPAA WHERE BPPYN = '103TYB00001' ) AS TMP1 ORDER BY CLS, BPPYN"); cmd.Parameters.Add(Query.NewParameter("BPYER", year - WGuard1.CY11)); return Query.Select(cmd); } /// /// 取得所有年度專案計畫代號與名稱,含總公司 /// 20141230 修改,必定包含 103 年度新譽與展譽 /// /// public DataTable GetBpaaWithTY() { DbCommand cmd = Query.NewCommand( @"SELECT BPPYN, BPPYM FROM ( SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS FROM BPAA WHERE (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001') UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS -- 移除展育 -- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001' FROM BPAA WHERE BPPYN = '103TYB00001' ) AS TMP1 ORDER BY CLS, BPPYN"); return Query.Select(cmd); } /// /// 取得所有年度專案計畫代號與名稱,含總公司,並加上一個空項目 /// 20141230 修改,必定包含 103 年度新譽與展譽 /// /// public DataTable GetBpaaWithTYPlusNone() { DbCommand cmd = Query.NewCommand( @"SELECT BPPYN, BPPYM FROM ( SELECT '' BPPYN, '【全部】' BPPYM, 1 CLS UNION SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS FROM BPAA WHERE (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001') UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS -- 移除展育 -- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001' FROM BPAA WHERE BPPYN = '103TYB00001' ) AS TMP1 ORDER BY CLS, BPPYN"); return Query.Select(cmd); } /// /// 取得指定年度專案計畫代號與名稱,含總公司 /// 20141230 修改,必定包含 103 年度新譽與展譽 /// /// 指定年度 /// public DataTable GetBpaaWithTY(int year) { DbCommand cmd = Query.NewCommand( @"SELECT BPPYN, BPPYM FROM ( SELECT '' BPPYN, '【全部】' BPPYM, 1 CLS UNION SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS -- 移除展育 -- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001' FROM BPAA WHERE BPPYN = '103TYB00001' UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS FROM BPAA WHERE (BPYER=@BPYER) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001') ) AS TMP1 ORDER BY CLS, BPPYN"); cmd.Parameters.Add(Query.NewParameter("BPYER", year - WGuard1.CY11)); return Query.Select(cmd); } /// /// 取得指定年度專案計畫代號與名稱,含總公司,並加上一個空項目 /// 20141230 修改,必定包含 103 年度新譽與展譽 /// /// 指定年度 /// public DataTable GetBpaaWithTYPlusNone(int year) { DbCommand cmd = Query.NewCommand( @"SELECT BPPYN, BPPYM FROM ( SELECT '' BPPYN, '【全部】' BPPYM, 1 CLS UNION SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS FROM BPAA WHERE (BPYER=@BPYER) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001') UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS -- 移除展育 -- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001' FROM BPAA WHERE BPPYN = '103TYB00001' ) AS TMP1 ORDER BY CLS, BPPYN"); cmd.Parameters.Add(Query.NewParameter("BPYER", year - WGuard1.CY11)); return Query.Select(cmd); } /// /// 取得指定年度專案計畫代號與名稱,含總公司 /// public DataTable GetBpaaWithTYPlusNone(int yearFrom, int yearTo) { return GetBpaa(yearFrom, yearTo, true); } /// /// 取得指定年度專案計畫代號與名稱,含總公司 /// public DataTable GetBpaaWithTYPlusNoneNotCheckYear(int yearFrom, int yearTo) { return GetBpaa(yearFrom, yearTo, false); } /// /// 取得指定年度專案計畫代號與名稱,含總公司 /// 20141230 修改,必定包含 103 年度新譽與展譽 /// /// 指定年度 /// public DataTable GetBpaa(int yearFrom, int yearTo, bool checkYearEqual) { if (yearTo <= 0) yearTo = yearFrom; DbCommand cmd; if (yearFrom == yearTo || !checkYearEqual) { cmd = Query.NewCommand( @"SELECT BPPYN, BPPYM FROM ( SELECT '' BPPYN, '【全部】' BPPYM, 1 CLS UNION SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS -- 移除展育的選項 -- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001' FROM BPAA WHERE BPPYN = '103TYB00001' UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS FROM BPAA WHERE (BPYER = @BPYER1) AND (BPPYN <> '000000001') AND (BPPNM <> 'JYB00001') AND (BPPNM <> 'TYB00001') ) AS TMP1 ORDER BY CLS, BPPYN"); } else { cmd = Query.NewCommand( @"SELECT BPPYN, BPPYM FROM ( SELECT '' BPPYN, '【全部】' BPPYM, 1 CLS UNION SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS -- UNION -- SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS -- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001' UNION SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS FROM BPAA WHERE (BPYER>=@BPYER1 AND BPYER<=@BPYER2) AND (BPPYN <> '000000001') AND (BPPNM <> 'JYB00001') AND (BPPNM <> 'TYB00001') ) AS TMP1 ORDER BY CLS, BPPYN"); } cmd.Parameters.Add(Query.NewParameter("BPYER1", yearFrom - WGuard1.CY11)); cmd.Parameters.Add(Query.NewParameter("BPYER2", yearTo - WGuard1.CY11)); return Query.Select(cmd); } /// /// 取得加班時數計算方式 /// /// 年度專案計畫編號 /// 1=計算至小時,2=計算至分鐘 public string GetOverTimeType(string BPPYN) { DbCommand cmd = Query.NewCommand("SELECT BPOTT FROM BPAA WHERE BPPYN=@BPPYN"); cmd.Parameters.Add(Query.NewParameter("BPPYN", BPPYN)); string s = WDAC.GetStringValue(Query.ExecuteScalar(cmd)); return s == "1" || s == "2" ? s : "1"; } /// /// 取得上下班時間 /// /// /// //public void GetTime(string bppyn, out string bpstm, out string bpetm) //{ // bpstm = WGuard1.WSetR("UNRPARTIME", 1); // bpetm = WGuard1.WSetR("UNRPARTIME", 2); // DbCommand cmd1 = Query.NewCommand("SELECT BPPNM FROM BPAA WHERE BPPYN=@BPPYN"); // cmd1.Parameters.Add(Query.NewParameter("BPPYN", bppyn)); // string bppnm = WDAC.GetStringValue(Query.ExecuteScalar(cmd1)); // if (string.IsNullOrEmpty(bppnm)) // return; // DbCommand cmd2 = Query.NewCommand("SELECT BPSTM, BPETM FROM BPRJ WHERE BPPNM=@BPPNM"); // cmd1.Parameters.Add(Query.NewParameter("BPPNM", bppnm)); // DataTable dt = Query.Select(cmd2); // if (dt.Rows.Count == 0) // return; // string bpstm1 = WDAC.GetStringValue(dt.Rows[0]["BPSTM"]); // string bpetm1 = WDAC.GetStringValue(dt.Rows[0]["BPETM"]); // string[] timepart = bpstm1.Split(':'); // if (timepart.Length >= 2) // bpstm = timepart[0].PadRight(2, '0') + timepart[1].PadRight(2, '0'); // timepart = bpetm1.Split(':'); // if (timepart.Length >= 2) // bpetm = timepart[0].PadRight(2, '0') + timepart[1].PadRight(2, '0'); //} /// /// 取得年初特休計算方式 /// /// 年度專案計畫編號 /// S=加總上年生效(正數) / Z=年初時數為0 public string GetYearBeginAnnualLeaveType(string BPPYN) { DbCommand cmd = Query.NewCommand("SELECT BPALT FROM BPAA WHERE BPPYN=@BPPYN"); cmd.Parameters.Add(Query.NewParameter("BPPYN", BPPYN)); string s = WDAC.GetStringValue(Query.ExecuteScalar(cmd)); return s == "S" || s == "Z" ? s : "Z"; } /// /// 取得年度專案計畫代號對應的班表編號 /// /// 年度專案計畫編號 /// 班表編號 public string GetTimeTableNo(string BPPYN) { DbCommand cmd = Query.NewCommand("SELECT BPPNM FROM BPAA WHERE BPPYN=@BPPYN"); cmd.Parameters.Add(Query.NewParameter("BPPYN", BPPYN)); var bppnm = WDAC.GetStringValue(Query.ExecuteScalar(cmd)); cmd.CommandText = "SELECT BPTME FROM BPRJ WHERE BPPNM=@BPPNM"; cmd.Parameters.Clear(); cmd.Parameters.Add(Query.NewParameter("BPPNM", bppnm)); return WDAC.GetStringValue(Query.ExecuteScalar(cmd)); } /// /// 年度接單 Grid 分頁查詢 /// [DataObjectMethod(DataObjectMethodType.Select)] public DataTable SelectPage(int startRowIndex, int maximumRows, string BPPNM, string BPYER, string BPPYN, string BPPYM) { DbCommand cmd = Query.NewCommand(); StringBuilder filter = new StringBuilder(); BuildFilter(filter, cmd, BPPNM, BPYER, BPPYN, BPPYM); cmd.CommandText = String.Format( @"SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY BPPNM, BPYER) AS ROWID FROM BPAA WHERE 1=1 {0} ) AS TMP WHERE ROWID BETWEEN @STARTROWINDEX + 1 AND @STARTROWINDEX + @MAXIMUMROWS ORDER BY ROWID", filter.ToString()); 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 BPPNM, string BPYER, string BPPYN, string BPPYM) { DbCommand cmd = Query.NewCommand(); StringBuilder filter = new StringBuilder(); BuildFilter(filter, cmd, BPPNM, BPYER, BPPYN, BPPYM); cmd.CommandText = String.Format("SELECT COUNT(*) FROM BPAA WHERE 1=1 {0}", filter.ToString()); return WDAC.GetInt32Value(Query.ExecuteScalar(cmd)); } /// /// 取得指定年度接單在查詢結果中的序號 (0 起算) /// public int SelectBPAAIndex(string targetBPPNM, string targetBPYER, string BPPNM, string BPYER, string BPPYN, string BPPYM) { DbCommand cmd = Query.NewCommand(); StringBuilder filter = new StringBuilder(); BuildFilter(filter, cmd, BPPNM, BPYER, BPPYN, BPPYM); cmd.CommandText = String.Format( @"SELECT ROWID - 1 FROM ( SELECT BPPNM, BPYER, ROW_NUMBER() OVER (ORDER BY BPPNM, BPYER) AS ROWID FROM BPAA WHERE 1=1 {0} ) AS TMP WHERE BPPNM = @TARGET_BPPNM AND BPYER = @TARGET_BPYER", filter.ToString()); cmd.Parameters.Add(Query.NewParameter("TARGET_BPPNM", targetBPPNM)); cmd.Parameters.Add(Query.NewParameter("TARGET_BPYER", targetBPYER)); object o = Query.ExecuteScalar(cmd); return (o is Int32 || o is Int64) ? WDAC.GetInt32Value(o) : -1; } /// /// 組出年度接單 Grid 的查詢條件 (與舊 AddSearch 行為一致) /// private void BuildFilter(StringBuilder sb, DbCommand cmd, string BPPNM, string BPYER, string BPPYN, string BPPYM) { if (!string.IsNullOrEmpty(BPPNM)) { sb.Append(" AND BPPNM LIKE @BPPNM1 "); cmd.Parameters.Add(Query.NewParameter("BPPNM1", BPPNM + "%")); } if (!string.IsNullOrEmpty(BPYER)) { sb.Append(" AND BPYER LIKE @BPYER1 "); cmd.Parameters.Add(Query.NewParameter("BPYER1", BPYER + "%")); } if (!string.IsNullOrEmpty(BPPYN)) { sb.Append(" AND BPPYN LIKE @BPPYN1 "); cmd.Parameters.Add(Query.NewParameter("BPPYN1", BPPYN + "%")); } if (!string.IsNullOrEmpty(BPPYM)) { sb.Append(" AND BPPYM LIKE @BPPYM1 "); cmd.Parameters.Add(Query.NewParameter("BPPYM1", BPPYM + "%")); } } }