// // 這個檔案是 訓練課程企劃 資料表的資料存取類別 檔案二 // 您可以修改這個檔案,加入您自訂的屬性與方法 // using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Data; using System.Data.Common; using WebLib; using System.Data.SqlClient; namespace Education { /// /// 訓練課程企劃 資料存取類別 /// public partial class DAC_訓練課程企劃 : WebLib.DAC { /// /// 給查詢畫面用的 Select 方法 /// [DataObjectMethod(DataObjectMethodType.Select)] public 訓練課程企劃List Select(int 訓練年度, string 顯示編號, string 公司別, string 計畫別, string 訓練名稱, string 訓練目標, string 教學方法, string 承辦) { 訓練課程企劃List result = new 訓練課程企劃List(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = _select + _from + _where; if (訓練年度 > 0) { cmdSelect.CommandText += " and 訓練日期 >= @訓練日期1 and 訓練日期 < @訓練日期2 "; AddParam(cmdSelect, "訓練日期1", new DateTime(訓練年度, 1, 1)); AddParam(cmdSelect, "訓練日期2", new DateTime(訓練年度 + 1, 1, 1)); } if (顯示編號 != null && 顯示編號.Length > 0) { cmdSelect.CommandText += " and 顯示編號 like @顯示編號 "; AddParam(cmdSelect, "顯示編號", "%" + 顯示編號 + "%"); } if (公司別 != null && 公司別.Length > 0) { cmdSelect.CommandText += " and 公司別 = @公司別 "; AddParam(cmdSelect, "公司別", 公司別); } if (計畫別 != null && 計畫別.Length > 0) { cmdSelect.CommandText += " and 計畫別 like @計畫別 "; AddParam(cmdSelect, "計畫別", "%" + 計畫別 + "%"); } if (訓練名稱 != null && 訓練名稱.Length > 0) { cmdSelect.CommandText += " and 訓練名稱 like @訓練名稱 "; AddParam(cmdSelect, "訓練名稱", "%" + 訓練名稱 + "%"); } if (訓練目標 != null && 訓練目標.Length > 0) { cmdSelect.CommandText += " and 訓練目標 like @訓練目標 "; AddParam(cmdSelect, "訓練目標", "%" + 訓練目標 + "%"); } if (教學方法 != null && 教學方法.Length > 0) { cmdSelect.CommandText += " and 教學方法 like @教學方法 "; AddParam(cmdSelect, "教學方法", "%" + 教學方法 + "%"); } if (承辦 != null && 承辦.Length > 0) { cmdSelect.CommandText += " and 承辦 like @承辦 "; AddParam(cmdSelect, "承辦", "%" + 承辦 + "%"); } cmdSelect.CommandText += _order; Select(cmdSelect, ref list); return result; } /// /// InsertOne 之前會執行此方法 /// 在這裡可以做一些檢查或是自動編號等動作 /// 回傳 false 會打斷 InsertOne 的執行 /// protected virtual bool BeforeInsertOne(訓練課程企劃 value) { value.顯示編號 = Next單號(DateTime.UtcNow.AddHours(8).Date, _tableName, "顯示編號", String.Format("\"{0}\"<999999>", value.公司別), ""); value.已取消 = "N"; value.已簽核 = "N"; value.已結案 = "N"; return true; } /// /// InsertOne 之後會執行此方法 /// protected virtual void AfterInsertOne(訓練課程企劃 value) { } /// /// InsertOne 發生錯誤時會執行此方法 /// protected virtual void OnInsertOneError(Exception error, out bool handled) { handled = false; } /// /// UpdateOne 之前會執行此方法 /// 在這裡可以做一些檢查 /// 回傳 false 會打斷 UpdateOne 的執行 /// protected virtual bool BeforeUpdateOne(訓練課程企劃 value) { return true; } /// /// UpdateOne 之後會執行此方法 /// protected virtual void AfterUpdateOne(訓練課程企劃 value) { } /// /// UpdateOne 發生錯誤時會執行此方法 /// protected virtual void OnUpdateOneError(Exception error, out bool handled) { handled = false; } /// /// DeleteOne 之前會執行此方法 /// 在這裡可以做一些檢查 /// 回傳 false 會打斷 DeleteOne 的執行 /// protected virtual bool BeforeDeleteOne(訓練課程企劃 value) { return true; } /// /// DeleteOne 之後會執行此方法 /// protected virtual void AfterDeleteOne(訓練課程企劃 value) { DAC_訓練課程內容 dao1 = new DAC_訓練課程內容(conn); DAC_訓練課程計畫別 dao2 = new DAC_訓練課程計畫別(conn); DAC_場地遴選 dao3 = new DAC_場地遴選(conn); DAC_講師遴選 dao4 = new DAC_講師遴選(conn); dao1.DeleteBy課程企劃(value.編號); dao2.DeleteBy課程企劃(value.編號); dao3.DeleteBy課程企劃(value.編號); dao4.DeleteBy課程企劃(value.編號); } /// /// DeleteOne 之前會執行此方法 /// 在這裡可以做一些檢查 /// 回傳 false 會打斷 DeleteOne 的執行 /// protected virtual bool BeforeDeleteOne(int 編號, int DB_APPNO) { return true; } /// /// DeleteOne 之後會執行此方法 /// protected virtual void AfterDeleteOne(int 編號, int DB_APPNO) { } /// /// DeleteOne 發生錯誤時會執行此方法 /// protected virtual void OnDeleteOneError(Exception error, out bool handled) { handled = false; } // 有另外加上去的屬性及方法,請加在這裡 /// /// 取出日期範圍之內可報名的課程 /// /// /// /// /// [DataObjectMethod(DataObjectMethodType.Select)] public 訓練課程企劃List SelectBy訓練日期(DateTime 訓練日期1, DateTime 訓練日期2) { 訓練課程企劃List result = new 訓練課程企劃List(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = _select + _from + _where + " and 訓練日期 >= @訓練日期1 and 訓練日期 <= @訓練日期2 and 訓練日期 >= @今天 " + @" and exists ( select 1 from 表單簽核主檔 where 表單類別ID = N'課程企劃' and 表單ID = 訓練課程企劃.編號 and 應簽關數 = 已簽關數 and 應簽關數 <> 'D' and 最終結果 = 'Y' ) " + " order by 訓練日期 desc"; AddParam(cmdSelect, "訓練日期1", 訓練日期1); AddParam(cmdSelect, "訓練日期2", 訓練日期2); AddParam(cmdSelect, "今天", DateTime.UtcNow.AddHours(8).Date); Select(cmdSelect, ref list); return result; } [DataObjectMethod(DataObjectMethodType.Select)] public 訓練課程企劃List Select可報名課程(string 學員編號) { 訓練課程企劃List result = new 訓練課程企劃List(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = _select + _from + _where + @" and 訓練日期 >= @今天 and exists ( select 1 from dbo.課程報名 where 訓練課程編號 = 訓練課程企劃.編號 and 學員編號 = @學員編號 and 報名狀態 in ('R', 'S', 'Y') ) and exists ( select 1 from 表單簽核主檔 where 表單類別ID = N'課程企劃' and 表單ID = 訓練課程企劃.編號 and 應簽關數 = 已簽關數 and 應簽關數 <> 'D' and 最終結果 = 'Y' ) order by 訓練日期 desc"; AddParam(cmdSelect, "今天", DateTime.UtcNow.AddHours(8).Date); AddParam(cmdSelect, "學員編號", 學員編號); Select(cmdSelect, ref list); return result; } [DataObjectMethod(DataObjectMethodType.Select)] private NameValueList DoSelectForDropDown(string 公司別, int 年, bool? 已報名截止, bool? 已上課, bool? 已結案, bool? 已簽核完畢) { NameValueList result = new NameValueList(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = "select null as 編號, '(請選擇)' as 訓練名稱 " + " union all " + "select 編號, '[' + 顯示編號 + '] [' + CONVERT(NVARCHAR(10), 訓練日期, 120) + '] ' + 訓練名稱 " + _from + _where + " and (已取消 <> 'Y' or 已取消 is null) "; if (公司別 != null && 公司別.Length > 0) { cmdSelect.CommandText += " and 公司別 = @公司別 "; } if (年 > 0) { cmdSelect.CommandText += " and 訓練日期 >= @訓練日期1 and 訓練日期 < @訓練日期2 "; AddParam(cmdSelect, "訓練日期1", new DateTime(年, 1, 1)); AddParam(cmdSelect, "訓練日期2", new DateTime(年 + 1, 1, 1)); } if (已報名截止.HasValue) { if (已報名截止.Value) cmdSelect.CommandText += " and dateadd(day, -報名截止期限, 訓練日期) <= @現在時間 "; else cmdSelect.CommandText += " and dateadd(day, -報名截止期限, 訓練日期) > @現在時間 "; } if (已上課.HasValue) { if (已上課.Value) cmdSelect.CommandText += " and 訓練日期 <= @現在時間 "; else cmdSelect.CommandText += " and ( (訓練日期迄 is null and 訓練日期 > @現在時間) or " + " (訓練日期迄 is not null and 訓練日期迄 > @現在時間) ) "; } if (已結案.HasValue) { if (已結案.Value) cmdSelect.CommandText += " and 已結案 = 'Y' "; else cmdSelect.CommandText += " and (已結案 <> 'Y' or 已結案 is null) "; } if (已簽核完畢.HasValue) { if (已簽核完畢.Value) cmdSelect.CommandText += @" and exists ( select 1 from 表單簽核主檔 where 表單類別ID = N'課程企劃' and 表單ID = 訓練課程企劃.編號 and 應簽關數 = 已簽關數 and 應簽關數 <> 'D' and 最終結果 = 'Y' )"; else cmdSelect.CommandText += @" and not exists ( select 1 from 表單簽核主檔 where 表單類別ID = N'課程企劃' and 表單ID = 訓練課程企劃.編號 and 應簽關數 = 已簽關數 and 應簽關數 <> 'D' and 最終結果 = 'Y' )"; } cmdSelect.CommandText += " order by 編號"; AddParam(cmdSelect, "公司別", 公司別); AddParam(cmdSelect, "現在時間", DateTime.UtcNow.AddHours(8)); Select(cmdSelect, ref list); return result; } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select已截止未上課(string 公司別) { return DoSelectForDropDown(公司別, 0, true, false, null, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select已截止未上課(string 公司別, int 年) { return DoSelectForDropDown(公司別, 年, true, false, null, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select未上課(string 公司別) { return DoSelectForDropDown(公司別, 0, null, false, null, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select未上課(string 公司別, int 年) { return DoSelectForDropDown(公司別, 年, true, false, null, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select已上課未結案(string 公司別) { return DoSelectForDropDown(公司別, 0, null, true, false, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select已上課未結案(string 公司別, int 年) { return DoSelectForDropDown(公司別, 年, null, true, false, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select已上課(string 公司別) { return DoSelectForDropDown(公司別, 0, null, true, null, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select已上課(string 公司別, int 年) { return DoSelectForDropDown(公司別, 年, null, true, null, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select已結案(string 公司別) { return DoSelectForDropDown(公司別, 0, null, null, true, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select已結案(string 公司別, int 年) { return DoSelectForDropDown(公司別, 年, null, null, true, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select已簽核未結案(string 公司別) { return DoSelectForDropDown(公司別, 0, null, null, false, true); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select已簽核未結案(string 公司別, int 年) { return DoSelectForDropDown(公司別, 年, null, null, false, true); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select全部(string 公司別) { return DoSelectForDropDown(公司別, 0, null, null, null, null); } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select全部(string 公司別, int 年) { return DoSelectForDropDown(公司別, 年, null, null, null, null); } [DataObjectMethod(DataObjectMethodType.Select)] public 訓練課程企劃List Select年度企劃(string 公司別, int Year) { 訓練課程企劃List result = new 訓練課程企劃List(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = _select + _from + _where + " and 公司別 = @公司別 " + " and 訓練日期 >= @年初 and 訓練日期 < @明年初 " + " and 已取消 <> 'Y' " + " order by 編號"; AddParam(cmdSelect, "年初", new DateTime(Year, 1, 1)); AddParam(cmdSelect, "明年初", new DateTime(Year + 1, 1, 1)); AddParam(cmdSelect, "公司別", 公司別); Select(cmdSelect, ref list); return result; } public int Select選定場地(int 課程企劃編號) { 訓練課程企劃List d1 = SelectOne(課程企劃編號); if (d1.Count == 0) return 0; 場地異動List d2 = new DAC_場地異動(conn).Select最後異動(課程企劃編號); if (d2.Count == 0) return new DAC_場地遴選(conn).Select選定場地(課程企劃編號); else return d2[0].場地編號; } public string Select選定場地名稱(int 課程企劃編號) { 訓練課程企劃List d1 = SelectOne(課程企劃編號); if (d1.Count == 0) return ""; 場地異動List d2 = new DAC_場地異動(conn).Select最後異動(課程企劃編號); if (d2.Count > 0) { if (d2[0].場地編號 > 0) return new DAC_場地(conn).Get場地名稱(d2[0].場地編號); return d2[0].場地名稱 ?? ""; } return new DAC_場地遴選(conn).Select選定場地名稱(課程企劃編號); } public int Select選定講師(int 課程企劃編號, int 課程序號) { 訓練課程內容List d1 = new DAC_訓練課程內容().SelectOne(課程企劃編號, 課程序號); if (d1.Count == 0) return 0; 講師異動List d2 = new DAC_講師異動(conn).Select最後異動(課程企劃編號, 課程序號); if (d2.Count == 0) return new DAC_講師遴選(conn).Select選定講師(課程企劃編號, 課程序號); else return d2[0].講師編號; } public string Select選定講師名稱(int 課程企劃編號, int 課程序號) { 訓練課程內容List d1 = new DAC_訓練課程內容().SelectOne(課程企劃編號, 課程序號); if (d1.Count == 0) return ""; 講師異動List d2 = new DAC_講師異動(conn).Select最後異動(課程企劃編號, 課程序號); if (d2.Count > 0) { if (d2[0].講師編號 > 0) return new DAC_講師(conn).Get姓名(d2[0].講師編號); return d2[0].講師姓名 ?? ""; } return new DAC_講師遴選(conn).Select選定講師名稱(課程企劃編號, 課程序號); } public DataTable Select年度課程執行狀況報表(string 公司別, int 年度, bool 包括未開課) { DbCommand cmd = NewCommand(); cmd.CommandText = @" SELECT A.編號, A.訓練名稱, '' AS 訓練計畫別, A.訓練日期, A.訓練日期迄, A.訓練時數, '' AS 訓練場地, 0 AS 訓練人數, A.預估經費, 0 AS 實際經費, 0.0 AS 學員出席率, 0.0 AS 整體滿意度 FROM 訓練課程企劃 A WHERE A.訓練日期 >= @訓練日期1 AND A.訓練日期 < @訓練日期2 AND A.公司別 = @公司別 "; if (!包括未開課) cmd.CommandText += " AND (A.已取消 IS NULL OR A.已取消 = 'N')"; cmd.CommandText += " ORDER BY A.訓練日期"; AddParam(cmd, "訓練日期1", new DateTime(年度, 1, 1)); AddParam(cmd, "訓練日期2", new DateTime(年度 + 1, 1, 1)); AddParam(cmd, "公司別", 公司別); DataTable result = Select(cmd); DAC_課程報名 Dao課程報名 = new DAC_課程報名(conn); DAC_課程經費 Dao課程經費 = new DAC_課程經費(conn); DAC_滿意度調查課程企劃 Dao滿意度調查課程企劃 = new DAC_滿意度調查課程企劃(conn); // 填入統計欄位 foreach (DataRow r in result.Rows) { int 編號 = DAC.GetInt32(r["編號"]); string 訓練計畫別 = ""; // 取得訓練計畫別 DataTable 計畫Table = Dao課程報名.Select確定報名學員計畫(編號); foreach (DataRow r1 in 計畫Table.Rows) { 訓練計畫別 += DAC.GetString(r1["計畫年度名稱"]) + "\r\n"; } if (訓練計畫別.Length > 0) 訓練計畫別 = 訓練計畫別.Trim(); // 取得場地及滿意度 DataTable 滿意度Table = Dao滿意度調查課程企劃.Select滿意度統計(編號); r["訓練場地"] = Select選定場地名稱(編號); r["訓練人數"] = Dao課程報名.Get出席人數(編號); r["實際經費"] = Dao課程經費.Get經費合計(編號); r["學員出席率"] = Dao課程報名.Get出席率(編號); r["整體滿意度"] = 滿意度Table.Rows.Count > 0 ? DAC.GetDecimal(滿意度Table.Rows[0]["整體滿意度"]) : 0; r.EndEdit(); } result.AcceptChanges(); return result; } [DataObjectMethod(DataObjectMethodType.Select)] public NameValueList Select可選課程日期(int 編號) { NameValueList result = new NameValueList(); 訓練課程企劃List d = SelectOne(編號); if (d.Count > 0) { if (d[0].訓練日期迄.Ticks == 0) { result.Add(d[0].訓練日期.ToString("yyyy-MM-dd"), d[0].訓練日期.ToString("yyyy-MM-dd")); } else { DateTime day = d[0].訓練日期; while (day.CompareTo(d[0].訓練日期迄) <= 0) { result.Add(day.ToString("yyyy-MM-dd"), day.ToString("yyyy-MM-dd")); day = day.AddDays(1); } } } return result; } public bool Get場地講師已簽准(int 編號) { DAC_場地遴選 Dao場地遴選 = new DAC_場地遴選(conn); DAC_表單簽核主檔 Dao表單簽核主檔 = new DAC_表單簽核主檔(conn); 場地遴選List 場地List = Dao場地遴選.SelectOne(編號); bool 場地已簽准 = 場地List.Count > 0; if (場地List.Count > 0) { 表單簽核主檔 場地簽核status = Dao表單簽核主檔.GetLastStatus("場地遴選", String.Format("{0}", 編號)); 場地已簽准 &= 場地簽核status != null && 場地簽核status.應簽關數.CompareTo("D") != 0 && 場地簽核status.應簽關數.CompareTo(場地簽核status.已簽關數) == 0 && 場地簽核status.最終結果 == "Y"; } DAC_訓練課程內容 Dao訓練課程內容 = new DAC_訓練課程內容(conn); 訓練課程內容List 課程內容List = Dao訓練課程內容.SelectBy課程企劃(編號); bool 講師已簽准 = 課程內容List.Count > 0; foreach (訓練課程內容 item in 課程內容List) { 表單簽核主檔 講師簽核status = Dao表單簽核主檔.GetLastStatus("講師遴選", String.Format("{0}|{1}", 編號, item.課程序號)); 講師已簽准 &= 講師簽核status != null && 講師簽核status.應簽關數.CompareTo("D") != 0 && 講師簽核status.應簽關數.CompareTo(講師簽核status.已簽關數) == 0 && 講師簽核status.最終結果 == "Y"; } return 場地已簽准 && 講師已簽准; } public bool Get場地講師已輸入(int 編號) { DAC_場地遴選 Dao場地遴選 = new DAC_場地遴選(conn); 場地遴選List 場地List = Dao場地遴選.SelectOne(編號); bool 場地已輸入 = true; foreach (場地遴選 item in 場地List) { 場地已輸入 &= (item.場地編號_A > 0 || !String.IsNullOrEmpty(item.場地名稱_A)) && item.交通便利_A > 0 && item.安全舒適_A > 0 && item.空間大小_A > 0 && item.設備完善_A > 0 && item.價格合理_A > 0; } DAC_訓練課程內容 Dao訓練課程內容 = new DAC_訓練課程內容(conn); DAC_講師遴選 Dao講師遴選 = new DAC_講師遴選(conn); 訓練課程內容List 課程內容List = Dao訓練課程內容.SelectBy課程企劃(編號); bool 講師已輸入 = true; foreach (訓練課程內容 item in 課程內容List) { 講師遴選List 講師List = Dao講師遴選.SelectOne(編號, item.課程序號); foreach (講師遴選 item2 in 講師List) { 講師已輸入 &= (item2.講師編號_A > 0 || !String.IsNullOrEmpty(item2.講師姓名_A)) && item2.專業背景_A > 0 && item2.講授經驗_A > 0 && item2.口碑與評價_A > 0 && item2.費用_A > 0 && item2.配合度_A > 0 && (item2.講師編號_B > 0 || !String.IsNullOrEmpty(item2.講師姓名_B)) && item2.專業背景_B > 0 && item2.講授經驗_B > 0 && item2.口碑與評價_B > 0 && item2.費用_B > 0 && item2.配合度_B > 0; } } DAC_教材遴選 Dao教材遴選 = new DAC_教材遴選(conn); bool 教材已輸入 = true; foreach (訓練課程內容 item in 課程內容List) { 教材遴選List 教材List = Dao教材遴選.SelectOne(編號, item.課程序號); foreach (教材遴選Item item2 in 教材List) { 教材已輸入 &= !String.IsNullOrEmpty(item2.教材名稱_A) && item2.符合訓練目標_A > 0 && item2.架構規劃完整性_A > 0 && item2.符合課程時數_A > 0 && item2.引起學習興趣_A > 0 && item2.未來工作參考運用_A > 0 && !String.IsNullOrEmpty(item2.教材名稱_B) && item2.符合訓練目標_B > 0 && item2.架構規劃完整性_B > 0 && item2.符合課程時數_B > 0 && item2.引起學習興趣_B > 0 && item2.未來工作參考運用_B > 0; } } return 場地已輸入 && 講師已輸入 && 教材已輸入; } } /// /// 訓練課程企劃 資料集合類別 /// public partial class 訓練課程企劃List : List<訓練課程企劃> { // 有另外加上去的屬性及方法,請加在這裡 } /// /// 訓練課程企劃 資料紀錄類別 /// public partial class 訓練課程企劃 { // 有另外加上去的屬性及方法,請加在這裡 public static string Get訓練日期Str(DateTime 訓練日期, DateTime 訓練日期迄, string Format = "yyyy年MM月dd日(dddd)") { if (訓練日期迄.Ticks == 0) return (訓練日期.Ticks > 0 ? 訓練日期.ToString(Format) : ""); else if (訓練日期迄.Ticks >= 0 && 訓練日期.CompareTo(訓練日期迄) == 0) return (訓練日期.Ticks > 0 ? 訓練日期.ToString(Format) : ""); else return (訓練日期.Ticks > 0 ? 訓練日期.ToString(Format) : "") + (訓練日期迄.Ticks > 0 ? " 至 " + 訓練日期迄.ToString(Format) : ""); } } }