using System;
using System.Data;
using System.Configuration;
using System.Data.Common;
using System.Collections;
using System.ComponentModel;
using System.Text;
using Wellan.Common;
using Wellan.Data;
///
/// 取得專案年度接單資料
///
[DataObject(true)]
public class BpaaDAC : Wellan.Data.WDAC
{
public BpaaDAC()
{
}
public BpaaDAC(string connectionConfig, string connectionConfigName)
: this()
{
this._connectionConfig = connectionConfig;
this._connectionConfigName = connectionConfigName;
}
public BpaaDAC(WQuery query)
{
this._query = query;
}
///
/// 取得所有年度專案計畫代號與名稱,不含總公司
/// 20141230 修改,必定包含 103 年度新譽與展譽
///
///
public DataTable GetBpaa()
{
DbCommand cmd = Query.NewCommand(
@"SELECT BPPYN, BPPYM FROM
(
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS
FROM BPAA WHERE (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001')
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS
-- 移除展育
-- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001'
FROM BPAA WHERE BPPYN = '103TYB00001'
) AS TMP1
ORDER BY CLS, BPPYN");
return Query.Select(cmd);
}
///
/// 取得指定年度專案計畫代號與名稱,不含總公司
/// 20141230 修改,必定包含 103 年度新譽與展譽
///
/// 指定年度
///
public DataTable GetBpaa(int year)
{
DbCommand cmd = Query.NewCommand(
@"SELECT BPPYN, BPPYM FROM
(
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS
FROM BPAA WHERE (BPYER=@BPYER) AND (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001')
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS
-- 移除展育
-- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001'
FROM BPAA WHERE BPPYN = '103TYB00001'
) AS TMP1
ORDER BY CLS, BPPYN");
cmd.Parameters.Add(Query.NewParameter("BPYER", year - WGuard1.CY11));
return Query.Select(cmd);
}
///
/// 取得所有年度專案計畫代號與名稱,含總公司
/// 20141230 修改,必定包含 103 年度新譽與展譽
///
///
public DataTable GetBpaaWithTY()
{
DbCommand cmd = Query.NewCommand(
@"SELECT BPPYN, BPPYM FROM
(
SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS
FROM BPAA WHERE (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001')
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS
-- 移除展育
-- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001'
FROM BPAA WHERE BPPYN = '103TYB00001'
) AS TMP1
ORDER BY CLS, BPPYN");
return Query.Select(cmd);
}
///
/// 取得所有年度專案計畫代號與名稱,含總公司,並加上一個空項目
/// 20141230 修改,必定包含 103 年度新譽與展譽
///
///
public DataTable GetBpaaWithTYPlusNone()
{
DbCommand cmd = Query.NewCommand(
@"SELECT BPPYN, BPPYM FROM
(
SELECT '' BPPYN, '【全部】' BPPYM, 1 CLS
UNION
SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS
FROM BPAA WHERE (BPCSD IS NULL) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001')
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS
-- 移除展育
-- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001'
FROM BPAA WHERE BPPYN = '103TYB00001'
) AS TMP1
ORDER BY CLS, BPPYN");
return Query.Select(cmd);
}
///
/// 取得指定年度專案計畫代號與名稱,含總公司
/// 20141230 修改,必定包含 103 年度新譽與展譽
///
/// 指定年度
///
public DataTable GetBpaaWithTY(int year)
{
DbCommand cmd = Query.NewCommand(
@"SELECT BPPYN, BPPYM FROM
(
SELECT '' BPPYN, '【全部】' BPPYM, 1 CLS
UNION
SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS
-- 移除展育
-- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001'
FROM BPAA WHERE BPPYN = '103TYB00001'
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS
FROM BPAA WHERE (BPYER=@BPYER) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001')
) AS TMP1
ORDER BY CLS, BPPYN");
cmd.Parameters.Add(Query.NewParameter("BPYER", year - WGuard1.CY11));
return Query.Select(cmd);
}
///
/// 取得指定年度專案計畫代號與名稱,含總公司,並加上一個空項目
/// 20141230 修改,必定包含 103 年度新譽與展譽
///
/// 指定年度
///
public DataTable GetBpaaWithTYPlusNone(int year)
{
DbCommand cmd = Query.NewCommand(
@"SELECT BPPYN, BPPYM FROM
(
SELECT '' BPPYN, '【全部】' BPPYM, 1 CLS
UNION
SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS
FROM BPAA WHERE (BPYER=@BPYER) AND (BPPYN <> '000000001') AND (BPPYN <> '103JYB00001') AND (BPPYN <> '103TYB00001')
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS
-- 移除展育
-- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001'
FROM BPAA WHERE BPPYN = '103TYB00001'
) AS TMP1
ORDER BY CLS, BPPYN");
cmd.Parameters.Add(Query.NewParameter("BPYER", year - WGuard1.CY11));
return Query.Select(cmd);
}
///
/// 取得指定年度專案計畫代號與名稱,含總公司
///
public DataTable GetBpaaWithTYPlusNone(int yearFrom, int yearTo)
{
return GetBpaa(yearFrom, yearTo, true);
}
///
/// 取得指定年度專案計畫代號與名稱,含總公司
///
public DataTable GetBpaaWithTYPlusNoneNotCheckYear(int yearFrom, int yearTo)
{
return GetBpaa(yearFrom, yearTo, false);
}
///
/// 取得指定年度專案計畫代號與名稱,含總公司
/// 20141230 修改,必定包含 103 年度新譽與展譽
///
/// 指定年度
///
public DataTable GetBpaa(int yearFrom, int yearTo, bool checkYearEqual)
{
if (yearTo <= 0) yearTo = yearFrom;
DbCommand cmd;
if (yearFrom == yearTo || !checkYearEqual)
{
cmd = Query.NewCommand(
@"SELECT BPPYN, BPPYM FROM
(
SELECT '' BPPYN, '【全部】' BPPYM, 1 CLS
UNION
SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS
-- 移除展育的選項
-- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001'
FROM BPAA WHERE BPPYN = '103TYB00001'
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS
FROM BPAA WHERE (BPYER = @BPYER1) AND (BPPYN <> '000000001') AND (BPPNM <> 'JYB00001') AND (BPPNM <> 'TYB00001')
) AS TMP1
ORDER BY CLS, BPPYN");
}
else
{
cmd = Query.NewCommand(
@"SELECT BPPYN, BPPYM FROM
(
SELECT '' BPPYN, '【全部】' BPPYM, 1 CLS
UNION
SELECT '000000001' BPPYN, '【非專案人員】' BPPYM, 2 CLS
-- UNION
-- SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 3 CLS
-- FROM BPAA WHERE BPPYN = '103JYB00001' OR BPPYN = '103TYB00001'
UNION
SELECT BPPYN, ISNULL('【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,LEN(BPPYN)-5,1)) + '】', '') + BPPYM BPPYM, 4 CLS
FROM BPAA WHERE (BPYER>=@BPYER1 AND BPYER<=@BPYER2) AND (BPPYN <> '000000001') AND (BPPNM <> 'JYB00001') AND (BPPNM <> 'TYB00001')
) AS TMP1
ORDER BY CLS, BPPYN");
}
cmd.Parameters.Add(Query.NewParameter("BPYER1", yearFrom - WGuard1.CY11));
cmd.Parameters.Add(Query.NewParameter("BPYER2", yearTo - WGuard1.CY11));
return Query.Select(cmd);
}
///
/// 取得加班時數計算方式
///
/// 年度專案計畫編號
/// 1=計算至小時,2=計算至分鐘
public string GetOverTimeType(string BPPYN)
{
DbCommand cmd = Query.NewCommand("SELECT BPOTT FROM BPAA WHERE BPPYN=@BPPYN");
cmd.Parameters.Add(Query.NewParameter("BPPYN", BPPYN));
string s = WDAC.GetStringValue(Query.ExecuteScalar(cmd));
return s == "1" || s == "2" ? s : "1";
}
///
/// 取得上下班時間
///
///
///
//public void GetTime(string bppyn, out string bpstm, out string bpetm)
//{
// bpstm = WGuard1.WSetR("UNRPARTIME", 1);
// bpetm = WGuard1.WSetR("UNRPARTIME", 2);
// DbCommand cmd1 = Query.NewCommand("SELECT BPPNM FROM BPAA WHERE BPPYN=@BPPYN");
// cmd1.Parameters.Add(Query.NewParameter("BPPYN", bppyn));
// string bppnm = WDAC.GetStringValue(Query.ExecuteScalar(cmd1));
// if (string.IsNullOrEmpty(bppnm))
// return;
// DbCommand cmd2 = Query.NewCommand("SELECT BPSTM, BPETM FROM BPRJ WHERE BPPNM=@BPPNM");
// cmd1.Parameters.Add(Query.NewParameter("BPPNM", bppnm));
// DataTable dt = Query.Select(cmd2);
// if (dt.Rows.Count == 0)
// return;
// string bpstm1 = WDAC.GetStringValue(dt.Rows[0]["BPSTM"]);
// string bpetm1 = WDAC.GetStringValue(dt.Rows[0]["BPETM"]);
// string[] timepart = bpstm1.Split(':');
// if (timepart.Length >= 2)
// bpstm = timepart[0].PadRight(2, '0') + timepart[1].PadRight(2, '0');
// timepart = bpetm1.Split(':');
// if (timepart.Length >= 2)
// bpetm = timepart[0].PadRight(2, '0') + timepart[1].PadRight(2, '0');
//}
///
/// 取得年初特休計算方式
///
/// 年度專案計畫編號
/// S=加總上年生效(正數) / Z=年初時數為0
public string GetYearBeginAnnualLeaveType(string BPPYN)
{
DbCommand cmd = Query.NewCommand("SELECT BPALT FROM BPAA WHERE BPPYN=@BPPYN");
cmd.Parameters.Add(Query.NewParameter("BPPYN", BPPYN));
string s = WDAC.GetStringValue(Query.ExecuteScalar(cmd));
return s == "S" || s == "Z" ? s : "Z";
}
///
/// 取得年度專案計畫代號對應的班表編號
///
/// 年度專案計畫編號
/// 班表編號
public string GetTimeTableNo(string BPPYN)
{
DbCommand cmd = Query.NewCommand("SELECT BPPNM FROM BPAA WHERE BPPYN=@BPPYN");
cmd.Parameters.Add(Query.NewParameter("BPPYN", BPPYN));
var bppnm = WDAC.GetStringValue(Query.ExecuteScalar(cmd));
cmd.CommandText = "SELECT BPTME FROM BPRJ WHERE BPPNM=@BPPNM";
cmd.Parameters.Clear();
cmd.Parameters.Add(Query.NewParameter("BPPNM", bppnm));
return WDAC.GetStringValue(Query.ExecuteScalar(cmd));
}
///
/// 年度接單 Grid 分頁查詢
///
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable SelectPage(int startRowIndex, int maximumRows, string BPPNM, string BPYER, string BPPYN, string BPPYM)
{
DbCommand cmd = Query.NewCommand();
StringBuilder filter = new StringBuilder();
BuildFilter(filter, cmd, BPPNM, BPYER, BPPYN, BPPYM);
cmd.CommandText = String.Format(
@"SELECT * FROM
(
SELECT *, ROW_NUMBER() OVER (ORDER BY BPPNM, BPYER) AS ROWID
FROM BPAA WHERE 1=1 {0}
) AS TMP
WHERE ROWID BETWEEN @STARTROWINDEX + 1 AND @STARTROWINDEX + @MAXIMUMROWS
ORDER BY ROWID",
filter.ToString());
cmd.Parameters.Add(Query.NewParameter("STARTROWINDEX", startRowIndex));
cmd.Parameters.Add(Query.NewParameter("MAXIMUMROWS", maximumRows));
return Query.Select(cmd);
}
///
/// 年度接單 Grid 查詢筆數
///
[DataObjectMethod(DataObjectMethodType.Select)]
public int SelectCount(string BPPNM, string BPYER, string BPPYN, string BPPYM)
{
DbCommand cmd = Query.NewCommand();
StringBuilder filter = new StringBuilder();
BuildFilter(filter, cmd, BPPNM, BPYER, BPPYN, BPPYM);
cmd.CommandText = String.Format("SELECT COUNT(*) FROM BPAA WHERE 1=1 {0}", filter.ToString());
return WDAC.GetInt32Value(Query.ExecuteScalar(cmd));
}
///
/// 取得指定年度接單在查詢結果中的序號 (0 起算)
///
public int SelectBPAAIndex(string targetBPPNM, string targetBPYER, string BPPNM, string BPYER, string BPPYN, string BPPYM)
{
DbCommand cmd = Query.NewCommand();
StringBuilder filter = new StringBuilder();
BuildFilter(filter, cmd, BPPNM, BPYER, BPPYN, BPPYM);
cmd.CommandText = String.Format(
@"SELECT ROWID - 1 FROM
(
SELECT BPPNM, BPYER, ROW_NUMBER() OVER (ORDER BY BPPNM, BPYER) AS ROWID
FROM BPAA WHERE 1=1 {0}
) AS TMP WHERE BPPNM = @TARGET_BPPNM AND BPYER = @TARGET_BPYER",
filter.ToString());
cmd.Parameters.Add(Query.NewParameter("TARGET_BPPNM", targetBPPNM));
cmd.Parameters.Add(Query.NewParameter("TARGET_BPYER", targetBPYER));
object o = Query.ExecuteScalar(cmd);
return (o is Int32 || o is Int64) ? WDAC.GetInt32Value(o) : -1;
}
///
/// 組出年度接單 Grid 的查詢條件 (與舊 AddSearch 行為一致)
///
private void BuildFilter(StringBuilder sb, DbCommand cmd, string BPPNM, string BPYER, string BPPYN, string BPPYM)
{
if (!string.IsNullOrEmpty(BPPNM))
{
sb.Append(" AND BPPNM LIKE @BPPNM1 ");
cmd.Parameters.Add(Query.NewParameter("BPPNM1", BPPNM + "%"));
}
if (!string.IsNullOrEmpty(BPYER))
{
sb.Append(" AND BPYER LIKE @BPYER1 ");
cmd.Parameters.Add(Query.NewParameter("BPYER1", BPYER + "%"));
}
if (!string.IsNullOrEmpty(BPPYN))
{
sb.Append(" AND BPPYN LIKE @BPPYN1 ");
cmd.Parameters.Add(Query.NewParameter("BPPYN1", BPPYN + "%"));
}
if (!string.IsNullOrEmpty(BPPYM))
{
sb.Append(" AND BPPYM LIKE @BPPYM1 ");
cmd.Parameters.Add(Query.NewParameter("BPPYM1", BPPYM + "%"));
}
}
}