using System; using System.Data; using System.Data.Common; using System.Configuration; using System.Text; using System.Collections.Generic; using Wellan.Data; /// /// 員工資料的資料處理類別 /// public class BpsnDAC : Wellan.Data.BPSN_DAC { private DbCommand cmdSelect; private DbCommand cmdInsert; private DbCommand cmdUpdate; private DbCommand cmdDelete; private StringBuilder sb = new StringBuilder(); private string select = "SELECT * "; private string from = " FROM BPSNView "; private string where = " WHERE 1=1 "; private string order = " ORDER BY BPENO "; public BpsnDAC() { } public BpsnDAC(string connectionConfig, string connectionConfigName) : this() { this._connectionConfig = connectionConfig; this._connectionConfigName = connectionConfigName; } public BpsnDAC(WQuery query) { this._query = query; } private void Init() { EnsureQuery(); EnsureDbObjects(); } private void EnsureDbObjects() { cmdSelect = Query.NewCommand(); cmdInsert = Query.NewCommand(); cmdUpdate = Query.NewCommand(); cmdDelete = Query.NewCommand(); } public DataTable SelectAll() { Init(); cmdSelect.CommandText = select + from + order; cmdSelect.Parameters.Clear(); return Query.Select(cmdSelect); } public void ClearWhere() { Init(); cmdSelect.Parameters.Clear(); sb.Length = 0; sb.Append(select); sb.Append(from); sb.Append(where); } public void AddWhere(string fieldName, string value1, string value2, bool like) { Init(); if (value1 != null && value1.Length > 0 && value2 != null && value2.Length > 0) { sb.Append(String.Format(" AND {0} >= @{0}1 AND {0} <= @{0}2 ", fieldName)); cmdSelect.Parameters.Add(Query.NewParameter(fieldName + "1", value1)); cmdSelect.Parameters.Add(Query.NewParameter(fieldName + "2", value2)); } else if (value1 != null && value1.Length > 0) { if (like) { sb.Append(String.Format(" AND {0} LIKE @{0} ", fieldName)); cmdSelect.Parameters.Add(Query.NewParameter(fieldName, value1.ToString() + "%")); } else { sb.Append(String.Format(" AND {0} = @{0} ", fieldName)); cmdSelect.Parameters.Add(Query.NewParameter(fieldName, value1)); } } else if (value2 != null && value2.Length > 0) { if (like) { sb.Append(String.Format(" AND {0} LIKE @{0} ", fieldName)); cmdSelect.Parameters.Add(Query.NewParameter(fieldName, value2 + "%")); } else { sb.Append(String.Format(" AND {0} = @{0} ", fieldName)); cmdSelect.Parameters.Add(Query.NewParameter(fieldName, value2)); } } } public DataTable SelectByWhere() { Init(); sb.Append(order); return Query.Select(cmdSelect); } /// /// 取得人員目前派駐專案 /// /// /// public string GetCurrentProject(string bpeno) { return GetProjectByDate(bpeno, DateTime.UtcNow.AddHours(8).Date); } /// /// 取得人員目前派駐專案 /// /// /// public string GetProjectByDate(string bpeno, DateTime date) { DbCommand cmd = Query.NewCommand(@" SELECT TOP 1 RAPYN FROM ( SELECT 1 AS O, RAPYN FROM RASN WHERE RANUM = @BPENO AND RASDT <= @DATE AND (RAEDT >= @DATE OR RAEDT IS NULL) UNION SELECT TOP 1 2 AS O, RAPYN FROM RASN WHERE RANUM = @BPENO AND DATEPART(YEAR, RASDT) = DATEPART(YEAR, @DATE) AND DATEPART(MONTH, RASDT) = DATEPART(MONTH, @DATE) ) AS TMP1 WHERE RAPYN <> '' AND RAPYN IS NOT NULL ORDER BY O"); AddParam(cmd, "BPENO", bpeno); AddParam(cmd, "DATE", date); return GetStringValue(Query.ExecuteScalar(cmd)); } /// /// 取得人員目前派駐地點 /// /// /// public string GetCurrentSite(string bpeno) { return GetSiteByDate(bpeno, DateTime.UtcNow.AddHours(8).Date); } /// /// 取得人員目前派駐地點 /// /// /// public string GetSiteByDate(string bpeno, DateTime date) { DbCommand cmd = Query.NewCommand(@" SELECT C.BSSCR FROM BPSNView A LEFT OUTER JOIN RASN B ON A.BPENO=B.RANUM AND (B.RASDT <= @DATE AND (B.RAEDT >= @DATE OR B.RAEDT IS NULL)) LEFT OUTER JOIN BCLS C ON B.RABRH=C.BSCLS AND C.BSPAR='BPSNBRH' WHERE A.BPENO=@BPENO"); AddParam(cmd, "BPENO", bpeno); AddParam(cmd, "DATE", date); return GetStringValue(Query.ExecuteScalar(cmd)); } /// /// 取得人員電子郵件 /// /// /// public string GetEmail(string bpeno) { DbCommand cmd = Query.NewCommand(@" SELECT BPEML FROM BPSNView WHERE BPENO=@BPENO"); AddParam(cmd, "BPENO", bpeno); return GetStringValue(Query.ExecuteScalar(cmd)); } /// /// 取得人員電子郵件2 /// /// /// public string GetEmail2(string bpeno) { DbCommand cmd = Query.NewCommand(@" SELECT BPEM2 FROM BPSNView WHERE BPENO=@BPENO"); AddParam(cmd, "BPENO", bpeno); return GetStringValue(Query.ExecuteScalar(cmd)); } /// /// 取得某日期人員所屬公司名稱 /// /// 員工編號 /// 日期 /// public List GetCompanyByDate(string bpeno, DateTime date) { DbCommand cmd = Query.NewCommand(@" SELECT TOP 1 RPCPY FROM ( SELECT RPENO, RPCPY, RPSDT, RPEDT, @YYMM-RPSDT AS SDTDIFF FROM RPIR WHERE RPENO=@BPENO AND (RPSDT <= @YYMM AND RPEDT >= @YYMM OR RPSDT <= @YYMM AND RPEDT IS NULL) UNION SELECT RPENO, RPCPY, RPSDT, RPEDT, @YYMM-RPSDT AS SDTDIFF FROM RPIB WHERE RPENO=@BPENO AND (RPSDT <= @YYMM AND RPEDT >= @YYMM OR RPSDT <= @YYMM AND RPEDT IS NULL) ) AS TMP1 ORDER BY SDTDIFF"); AddParam(cmd, "BPENO", bpeno); AddParam(cmd, "YYMM", date); List result = new List(); result.Add(GetStringValue(Query.ExecuteScalar(cmd))); result.Add(CompanyDAC.GetCompanyName(result[0])); return result; } /// /// 取得人員到職日期 /// /// /// public DateTime GetBPSDY(string bpeno) { DbCommand cmd = Query.NewCommand(@" SELECT BPSDY FROM BPSNView WHERE BPENO=@BPENO"); AddParam(cmd, "BPENO", bpeno); return GetDateTimeValue(Query.ExecuteScalar(cmd)); } /// /// 取得人員離職日期 /// /// /// public DateTime GetBPEDY(string bpeno) { DbCommand cmd = Query.NewCommand(@" SELECT BPEDY FROM BPSNView WHERE BPENO=@BPENO"); AddParam(cmd, "BPENO", bpeno); return GetDateTimeValue(Query.ExecuteScalar(cmd)); } private static List managerIds = new List(); public static bool IsManager(string bpeno) { if (managerIds.Count == 0) { managerIds.Add("00001"); managerIds.Add("00002"); managerIds.Add("00003"); } return managerIds.Contains(bpeno); } /// /// 取出某日期在職的員工 /// /// 日期 /// public DataTable GetOnBoardEmployee(DateTime date) { return Query.Select(Query.NewCommand("SELECT * FROM BPSNView WHERE dbo.EmployeeOnboard(BPENO, @DATE) = 1")); } }