595 lines
23 KiB
C#
595 lines
23 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Configuration;
|
|
using System.Data;
|
|
using System.Data.Common;
|
|
using System.Text;
|
|
using System.Xml.Linq;
|
|
using Wellan.Data;
|
|
|
|
/// <summary>
|
|
/// 人員派遣資料的資料處理類別
|
|
/// </summary>
|
|
public class RasnDAC : Wellan.Data.WDAC
|
|
{
|
|
private DbCommand cmdSelectRasnRapyn = null;
|
|
private DbCommand cmdSelectRasb = null;
|
|
private DbCommand cmdSelectRasnOne = null;
|
|
private DbCommand cmdSelectRasbOne = null;
|
|
private DbCommand cmdSelectRasnAll = null;
|
|
private DbCommand cmdSelectRasnAll2 = null;
|
|
|
|
public RasnDAC()
|
|
{
|
|
string selectRasn =
|
|
@"SELECT A.RANUM, A.RAITM, 0 AS RBITM, NULL AS RBBDT, A.RACNM, A.RAPYN, A.RASDT,
|
|
A.RAEDT, A.RAJNO, A.RACNO, A.RABRH, A.RAS01, A.RAWTZ, A.APPNO,
|
|
B.BPSRM, B.BPSRD, B.BPP01, B.BPP02, B.BPP03, B.BPP04, B.BPP05
|
|
FROM RASN A
|
|
INNER JOIN BPJB B ON A.RAPYN=B.BPPYN AND A.RAJNO=B.BPJNO AND A.RACNO=B.BPCNO
|
|
WHERE A.RANUM=@RANUM AND A.RAITM=@RAITM";
|
|
string selectRasb =
|
|
@"SELECT A.RANUM, A.RAITM, B.RBITM, B.RBBDT, A.RACNM, A.RAPYN, A.RASDT,
|
|
A.RAEDT, B.RAJNO, B.RACNO, B.RABRH, A.RAS01, A.RAWTZ, B.APPNO,
|
|
C.BPSRM, C.BPSRD, C.BPP01, C.BPP02, C.BPP03, C.BPP04, C.BPP05
|
|
FROM RASN A
|
|
INNER JOIN RASB B ON A.RANUM=B.RANUM AND A.RAITM=B.RAITM
|
|
INNER JOIN BPJB C ON A.RAPYN=C.BPPYN AND B.RAJNO=C.BPJNO AND B.RACNO=C.BPCNO
|
|
WHERE A.RANUM=@RANUM AND A.RAITM=@RAITM";
|
|
|
|
// 取出最後一筆異動
|
|
cmdSelectRasb = Query.NewCommand(
|
|
"SELECT TOP 1 * FROM ( " + selectRasn + " UNION " + selectRasb + " ) TMP ORDER BY RBITM DESC");
|
|
cmdSelectRasb.Parameters.Add(Query.NewParameter("RANUM", DbType.String));
|
|
cmdSelectRasb.Parameters.Add(Query.NewParameter("RAITM", DbType.Int32));
|
|
|
|
// 取出某一筆員工派遣資料
|
|
cmdSelectRasnOne = Query.NewCommand(selectRasn);
|
|
cmdSelectRasnOne.Parameters.Add(Query.NewParameter("RANUM", DbType.String));
|
|
cmdSelectRasnOne.Parameters.Add(Query.NewParameter("RAITM", DbType.Int32));
|
|
|
|
// 取出某一筆員工派遣異動資料
|
|
cmdSelectRasbOne = Query.NewCommand(selectRasb + " AND B.RBITM=@RBITM");
|
|
cmdSelectRasbOne.Parameters.Add(Query.NewParameter("RANUM", DbType.String));
|
|
cmdSelectRasbOne.Parameters.Add(Query.NewParameter("RAITM", DbType.Int32));
|
|
cmdSelectRasbOne.Parameters.Add(Query.NewParameter("RBITM", DbType.Int32));
|
|
|
|
// 取出某員工編號全部的紀錄,以異動次數排序
|
|
cmdSelectRasnAll = Query.NewCommand(selectRasn + " UNION " + selectRasb + " ORDER BY RBITM");
|
|
cmdSelectRasnAll.Parameters.Add(Query.NewParameter("RANUM", DbType.String));
|
|
cmdSelectRasnAll.Parameters.Add(Query.NewParameter("RAITM", DbType.Int32));
|
|
|
|
// 取出某員工編號全部的紀錄,以生效日期排序
|
|
cmdSelectRasnAll2 = Query.NewCommand(selectRasn + " UNION " + selectRasb + " ORDER BY RBBDT");
|
|
cmdSelectRasnAll2.Parameters.Add(Query.NewParameter("RANUM", DbType.String));
|
|
cmdSelectRasnAll2.Parameters.Add(Query.NewParameter("RAITM", DbType.Int32));
|
|
}
|
|
|
|
public RasnDAC(string connectionConfig, string connectionConfigName)
|
|
: this()
|
|
{
|
|
base._connectionConfig = connectionConfig;
|
|
base._connectionConfigName = connectionConfigName;
|
|
}
|
|
|
|
public RasnDAC(WQuery query)
|
|
: this()
|
|
{
|
|
base._query = query;
|
|
}
|
|
|
|
// 準備輸出資料架構
|
|
private DataTable NewResult()
|
|
{
|
|
DataTable Result = new DataTable();
|
|
Result.Columns.Add("RANUM", typeof(String));
|
|
Result.Columns.Add("RAITM", typeof(Int32));
|
|
Result.Columns.Add("RBITM", typeof(Int32));
|
|
Result.Columns.Add("RBBDT", typeof(DateTime));
|
|
Result.Columns.Add("RACNM", typeof(String));
|
|
Result.Columns.Add("RAPYN", typeof(String));
|
|
Result.Columns.Add("RASDT", typeof(DateTime));
|
|
Result.Columns.Add("RAEDT", typeof(DateTime));
|
|
Result.Columns.Add("RAJNO", typeof(String));
|
|
Result.Columns.Add("RACNO", typeof(String));
|
|
Result.Columns.Add("RABRH", typeof(String));
|
|
Result.Columns.Add("RAS01", typeof(Double));
|
|
Result.Columns.Add("RAWTZ", typeof(String));
|
|
Result.Columns.Add("APPNO", typeof(Int32));
|
|
Result.Columns.Add("BPSRM", typeof(Int32));
|
|
Result.Columns.Add("BPSRD", typeof(Int32));
|
|
Result.Columns.Add("BPP01", typeof(Int32));
|
|
Result.Columns.Add("BPP02", typeof(Int32));
|
|
Result.Columns.Add("BPP03", typeof(Int32));
|
|
Result.Columns.Add("BPP04", typeof(Int32));
|
|
Result.Columns.Add("BPP05", typeof(Int32));
|
|
Result.Columns.Add("RAEDT_Changed", typeof(Char));
|
|
Result.Columns.Add("RAJNO_Changed", typeof(Char));
|
|
Result.Columns.Add("RACNO_Changed", typeof(Char));
|
|
Result.Columns.Add("RABRH_Changed", typeof(Char));
|
|
Result.Columns.Add("RAWTZ_Changed", typeof(Char));
|
|
Result.Columns.Add("BPSRM_Changed", typeof(Char));
|
|
Result.Columns.Add("BPSRD_Changed", typeof(Char));
|
|
Result.Columns.Add("BPP01_Changed", typeof(Char));
|
|
Result.Columns.Add("BPP02_Changed", typeof(Char));
|
|
Result.Columns.Add("BPP03_Changed", typeof(Char));
|
|
Result.Columns.Add("BPP04_Changed", typeof(Char));
|
|
Result.Columns.Add("BPP05_Changed", typeof(Char));
|
|
|
|
return Result;
|
|
}
|
|
|
|
private void FillResult(DataTable Result, DataRow source)
|
|
{
|
|
DataRow newRow = Result.NewRow();
|
|
newRow["RANUM"] = source["RANUM"];
|
|
newRow["RAITM"] = source["RAITM"];
|
|
newRow["RBITM"] = source["RBITM"];
|
|
newRow["RBBDT"] = source["RBBDT"];
|
|
newRow["RACNM"] = source["RACNM"];
|
|
newRow["RAPYN"] = source["RAPYN"];
|
|
newRow["RASDT"] = source["RASDT"];
|
|
newRow["RAEDT"] = source["RAEDT"];
|
|
newRow["RAJNO"] = source["RAJNO"];
|
|
newRow["RACNO"] = source["RACNO"];
|
|
newRow["RABRH"] = source["RABRH"];
|
|
newRow["RAS01"] = source["RAS01"];
|
|
newRow["RAWTZ"] = source["RAWTZ"];
|
|
newRow["APPNO"] = source["APPNO"];
|
|
newRow["BPSRM"] = source["BPSRM"];
|
|
newRow["BPSRD"] = source["BPSRD"];
|
|
newRow["BPP01"] = source["BPP01"];
|
|
newRow["BPP02"] = source["BPP02"];
|
|
newRow["BPP03"] = source["BPP03"];
|
|
newRow["BPP04"] = source["BPP04"];
|
|
newRow["BPP05"] = source["BPP05"];
|
|
newRow["RAEDT_Changed"] = 'N';
|
|
newRow["RAJNO_Changed"] = 'N';
|
|
newRow["RACNO_Changed"] = 'N';
|
|
newRow["RABRH_Changed"] = 'N';
|
|
newRow["RAWTZ_Changed"] = 'N';
|
|
newRow["BPSRM_Changed"] = 'N';
|
|
newRow["BPSRD_Changed"] = 'N';
|
|
newRow["BPP01_Changed"] = 'N';
|
|
newRow["BPP02_Changed"] = 'N';
|
|
newRow["BPP03_Changed"] = 'N';
|
|
newRow["BPP04_Changed"] = 'N';
|
|
newRow["BPP05_Changed"] = 'N';
|
|
Result.Rows.Add(newRow);
|
|
}
|
|
|
|
private Char FieldDiff(object obj1, object obj2)
|
|
{
|
|
string s1 = obj1 != DBNull.Value ? obj1.ToString() : "";
|
|
string s2 = obj2 != DBNull.Value ? obj2.ToString() : "";
|
|
if (s1.CompareTo(s2) != 0)
|
|
return 'Y';
|
|
else
|
|
return 'N';
|
|
}
|
|
|
|
private void FillResult(DataTable Result, DataRow current, DataRow prev)
|
|
{
|
|
DataRow newRow = Result.NewRow();
|
|
newRow["RANUM"] = current["RANUM"];
|
|
newRow["RAITM"] = current["RAITM"];
|
|
newRow["RBITM"] = current["RBITM"];
|
|
newRow["RBBDT"] = current["RBBDT"];
|
|
newRow["RACNM"] = current["RACNM"];
|
|
newRow["RAPYN"] = current["RAPYN"];
|
|
newRow["RASDT"] = current["RASDT"];
|
|
newRow["RAEDT"] = current["RAEDT"];
|
|
newRow["RAJNO"] = current["RAJNO"];
|
|
newRow["RACNO"] = current["RACNO"];
|
|
newRow["RABRH"] = current["RABRH"];
|
|
newRow["RAS01"] = current["RAS01"];
|
|
newRow["APPNO"] = current["APPNO"];
|
|
newRow["BPSRM"] = current["BPSRM"];
|
|
newRow["BPSRD"] = current["BPSRD"];
|
|
newRow["BPP01"] = current["BPP01"];
|
|
newRow["BPP02"] = current["BPP02"];
|
|
newRow["BPP03"] = current["BPP03"];
|
|
newRow["BPP04"] = current["BPP04"];
|
|
newRow["BPP05"] = current["BPP05"];
|
|
newRow["RAEDT_Changed"] = FieldDiff(current["RAEDT"], prev["RAEDT"]);
|
|
newRow["RAJNO_Changed"] = FieldDiff(current["RAJNO"], prev["RAJNO"]);
|
|
newRow["RACNO_Changed"] = FieldDiff(current["RACNO"], prev["RACNO"]);
|
|
newRow["RABRH_Changed"] = FieldDiff(current["RABRH"], prev["RABRH"]);
|
|
newRow["BPSRM_Changed"] = FieldDiff(current["BPSRM"], prev["BPSRM"]);
|
|
newRow["BPSRD_Changed"] = FieldDiff(current["BPSRD"], prev["BPSRD"]);
|
|
newRow["BPP01_Changed"] = FieldDiff(current["BPP01"], prev["BPP01"]);
|
|
newRow["BPP02_Changed"] = FieldDiff(current["BPP02"], prev["BPP02"]);
|
|
newRow["BPP03_Changed"] = FieldDiff(current["BPP03"], prev["BPP03"]);
|
|
newRow["BPP04_Changed"] = FieldDiff(current["BPP04"], prev["BPP04"]);
|
|
newRow["BPP05_Changed"] = FieldDiff(current["BPP05"], prev["BPP05"]);
|
|
Result.Rows.Add(newRow);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 依條件取出資料,給 GridView 的 Select 用的
|
|
/// </summary>
|
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
public DataTable Select(string RACNM, string RAPYN)
|
|
{
|
|
cmdSelectRasnRapyn.Parameters.Clear();
|
|
|
|
DataTable Result = NewResult();
|
|
|
|
// 依條件抓出派遣紀錄
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append("SELECT * FROM RASN WHERE 1=1");
|
|
if (RACNM != null && RACNM.Length > 0)
|
|
{
|
|
sb.Append(" AND RACNM LIKE @RACNM ");
|
|
cmdSelectRasnRapyn.Parameters.Add(Query.NewParameter("RACNM", RACNM + "%"));
|
|
}
|
|
if (RAPYN != null && RAPYN.Length > 0)
|
|
{
|
|
sb.Append(" AND RAPYN LIKE @RAPYN ");
|
|
cmdSelectRasnRapyn.Parameters.Add(Query.NewParameter("RAPYN", RAPYN + "%"));
|
|
}
|
|
sb.Append("ORDER BY RACNM, RAPYN, RANUM, RAITM");
|
|
|
|
cmdSelectRasnRapyn.CommandText = sb.ToString();
|
|
DataTable rasnTmp1 = Query.Select(cmdSelectRasnRapyn);
|
|
|
|
// 一筆一筆的抓出應該顯示的資料
|
|
DataTable rasnTmp2;
|
|
foreach (DataRow rasnRow in rasnTmp1.Rows)
|
|
{
|
|
// 依照員工編號及派遣項次,抓出最後一筆異動
|
|
cmdSelectRasb.Parameters["RANUM"].Value = rasnRow["RANUM"];
|
|
cmdSelectRasb.Parameters["RAITM"].Value = rasnRow["RAITM"];
|
|
rasnTmp2 = Query.Select(cmdSelectRasb);
|
|
|
|
// 填入異動資料
|
|
if (rasnTmp2.Rows.Count != 0)
|
|
{
|
|
FillResult(Result, rasnTmp2.Rows[0]);
|
|
}
|
|
}
|
|
|
|
return Result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取出某一筆派遣異動資料,給 FormView 的 Select 用的
|
|
/// </summary>
|
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
public DataTable SelectOne(string RANUM, int RAITM, int RBITM)
|
|
{
|
|
return SelectOne(RANUM, RAITM, RBITM, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取出某一筆派遣異動資料,可加入交易中執行
|
|
/// </summary>
|
|
public DataTable SelectOne(string RANUM, int RAITM, int RBITM, DbTransaction tran)
|
|
{
|
|
DataTable Result = NewResult();
|
|
DataTable tmp;
|
|
|
|
if (RANUM != null && RANUM.Length > 0)
|
|
{
|
|
// 取原始資料
|
|
if (RBITM == 0)
|
|
{
|
|
cmdSelectRasnOne.Parameters["RANUM"].Value = RANUM;
|
|
cmdSelectRasnOne.Parameters["RAITM"].Value = RAITM;
|
|
if (tran == null)
|
|
tmp = Query.Select(cmdSelectRasnOne);
|
|
else
|
|
tmp = Query.Select(cmdSelectRasnOne, tran);
|
|
if (tmp.Rows.Count > 0)
|
|
FillResult(Result, tmp.Rows[0]);
|
|
}
|
|
else
|
|
{
|
|
cmdSelectRasbOne.Parameters["RANUM"].Value = RANUM;
|
|
cmdSelectRasbOne.Parameters["RAITM"].Value = RAITM;
|
|
cmdSelectRasbOne.Parameters["RBITM"].Value = RBITM;
|
|
if (tran == null)
|
|
tmp = Query.Select(cmdSelectRasbOne);
|
|
else
|
|
tmp = Query.Select(cmdSelectRasbOne, tran);
|
|
if (tmp.Rows.Count > 0)
|
|
FillResult(Result, tmp.Rows[0]);
|
|
}
|
|
}
|
|
return Result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取出所有派遣異動歷史資料,派遣異動查詢用
|
|
/// </summary>
|
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
public DataTable SelectRASB(string RANUM, int RAITM)
|
|
{
|
|
DataTable Result = NewResult();
|
|
|
|
if (RANUM != null && RANUM.Length > 0)
|
|
{
|
|
cmdSelectRasnAll.Parameters["RANUM"].Value = RANUM;
|
|
cmdSelectRasnAll.Parameters["RAITM"].Value = RAITM;
|
|
|
|
DataTable tmp = Query.Select(cmdSelectRasnAll);
|
|
for (int i = 0; i < tmp.Rows.Count; i++)
|
|
{
|
|
if (i > 0)
|
|
FillResult(Result, tmp.Rows[i], tmp.Rows[i - 1]);
|
|
else
|
|
FillResult(Result, tmp.Rows[i]);
|
|
}
|
|
}
|
|
return Result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取出某人員最近的專案
|
|
/// </summary>
|
|
/// <param name="BPENO"></param>
|
|
/// <returns></returns>
|
|
public DataTable SelectRecent(string BPENO)
|
|
{
|
|
return SelectRecentByDate(BPENO, DateTime.UtcNow.AddHours(8).Date);
|
|
|
|
//var cmd = Query.NewCommand(
|
|
// @"SELECT TOP 1 A.BPENO, A.BPNME
|
|
// , B.RANUM, B.RAITM, B.RACNM, B.RAPYN, B.RASDT, B.RAEDT, B.RABRH, B.RAWTZ
|
|
// , F.BPCNO, F.BPCME, F.BPSRM, F.BPSRD
|
|
// FROM BPSNView A
|
|
// LEFT OUTER JOIN RASN B ON A.BPENO=B.RANUM AND (B.RAEDT IS NULL OR (B.RASDT <= @TODAY AND B.RAEDT >= @TODAY))
|
|
// LEFT OUTER JOIN BPJB F ON B.RAPYN=F.BPPYN AND B.RAJNO=F.BPJNO AND B.RACNO=F.BPCNO
|
|
// WHERE A.BPENO = @BPENO
|
|
// ORDER BY B.RASDT DESC");
|
|
//Query.AddParam(cmd, "TODAY", DateTime.UtcNow.AddHours(8).Date);
|
|
//Query.AddParam(cmd, "BPENO", BPENO);
|
|
//return Query.Select(cmd);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取出某人員某日期的專案
|
|
/// </summary>
|
|
/// <param name="BPENO"></param>
|
|
/// <returns></returns>
|
|
public DataTable SelectRecentByDate(string BPENO, DateTime DATE)
|
|
{
|
|
var cmd = Query.NewCommand(
|
|
@"SELECT TOP 1 A.BPENO, A.BPNME
|
|
, B.RANUM, B.RAITM, B.RACNM, B.RAPYN, B.RASDT, B.RAEDT, B.RABRH, B.RAWTZ
|
|
, F.BPCNO, F.BPCME, F.BPSRM, F.BPSRD
|
|
FROM BPSNView A
|
|
LEFT OUTER JOIN RASN B ON A.BPENO=B.RANUM AND ((B.RASDT <= @DATE AND B.RAEDT IS NULL) OR (B.RASDT <= @DATE AND B.RAEDT >= @DATE))
|
|
LEFT OUTER JOIN BPJB F ON B.RAPYN=F.BPPYN AND B.RAJNO=F.BPJNO AND B.RACNO=F.BPCNO
|
|
WHERE A.BPENO = @BPENO
|
|
ORDER BY B.RASDT DESC");
|
|
Query.AddParam(cmd, "DATE", DATE);
|
|
Query.AddParam(cmd, "BPENO", BPENO);
|
|
return Query.Select(cmd);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取出某專案年度接單的站別清單
|
|
/// </summary>
|
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
|
public List<RASNBRHItem> SelectBranchForForm(string rapyn)
|
|
{
|
|
var cmd = Query.NewCommand(
|
|
@"SELECT DISTINCT A.RAPYN ProjectID, A.RABRH BranchID, B.BSSCR BranchName, B.BSRMK BranchShortName, GroupID
|
|
FROM RASN A
|
|
JOIN BCLS B ON A.RABRH=B.BSCLS AND B.BSPAR='BPSNBRH'
|
|
LEFT JOIN ProjectBranchGroup C ON A.RAPYN=C.ProjectID AND A.RABRH=C.BranchID
|
|
WHERE A.RAPYN=@RAPYN");
|
|
Query.AddParam(cmd, "RAPYN", rapyn);
|
|
return Query.Select<RASNBRHItem>(cmd);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取出某專案年度接單的站別清單,依照分組順序排序
|
|
/// </summary>
|
|
public List<RASNBRHItem> SelectBranchForReport(string rapyn)
|
|
{
|
|
var cmd = Query.NewCommand(
|
|
@"SELECT DISTINCT A.RAPYN ProjectID, A.RABRH BranchID, B.BSSCR BranchName, B.BSRMK BranchShortName, GroupID
|
|
FROM RASN A
|
|
JOIN BCLS B ON A.RABRH=B.BSCLS AND B.BSPAR='BPSNBRH'
|
|
JOIN ProjectBranchGroup C ON A.RAPYN=C.ProjectID AND A.RABRH=C.BranchID
|
|
WHERE A.RAPYN=@RAPYN
|
|
ORDER BY GroupID");
|
|
Query.AddParam(cmd, "RAPYN", rapyn);
|
|
return Query.Select<RASNBRHItem>(cmd);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取出某人員的專案歷史紀錄
|
|
/// </summary>
|
|
/// <param name="ranum"></param>
|
|
/// <returns></returns>
|
|
public DataTable SelectHistoryByEmployee(string ranum)
|
|
{
|
|
var cmd = Query.NewCommand(
|
|
@"SELECT B.BPENO, B.BPNME
|
|
, A.RAITM, A.RAPYN, C.BPPYM
|
|
, A.RASDT, A.RAEDT, A.RABRH, D.BSSCR
|
|
, F.BPJNO, F.BPJME
|
|
FROM RASN A
|
|
LEFT OUTER JOIN BPSNView B ON B.BPENO=A.RANUM
|
|
LEFT JOIN BPAA C ON A.RAPYN = C.BPPYN
|
|
LEFT JOIN BCLS D ON A.RABRH = D.BSCLS AND D.BSPAR = 'BPSNBRH'
|
|
LEFT JOIN BPJA F ON A.RAPYN = F.BPPYN AND A.RAJNO=F.BPJNO
|
|
WHERE A.RANUM = @RANUM
|
|
ORDER BY A.RASDT DESC");
|
|
Query.AddParam(cmd, "RANUM", ranum);
|
|
return Query.Select(cmd);
|
|
}
|
|
|
|
public void GetTimeZone(string bpeno, DateTime date, out string timezoneID, out string timezoneName)
|
|
{
|
|
var rasnTable = SelectRecentByDate(bpeno, date);
|
|
timezoneName = string.Empty;
|
|
timezoneID = string.Empty;
|
|
|
|
if (rasnTable.Rows.Count > 0)
|
|
{
|
|
timezoneName = WDAC.GetStringValue(rasnTable.Rows[0]["RAWTZ"]);
|
|
|
|
DbCommand cmd = Query.NewCommand();
|
|
cmd.CommandText = "SELECT WINDOWS_ID FROM BTMZ WHERE NAME=@NAME";
|
|
cmd.Parameters.Clear();
|
|
Query.AddParam(cmd, "NAME", rasnTable.Rows[0]["RAWTZ"]);
|
|
timezoneID = WDAC.GetStringValue(Query.ExecuteScalar(cmd)).Trim();
|
|
|
|
// 如果表格內沒取到,這裡做個保險
|
|
if (string.IsNullOrEmpty(timezoneID))
|
|
{
|
|
switch (timezoneName)
|
|
{
|
|
case "台北":
|
|
case "":
|
|
case null:
|
|
break;
|
|
case "美西":
|
|
timezoneID = "Pacific Standard Time";
|
|
break;
|
|
case "美東":
|
|
timezoneID = "Eastern Standard Time";
|
|
break;
|
|
case "東京":
|
|
timezoneID = "Tokyo Standard Time";
|
|
break;
|
|
case "倫敦":
|
|
timezoneID = "GMT Standard Time";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取出日期區間內派遣資料以及派遣異動資料
|
|
/// </summary>
|
|
/*
|
|
public DataTable SelectRASNDateRange(string RANUM, int RAITM, DateTime startDay, DateTime endDay, DbTransaction tran)
|
|
{
|
|
// 1. 取出區間內派遣資料,依照開始日期排序
|
|
DbCommand cmd = Query.NewCommand(
|
|
@"SELECT RANUM, RAITM, RASDT
|
|
FROM RASN
|
|
WHERE RANUM=@RANUM AND RAITM=@RAITM
|
|
AND ((RASDT <= @YYMM1 AND RAEDT >= @YYMM2)
|
|
OR (RASDT <= @YYMM1 AND RAEDT IS NULL)
|
|
OR (RASDT <= @YYMM1 AND RAEDT >= @YYMM1 AND RAEDT <= @YYMM2)
|
|
OR (RASDT >= @YYMM1 AND RASDT <= @YYMM2 AND RAEDT >= @YYMM2)
|
|
OR (RASDT >= @YYMM1 AND RASDT <= @YYMM2 AND RAEDT IS NULL)
|
|
OR (RASDT >= @YYMM1 AND RASDT <= @YYMM2 AND RAEDT >= @YYMM1 AND RAEDT <= @YYMM2))
|
|
ORDER BY RASDT");
|
|
cmd.Parameters.Add(Query.NewParameter("RANUM", RANUM));
|
|
cmd.Parameters.Add(Query.NewParameter("RAITM", RAITM));
|
|
cmd.Parameters.Add(Query.NewParameter("YYMM1", startDay));
|
|
cmd.Parameters.Add(Query.NewParameter("YYMM2", endDay));
|
|
cmd.Connection = tran.Connection;
|
|
cmd.Transaction = tran;
|
|
DbDataAdapter da = Query.NewDataAdapter(cmd);
|
|
DataTable rasnTmp1 = new DataTable();
|
|
da.Fill(rasnTmp1);
|
|
|
|
if (rasnTmp1.Rows.Count == 0)
|
|
return rasnTmp1;
|
|
|
|
DataTable rasn;
|
|
|
|
foreach (DataRow rasnRow in rasnTmp1.Rows)
|
|
{
|
|
string ranum = rasnRow["RANUM"].ToString();
|
|
int raitm = Convert.ToInt32(rasnRow["RAITM"]);
|
|
|
|
// 取得主檔與異動紀錄
|
|
rasn = SelectRASB(ranum, raitm);
|
|
// 取得異動紀錄
|
|
//rpir.Merge(rpirDao.SelectRPIBMonth(ranum, startDay, endDay, tran), true, MissingSchemaAction.Add);
|
|
}
|
|
|
|
// 整理每一筆紀錄,將退保日期填入
|
|
for (int i = 0; i < rasn.Rows.Count; i++)
|
|
{
|
|
int rpitm = Convert.ToInt32(rasn.Rows[i]["RPITM"]);
|
|
|
|
rasn.Rows[i].BeginEdit();
|
|
|
|
// 若項次不是 0,把加保日填入生效日 //的次月一號
|
|
if (rpitm != 0)
|
|
{
|
|
DateTime rpbdt = Convert.ToDateTime(rasn.Rows[i]["RPBDT"]);
|
|
//rpir.Rows[i]["RPSDT"] = WGuard1.GetMonthBegin(rpbdt, 1);
|
|
rasn.Rows[i]["RPSDT"] = rpbdt;
|
|
}
|
|
|
|
// 沒有退保日
|
|
if (rasn.Rows[i]["RPEDT"] == DBNull.Value)
|
|
{
|
|
// 若不是最後一筆,且下一筆項次不是 0
|
|
if (i < rasn.Rows.Count - 1 && Convert.ToInt32(rasn.Rows[i + 1]["RPITM"]) != 0)
|
|
{
|
|
// 下一筆沒有退保日,把下一筆的生效日期前一天 // 的當月月底,放入退保日期
|
|
if (rasn.Rows[i + 1]["RPEDT"] == DBNull.Value)
|
|
{
|
|
DateTime rpbdt = Convert.ToDateTime(rasn.Rows[i + 1]["RPBDT"]);
|
|
//rpir.Rows[i]["RPEDT"] = WGuard1.GetMonthEnd(rpbdt, 0);
|
|
rasn.Rows[i]["RPEDT"] = rpbdt.AddDays(-1);
|
|
}
|
|
// 下一筆有退保日,把下一筆的退保日,放入這一筆的退保日期
|
|
else
|
|
{
|
|
rasn.Rows[i]["RPEDT"] = rasn.Rows[i + 1]["RPEDT"];
|
|
}
|
|
}
|
|
// 最後一筆
|
|
else if (i == rasn.Rows.Count - 1)
|
|
{
|
|
DateTime rpsdt = Convert.ToDateTime(rasn.Rows[i]["RPSDT"]);
|
|
// 加保日大於月底日,退保日放入加保日的當月月底
|
|
if (rpsdt > endDay)
|
|
rasn.Rows[i]["RPEDT"] = WGuard1.GetMonthEnd(rpsdt, 0);
|
|
// 否則放入月底日
|
|
else
|
|
rasn.Rows[i]["RPEDT"] = endDay;
|
|
}
|
|
}
|
|
|
|
rasn.Rows[i].EndEdit();
|
|
}
|
|
|
|
// 再一次整理,剔除:
|
|
// 1. 加保日與退保日均在日期區間外的紀錄
|
|
// 2. 退保日小於加保日的紀錄
|
|
// 3. 加保日等於退保日且是最後一筆,但項次不是 0 的紀錄
|
|
int count = rasn.Rows.Count - 1;
|
|
for (int i = rasn.Rows.Count - 1; i >= 0; i--)
|
|
{
|
|
DateTime rpsdt = Convert.ToDateTime(rasn.Rows[i]["RPSDT"]);
|
|
DateTime rpedt = Convert.ToDateTime(rasn.Rows[i]["RPEDT"]);
|
|
int rpitm = Convert.ToInt32(rasn.Rows[i]["RPITM"]);
|
|
|
|
if ((rpsdt < startDay && rpedt < startDay)
|
|
|| (rpsdt > endDay && rpedt > endDay)
|
|
|| (rpsdt > rpedt)
|
|
|| (rpsdt == rpedt && i == count && rpitm != 0))
|
|
rasn.Rows.RemoveAt(i);
|
|
}
|
|
return rasn;
|
|
}
|
|
*/
|
|
|
|
}
|
|
|
|
|
|
public class RASNBRHItem
|
|
{
|
|
public string ProjectID { get; set; }
|
|
public string BranchID { get; set; }
|
|
public string BranchName { get; set; }
|
|
public string BranchShortName { get; set; }
|
|
public string GroupID { get; set; }
|
|
} |