Files
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

749 lines
36 KiB
C#

//
// 這個檔案是 課程報名 資料表的資料存取類別 檔案二
// 您可以修改這個檔案,加入您自訂的屬性與方法
//
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
{
///<summary>
/// 課程報名 資料存取類別
///</summary>
public partial class DAC_課程報名 : WebLib.DAC
{
#region 自動產生的資料存取方法
///<summary>
/// InsertOne 之前會執行此方法
/// 在這裡可以做一些檢查或是自動編號等動作
/// 回傳 false 會打斷 InsertOne 的執行
///</summary>
protected virtual bool BeforeInsertOne(課程報名 value)
{
return true;
}
///<summary>
/// InsertOne 之後會執行此方法
///</summary>
protected virtual void AfterInsertOne(課程報名 value)
{
}
///<summary>
/// InsertOne 發生錯誤時會執行此方法
///</summary>
///<param name="handled">錯誤是否已經處理妥當</param>
protected virtual void OnInsertOneError(Exception error, out bool handled)
{
handled = false;
}
///<summary>
/// UpdateOne 之前會執行此方法
/// 在這裡可以做一些檢查
/// 回傳 false 會打斷 UpdateOne 的執行
///</summary>
protected virtual bool BeforeUpdateOne(課程報名 value)
{
return true;
}
///<summary>
/// UpdateOne 之後會執行此方法
///</summary>
protected virtual void AfterUpdateOne(課程報名 value)
{
}
///<summary>
/// UpdateOne 發生錯誤時會執行此方法
///</summary>
///<param name="handled">錯誤是否已經處理妥當</param>
protected virtual void OnUpdateOneError(Exception error, out bool handled)
{
handled = false;
}
///<summary>
/// DeleteOne 之前會執行此方法
/// 在這裡可以做一些檢查
/// 回傳 false 會打斷 DeleteOne 的執行
///</summary>
protected virtual bool BeforeDeleteOne(課程報名 value)
{
return true;
}
///<summary>
/// DeleteOne 之後會執行此方法
///</summary>
protected virtual void AfterDeleteOne(課程報名 value)
{
}
///<summary>
/// DeleteOne 之前會執行此方法
/// 在這裡可以做一些檢查
/// 回傳 false 會打斷 DeleteOne 的執行
///</summary>
protected virtual bool BeforeDeleteOne(string 學員編號, int 訓練課程編號, int DB_APPNO)
{
return true;
}
///<summary>
/// DeleteOne 之後會執行此方法
///</summary>
protected virtual void AfterDeleteOne(string 學員編號, int 訓練課程編號, int DB_APPNO)
{
}
///<summary>
/// DeleteOne 發生錯誤時會執行此方法
///</summary>
///<param name="handled">錯誤是否已經處理妥當</param>
protected virtual void OnDeleteOneError(Exception error, out bool handled)
{
handled = false;
}
#endregion
// 有另外加上去的屬性及方法,請加在這裡
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable Select選課紀錄(string 學員編號, bool 僅已簽核, bool 僅必修, bool 僅已上課, bool 僅已出席)
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select * from (
select A.學員編號, A.訓練課程編號, A.報名狀態, A.報名日期, A.取消報名日期, A.出席狀況,
(select count(1) from 學員出席 where 學員出席.訓練課程編號=A.訓練課程編號 and 學員出席.學員編號=A.學員編號) AS 出席次數,
B.顯示編號, B.訓練名稱, B.訓練日期, B.訓練日期迄, B.取消報名截止期限,
(select count(1) from 滿意度調查 C where A.訓練課程編號=C.訓練課程企劃編號 and A.學員編號=C.學員編號) as 填寫數,
J.心得報告編號, J.上架 as 心得上架
from 課程報名 A
inner join 訓練課程企劃 B on A.訓練課程編號 = B.編號
left outer join 心得報告 J on A.訓練課程編號=J.訓練課程企劃編號 and A.學員編號=J.學員編號
where A.學員編號 = @學員編號";
if (僅已簽核)
cmdSelect.CommandText +=
@" and exists ( select 1 from 表單簽核主檔
where 表單類別ID = N'課程企劃' and 表單ID = B.編號
and 應簽關數 = 已簽關數
and 應簽關數 <> 'D'
and 最終結果 = 'Y' ) ";
if (僅已上課)
cmdSelect.CommandText +=
@" and B.訓練日期 <= GetDate() ";
cmdSelect.CommandText += " ) as TMP1 where 1=1 ";
if (僅已出席)
cmdSelect.CommandText +=
@" and (出席次數 > 0) or (出席狀況 is not null and 出席狀況 <> '') ";
cmdSelect.CommandText += " order by 訓練日期 desc";
AddParam(cmdSelect, "學員編號", 學員編號);
return Select(cmdSelect);
}
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable Select選課紀錄(int 訓練年度, string 計畫別, string 課程名稱, string 公司別)
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select '外訓' AS 開課別, CONVERT(NVARCHAR(10), A.訓練年度) as 訓練日期, '' as 訓練日期迄,
A.訓練名稱, A.訓練時數, A.員工編號, C.BPNME as 員工姓名,
D.RAPYN AS 計畫年度編號,
'【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(E.BPPYN,LEN(E.BPPYN)-5,1)) + '】' + E.BPPYM AS 計畫年度名稱,
D.RABRH AS 站別編號, F.BSRMK AS 站別名稱,
D.RAJNO AS 職務編號, G.BPJME AS 職務名稱,
D.RACNO AS 等級編號, H.BPCME AS 等級名稱,
1 as 填寫數
from 外部受訓紀錄 A
inner join BPSNView C on A.員工編號=C.BPENO
left outer join RASN D on C.BPENO = D.RANUM and D.RAITM = (SELECT MAX(RASN.RAITM) FROM RASN WHERE RASN.RANUM=D.RANUM)
left outer join BPAA E on D.RAPYN = E.BPPYN
left outer join BCLS F on F.BSCLS = D.RABRH and F.BSPAR = 'BPSNBRH'
left outer join BPJA G on G.BPPYN = D.RAPYN and G.BPJNO = D.RAJNO
left outer join BPJB H on H.BPPYN = D.RAPYN and H.BPJNO = D.RAJNO and H.BPCNO = D.RACNO
where 1=1 ";
if (訓練年度 > 0)
{
cmdSelect.CommandText += " and A.訓練年度 = @訓練年度 ";
AddParam(cmdSelect, "訓練年度", 訓練年度);
}
if (計畫別 != null && 計畫別.Length > 0)
{
cmdSelect.CommandText += " and D.RAPYN = @計畫別 ";
}
if (課程名稱 != null && 課程名稱.Length > 0)
{
cmdSelect.CommandText += " and A.訓練名稱 like @課程名稱 ";
}
cmdSelect.CommandText +=
@"
union all
select '內訓' AS 開課別, CONVERT(NVARCHAR(10), B.訓練日期, 120) as 訓練日期, CONVERT(NVARCHAR(10), B.訓練日期迄, 120) as 訓練日期迄,
B.訓練名稱, B.訓練時數, A.學員編號 as 員工編號, C.BPNME as 學員姓名,
D.RAPYN AS 計畫年度編號,
'【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(E.BPPYN,LEN(E.BPPYN)-5,1)) + '】' + E.BPPYM AS 計畫年度名稱,
D.RABRH AS 站別編號, F.BSRMK AS 站別名稱,
D.RAJNO AS 職務編號, G.BPJME AS 職務名稱,
D.RACNO AS 等級編號, H.BPCME AS 等級名稱,
(select count(1) from 滿意度調查 I where A.訓練課程編號=I.訓練課程企劃編號 and A.學員編號=I.學員編號) as 填寫數
from 課程報名 A
inner join 訓練課程企劃 B on A.訓練課程編號 = B.編號
inner join BPSNView C on A.學員編號=C.BPENO
left outer join RASN D on C.BPENO = D.RANUM and D.RAITM = (SELECT MAX(RASN.RAITM) FROM RASN WHERE RASN.RANUM=D.RANUM)
left outer join BPAA E on D.RAPYN = E.BPPYN
left outer join BCLS F on F.BSCLS = D.RABRH and F.BSPAR = 'BPSNBRH'
left outer join BPJA G on G.BPPYN = D.RAPYN and G.BPJNO = D.RAJNO
left outer join BPJB H on H.BPPYN = D.RAPYN and H.BPJNO = D.RAJNO and H.BPCNO = D.RACNO
where exists ( select 1 from 表單簽核主檔
where 表單類別ID = N'課程企劃' and 表單ID = B.編號
and 應簽關數 = 已簽關數
and 應簽關數 <> 'D'
and 最終結果 = 'Y' )
and B.公司別=@公司別 ";
if (訓練年度 > 0)
{
cmdSelect.CommandText += " and B.訓練日期 >= @訓練日期1 and B.訓練日期 < @訓練日期2 ";
AddParam(cmdSelect, "訓練日期1", new DateTime(訓練年度, 1, 1));
AddParam(cmdSelect, "訓練日期2", new DateTime(訓練年度 + 1, 1, 1));
}
if (計畫別 != null && 計畫別.Length > 0)
{
cmdSelect.CommandText += " and D.RAPYN = @計畫別 ";
}
if (課程名稱 != null && 課程名稱.Length > 0)
{
cmdSelect.CommandText += " and B.訓練名稱 like @課程名稱 ";
}
cmdSelect.CommandText += " order by 訓練日期 desc";
AddParam(cmdSelect, "公司別", 公司別);
AddParam(cmdSelect, "計畫別", 計畫別);
AddParam(cmdSelect, "課程名稱", "%" + 課程名稱 + "%");
return Select(cmdSelect);
}
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable Select缺席紀錄(int 年度, string 計畫別, string 訓練名稱, string 公司別, List<string> 訓練企劃編號, List<string> 計畫年度編號)
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select A.學員編號, C.BPNME as 學員姓名, A.訓練課程編號, A.報名狀態, A.報名日期, A.取消報名日期, A.出席狀況, A.請假事由,
B.顯示編號, B.訓練名稱, B.訓練日期, B.訓練日期迄, B.取消報名截止期限, B.計畫別,
D.RAPYN AS 計畫年度編號,
'【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(E.BPPYN,LEN(E.BPPYN)-5,1)) + '】' + E.BPPYM AS 計畫年度名稱,
D.RABRH AS 站別編號, F.BSRMK AS 站別名稱,
D.RAJNO AS 職務編號, G.BPJME AS 職務名稱,
D.RACNO AS 等級編號, H.BPCME AS 等級名稱,
(select count(1) from 滿意度調查 C where A.訓練課程編號=C.訓練課程企劃編號 and A.學員編號=C.學員編號) as 填寫數,
J.心得報告編號, J.上架 as 心得上架
from 課程報名 A
inner join 訓練課程企劃 B on A.訓練課程編號 = B.編號
inner join BPSNView C on A.學員編號=C.BPENO
left outer join RASN D on C.BPENO = D.RANUM and D.RAITM = (SELECT MAX(RASN.RAITM) FROM RASN WHERE RASN.RANUM=D.RANUM)
left outer join BPAA E on D.RAPYN = E.BPPYN
left outer join BCLS F on F.BSCLS = D.RABRH and F.BSPAR = 'BPSNBRH'
left outer join BPJA G on G.BPPYN = D.RAPYN and G.BPJNO = D.RAJNO
left outer join BPJB H on H.BPPYN = D.RAPYN and H.BPJNO = D.RAJNO and H.BPCNO = D.RACNO
left outer join 心得報告 J on A.訓練課程編號=J.訓練課程企劃編號 and A.學員編號=J.學員編號
where exists ( select 1 from 表單簽核主檔
where 表單類別ID = N'課程企劃' and 表單ID = B.編號
and 應簽關數 = 已簽關數
and 應簽關數 <> 'D'
and 最終結果 = 'Y' )
and (SELECT COUNT(1) FROM 學員出席 K WHERE A.訓練課程編號=K.訓練課程編號 and A.學員編號=K.學員編號 AND K.出席狀況='Y') = 0 ";
if (年度 > 0)
{
cmdSelect.CommandText += " and B.訓練日期 >= @訓練日期1 and B.訓練日期 < @訓練日期2 ";
AddParam(cmdSelect, "訓練日期1", new DateTime(年度, 1, 1));
AddParam(cmdSelect, "訓練日期2", new DateTime(年度 + 1, 1, 1));
}
if (計畫別 != null && 計畫別.Length > 0)
{
cmdSelect.CommandText += " and B.計畫別 = @計畫別 ";
AddParam(cmdSelect, "計畫別", 計畫別);
}
if (訓練名稱 != null && 訓練名稱.Length > 0)
{
cmdSelect.CommandText += " and B.訓練名稱 like @訓練名稱 ";
AddParam(cmdSelect, "訓練名稱", "%" + 訓練名稱 + "%");
}
if (公司別 != null && 公司別.Length > 0)
{
cmdSelect.CommandText += " and B.公司別 = @公司別 ";
AddParam(cmdSelect, "公司別", 公司別);
}
if (訓練企劃編號 != null && 訓練企劃編號.Count > 0)
{
cmdSelect.CommandText += " and B.編號 in (" + String.Join(",", 訓練企劃編號.ToArray()) + ")";
}
if (計畫年度編號 != null && 計畫年度編號.Count > 0)
{
cmdSelect.CommandText += " and D.RAPYN in (" + String.Join(",", 計畫年度編號.ToArray()) + ")";
}
cmdSelect.CommandText += " order by B.訓練日期 desc";
return Select(cmdSelect);
}
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable Select確定報名學員名單(int 訓練課程編號, string 計畫年度編號 = "")
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select A.學員編號, C.BPNME as 學員姓名, C.BPEML as 電子郵件, A.訓練課程編號,
A.報名狀態, A.報名日期, A.取消報名日期, A.出席狀況, A.請假事由, A.通知發送狀態,
B.顯示編號, B.訓練名稱, B.訓練日期, B.訓練日期迄, B.取消報名截止期限,
D.RAPYN AS 計畫年度編號,
'【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(E.BPPYN,LEN(E.BPPYN)-5,1)) + '】' + E.BPPYM AS 計畫年度名稱,
D.RABRH AS 站別編號, F.BSRMK AS 站別名稱,
D.RAJNO AS 職務編號, G.BPJME AS 職務名稱,
D.RACNO AS 等級編號, H.BPCME AS 等級名稱,
(select count(1) from 滿意度調查 I where A.訓練課程編號=I.訓練課程企劃編號 and A.學員編號=I.學員編號) as 填寫數,
J.心得報告編號, J.上架 as 心得上架
from 課程報名 A
inner join 訓練課程企劃 B on A.訓練課程編號 = B.編號
inner join BPSNView C on A.學員編號=C.BPENO
left outer join RASN D on C.BPENO = D.RANUM and D.RAITM = (SELECT MAX(RASN.RAITM) FROM RASN WHERE RASN.RANUM=D.RANUM)
left outer join BPAA E on D.RAPYN = E.BPPYN
left outer join BCLS F on F.BSCLS = D.RABRH and F.BSPAR = 'BPSNBRH'
left outer join BPJA G on G.BPPYN = D.RAPYN and G.BPJNO = D.RAJNO
left outer join BPJB H on H.BPPYN = D.RAPYN and H.BPJNO = D.RAJNO and H.BPCNO = D.RACNO
left outer join 心得報告 J on A.訓練課程編號=J.訓練課程企劃編號 and A.學員編號=J.學員編號
where A.訓練課程編號 = @訓練課程編號
and (A.報名狀態 = 'Y' or A.報名狀態 = 'R') ";
AddParam(cmdSelect, "訓練課程編號", 訓練課程編號);
if (計畫年度編號 != null && 計畫年度編號.Length > 0)
{
cmdSelect.CommandText += " and D.RAPYN = @計畫年度編號 ";
AddParam(cmdSelect, "計畫年度編號", 計畫年度編號);
}
cmdSelect.CommandText += " order by 計畫年度編號, 站別編號, 職務編號, 等級編號, A.學員編號";
return Select(cmdSelect);
}
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable Select效益追蹤名單(int 訓練課程編號, string 站別編號)
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select A.學員編號, C.BPNME as 學員姓名, C.BPEML as 電子郵件, A.訓練課程編號,
A.報名狀態, A.報名日期, A.取消報名日期, A.出席狀況, A.請假事由, A.通知發送狀態,
B.顯示編號, B.訓練名稱, B.訓練日期, B.訓練日期迄, B.取消報名截止期限,
D.RAPYN AS 計畫年度編號,
'【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(E.BPPYN,LEN(E.BPPYN)-5,1)) + '】' + E.BPPYM AS 計畫年度名稱,
D.RABRH AS 站別編號, F.BSRMK AS 站別名稱,
D.RAJNO AS 職務編號, G.BPJME AS 職務名稱,
D.RACNO AS 等級編號, H.BPCME AS 等級名稱,
(select count(1) from 滿意度調查 I where A.訓練課程編號=I.訓練課程企劃編號 and A.學員編號=I.學員編號) as 填寫數,
J.心得報告編號, J.上架 as 心得上架
from 課程報名 A
inner join 訓練課程企劃 B on A.訓練課程編號 = B.編號
inner join BPSNView C on A.學員編號=C.BPENO
left outer join RASN D on C.BPENO = D.RANUM and D.RAITM = (SELECT MAX(RASN.RAITM) FROM RASN WHERE RASN.RANUM=D.RANUM)
left outer join BPAA E on D.RAPYN = E.BPPYN
left outer join BCLS F on F.BSCLS = D.RABRH and F.BSPAR = 'BPSNBRH'
left outer join BPJA G on G.BPPYN = D.RAPYN and G.BPJNO = D.RAJNO
left outer join BPJB H on H.BPPYN = D.RAPYN and H.BPJNO = D.RAJNO and H.BPCNO = D.RACNO
left outer join 心得報告 J on A.訓練課程編號=J.訓練課程企劃編號 and A.學員編號=J.學員編號
where A.訓練課程編號 = @訓練課程編號
and (A.報名狀態 = 'Y' or A.報名狀態 = 'R')
and (SELECT COUNT(1) FROM 學員出席 K WHERE A.訓練課程編號=K.訓練課程編號 and A.學員編號=K.學員編號 AND K.出席狀況='Y') > 0";
AddParam(cmdSelect, "訓練課程編號", 訓練課程編號);
if (站別編號 != null && 站別編號.Length > 0)
{
string[] IDs = 站別編號.Split('|');
if (IDs.Length > 1)
{
// 部門
if (IDs[0] == "A")
{
string str組織 = "";
DAC_組織圖 Dao組織圖 = new DAC_組織圖(conn);
組織圖List d = Dao組織圖.Select子樹(1, DAC.GetInt32(IDs[1]));
foreach (組織圖 item in d)
{
str組織 += String.Format("{0},", item.組織ID);
}
if (str組織.Length > 0)
{
str組織 = str組織.Remove(str組織.Length - 1);
cmdSelect.CommandText += " and exists (select 1 from 組織人員 X where A.學員編號=X.人員ID and X.組織ID IN (" + str組織 + ") ) ";
}
}
// 站別
else
{
cmdSelect.CommandText += " and D.RABRH = @站別編號 ";
AddParam(cmdSelect, "站別編號", IDs[1]);
}
}
}
// cmdSelect.CommandText += " order by 計畫年度編號, 站別編號, 職務編號, 等級編號, A.學員編號";
cmdSelect.CommandText += " order by A.學員編號";
return Select(cmdSelect);
}
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable Select選課狀況(int 訓練課程編號, bool 必修)
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select A.學員編號, C.BPNME as 學員姓名, C.BPEML as 電子郵件, A.訓練課程編號,
A.報名狀態, A.報名日期, A.取消報名日期, A.出席狀況, A.請假事由, A.通知發送狀態,
B.顯示編號, B.訓練名稱, B.訓練日期, B.訓練日期迄, B.取消報名截止期限,
D.RAPYN AS 計畫年度編號,
'【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(E.BPPYN,LEN(E.BPPYN)-5,1)) + '】' + E.BPPYM AS 計畫年度名稱,
D.RABRH AS 站別編號, F.BSRMK AS 站別名稱,
D.RAJNO AS 職務編號, G.BPJME AS 職務名稱,
D.RACNO AS 等級編號, H.BPCME AS 等級名稱
from 課程報名 A
inner join 訓練課程企劃 B on A.訓練課程編號 = B.編號
inner join BPSNView C on A.學員編號=C.BPENO
left outer join RASN D on C.BPENO = D.RANUM and D.RAITM = (SELECT MAX(RASN.RAITM) FROM RASN WHERE RASN.RANUM=D.RANUM)
left outer join BPAA E on D.RAPYN = E.BPPYN
left outer join BCLS F on F.BSCLS = D.RABRH and F.BSPAR = 'BPSNBRH'
left outer join BPJA G on G.BPPYN = D.RAPYN and G.BPJNO = D.RAJNO
left outer join BPJB H on H.BPPYN = D.RAPYN and H.BPJNO = D.RAJNO and H.BPCNO = D.RACNO
left outer join 心得報告 J on A.訓練課程編號=J.訓練課程企劃編號 and A.學員編號=J.學員編號
where A.訓練課程編號 = @訓練課程編號";
if (必修)
cmdSelect.CommandText += " and A.報名狀態 = 'R' ";
else
cmdSelect.CommandText += " and A.報名狀態 <> 'R' AND A.報名狀態 <> 'N' ";
AddParam(cmdSelect, "訓練課程編號", 訓練課程編號);
cmdSelect.CommandText += " order by A.學員編號";
return Select(cmdSelect);
}
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable Select確定報名學員計畫(int 訓練課程編號)
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select distinct 計畫年度編號, ISNULL('【' + I.BSSCR + '】', '') + 計畫年度名稱 as 計畫年度名稱 from
(select A.學員編號, C.BPNME as 學員姓名, C.BPEML as 電子郵件, A.訓練課程編號,
A.報名狀態, A.報名日期, A.取消報名日期, A.出席狀況, A.請假事由, A.通知發送狀態,
B.顯示編號, B.訓練名稱, B.訓練日期, B.訓練日期迄, B.取消報名截止期限,
D.RAPYN AS 計畫年度編號, E.BPPYM AS 計畫年度名稱,
D.RABRH AS 站別編號, F.BSRMK AS 站別名稱,
D.RAJNO AS 職務編號, G.BPJME AS 職務名稱,
D.RACNO AS 等級編號, H.BPCME AS 等級名稱
from 課程報名 A
inner join 訓練課程企劃 B on A.訓練課程編號 = B.編號
inner join BPSNView C on A.學員編號=C.BPENO
left outer join RASN D on C.BPENO = D.RANUM and D.RAITM = (SELECT MAX(RASN.RAITM) FROM RASN WHERE RASN.RANUM=D.RANUM)
left outer join BPAA E on D.RAPYN = E.BPPYN
left outer join BCLS F on F.BSCLS = D.RABRH and F.BSPAR = 'BPSNBRH'
left outer join BPJA G on G.BPPYN = D.RAPYN and G.BPJNO = D.RAJNO
left outer join BPJB H on H.BPPYN = D.RAPYN and H.BPJNO = D.RAJNO and H.BPCNO = D.RACNO
where A.訓練課程編號 = @訓練課程編號
and (A.報名狀態 = 'Y' or A.報名狀態 = 'R')) as tmp1
left outer join BCLS I on I.BSCLS = SUBSTRING(計畫年度編號, LEN(計畫年度編號)-5,1) and I.BSPAR = 'BCUSZON'
order by 計畫年度編號";
AddParam(cmdSelect, "訓練課程編號", 訓練課程編號);
return Select(cmdSelect);
}
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable Select必修學員(int 訓練課程編號)
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select A.學員編號, A.學員編號 + ' ' + B.BPNME as 學員姓名
from 課程報名 A
inner join BPSNView B on A.學員編號=B.BPENO
where A.訓練課程編號 = @訓練課程編號
and A.報名狀態 = 'R'
order by A.學員編號";
AddParam(cmdSelect, "訓練課程編號", 訓練課程編號);
return Select(cmdSelect);
}
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable Select選修學員(int 訓練課程編號)
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select A.學員編號, A.學員編號 + ' ' + B.BPNME as 學員姓名
from 課程報名 A
inner join BPSNView B on A.學員編號=B.BPENO
where A.訓練課程編號 = @訓練課程編號
and (A.報名狀態 = 'S' or A.報名狀態 = 'Y')
order by A.學員編號";
AddParam(cmdSelect, "訓練課程編號", 訓練課程編號);
return Select(cmdSelect);
}
public int Get報名人數(int 訓練課程編號)
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select count(1) from 課程報名
where 訓練課程編號 = @訓練課程編號
and (報名狀態 = 'Y' or 報名狀態 = 'R')";
AddParam(cmdSelect, "訓練課程編號", 訓練課程編號);
int i;
ExecuteScalar(cmdSelect, out i);
return i;
}
/*
public int Get出席人數(int 訓練課程編號)
{
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"select count(1) from 課程報名
where 訓練課程編號 = @訓練課程編號
and (報名狀態 = 'Y' or 報名狀態 = 'R') and 出席狀況='Y'";
AddParam(cmdSelect, "訓練課程編號", 訓練課程編號);
int i;
ExecuteScalar(cmdSelect, out i);
return i;
}
*/
public int Get出席人數(int 訓練課程編號)
{
return new DAC_學員出席(conn).Get出席人次(訓練課程編號);
}
public decimal Get出席率(int 訓練課程編號)
{
// 出席率 = 出席人次 / 報名人數 * 課程天數
if (訓練課程編號 == 0)
return 0;
int 出席人次 = new DAC_學員出席(conn).Get出席人次(訓練課程編號);
int 報名人數 = Get報名人數(訓練課程編號);
int 課程天數 = new DAC_訓練課程內容(conn).Select訓練日期List(訓練課程編號).Count;
if (課程天數 == 0 || 報名人數 == 0)
return 0;
else
return (decimal)出席人次 / ((decimal)報名人數 * (decimal)課程天數) * 100m;
/*
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
@"declare @totalcount int
select @totalcount = count(1) from 課程報名
where 訓練課程編號 = @訓練課程編號
and (報名狀態 = 'Y' or 報名狀態 = 'R')
if @totalcount > 0
select
cast((select count(1) from 課程報名
where 訓練課程編號 = @訓練課程編號
and (報名狀態 = 'Y' or 報名狀態 = 'R') and 出席狀況='Y') as float)
/
cast((select count(1) from 課程報名
where 訓練課程編號 = @訓練課程編號
and (報名狀態 = 'Y' or 報名狀態 = 'R')) as float) * 100
else
select 0";
AddParam(cmdSelect, "訓練課程編號", 訓練課程編號);
decimal i;
ExecuteScalar(cmdSelect, out i);
return i;
*/
}
/// <summary>
/// 取得某學員是否報名某課程
/// </summary>
public string Get報名狀態(string 學員編號, int 訓練課程編號)
{
課程報名List d = SelectOne(學員編號, 訓練課程編號);
if (d.Count == 0)
return "";
return d[0].報名狀態;
}
public void 必修(string 學員編號, int 訓練課程編號, string userId)
{
課程報名List values = SelectOne(學員編號, 訓練課程編號);
if (values.Count == 0)
{
課程報名 newValue = new 課程報名();
newValue.學員編號 = 學員編號;
newValue.訓練課程編號 = 訓練課程編號;
newValue.報名日期 = DateTime.UtcNow.AddHours(8);
newValue.報名狀態 = "R";
newValue.DB_CRUSR = userId;
InsertOne(newValue);
}
else
{
// 已經是必修或是選修,不管他
if (values[0].報名狀態 == "R" || values[0].報名狀態 == "Y" || values[0].報名狀態 == "S")
return;
values[0].報名日期 = DateTime.UtcNow.AddHours(8);
values[0].取消報名日期 = new DateTime();
values[0].報名狀態 = "R";
values[0].DB_TRUSR = userId;
UpdateOne(values[0]);
}
}
public void 取消必修(string 學員編號, int 訓練課程編號, string userId)
{
課程報名List values = SelectOne(學員編號, 訓練課程編號);
if (values.Count > 0 && values[0].報名狀態 == "R")
{
values[0].報名日期 = DateTime.UtcNow.AddHours(8);
values[0].取消報名日期 = new DateTime();
values[0].報名狀態 = "N";
values[0].DB_TRUSR = userId;
UpdateOne(values[0]);
}
}
public void 選修(string 學員編號, int 訓練課程編號, string userId)
{
課程報名List values = SelectOne(學員編號, 訓練課程編號);
if (values.Count == 0)
{
課程報名 newValue = new 課程報名();
newValue.學員編號 = 學員編號;
newValue.訓練課程編號 = 訓練課程編號;
newValue.報名日期 = DateTime.UtcNow.AddHours(8);
newValue.報名狀態 = "S";
newValue.DB_CRUSR = userId;
InsertOne(newValue);
}
else
{
// 已經是必修或是選修,不管他
if (values[0].報名狀態 == "R" || values[0].報名狀態 == "Y" || values[0].報名狀態 == "S")
return;
values[0].報名日期 = DateTime.UtcNow.AddHours(8);
values[0].取消報名日期 = new DateTime();
values[0].報名狀態 = "S";
values[0].DB_TRUSR = userId;
UpdateOne(values[0]);
}
}
public void 取消選修(string 學員編號, int 訓練課程編號, string userId)
{
課程報名List values = SelectOne(學員編號, 訓練課程編號);
if (values.Count > 0 && (values[0].報名狀態 == "S" || values[0].報名狀態 == "Y"))
{
values[0].報名日期 = DateTime.UtcNow.AddHours(8);
values[0].取消報名日期 = new DateTime();
values[0].報名狀態 = "N";
values[0].DB_TRUSR = userId;
UpdateOne(values[0]);
}
}
public void 選修報名(string 學員編號, int 訓練課程編號, string userId)
{
課程報名List values = SelectOne(學員編號, 訓練課程編號);
if (values.Count > 0 && values[0].報名狀態 == "S")
{
values[0].報名日期 = DateTime.UtcNow.AddHours(8);
values[0].取消報名日期 = new DateTime();
values[0].報名狀態 = "Y";
values[0].DB_TRUSR = userId;
UpdateOne(values[0]);
}
}
public void 取消報名(string 學員編號, int 訓練課程編號, string userId)
{
課程報名List values = SelectOne(學員編號, 訓練課程編號);
if (values.Count > 0 && values[0].報名狀態 == "Y")
{
values[0].報名日期 = new DateTime();
values[0].取消報名日期 = DateTime.UtcNow.AddHours(8);
values[0].報名狀態 = "S";
values[0].DB_TRUSR = userId;
UpdateOne(values[0]);
}
}
public void 標記已發送學員通知(string 學員編號, int 訓練課程編號, string UserId)
{
課程報名List values = SelectOne(學員編號, 訓練課程編號);
if (values.Count > 0)
{
values[0].通知發送狀態 = "Y";
values[0].DB_TRUSR = UserId;
UpdateOne(values[0]);
}
}
public void Update出席狀況(string 學員編號, int 訓練課程編號, string 出席狀況, string 請假事由, string UserId)
{
課程報名List values = SelectOne(學員編號, 訓練課程編號);
if (values.Count > 0)
{
values[0].出席狀況 = 出席狀況;
values[0].請假事由 = 請假事由;
values[0].DB_TRUSR = UserId;
UpdateOne(values[0]);
}
}
}
///<summary>
/// 課程報名 資料集合類別
///</summary>
public partial class 課程報名List : List<課程報名>
{
// 有另外加上去的屬性及方法,請加在這裡
}
///<summary>
/// 課程報名 資料紀錄類別
///</summary>
public partial class 課程報名
{
// 有另外加上去的屬性及方法,請加在這裡
}
}