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"));
}
}