chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -0,0 +1,260 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using System.Linq;
|
||||
|
||||
/// <summary>
|
||||
/// 節假日設定檔
|
||||
/// </summary>
|
||||
public class BhrdDAC : Wellan.Data.WDAC
|
||||
{
|
||||
private Hashtable bhrdData = new Hashtable();
|
||||
private string nationalHolidays = "0101,0228,0501,1010";
|
||||
|
||||
public const string 排休 = "排休";
|
||||
public const string 例假日 = "例假日";
|
||||
public const string 休假日 = "休假日";
|
||||
public const string 國定假日 = "國定假日";
|
||||
public static readonly List<string> 休假日班表 = new List<string> { 排休, 例假日, 休假日, 國定假日 };
|
||||
|
||||
public BhrdDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public BhrdDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public BhrdDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
public DataTable GetAll()
|
||||
{
|
||||
return Query.Select("SELECT BHYER, BHHRD FROM BHRD ORDER BY BHYER");
|
||||
}
|
||||
|
||||
public string[] GetYear(int Year)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand("SELECT BHYER, BHHRD FROM BHRD WHERE BHYER=@BHYER");
|
||||
cmd.Parameters.Add(Query.NewParameter("BHYER", Year));
|
||||
DataTable bhrd = Query.Select(cmd);
|
||||
string yearData;
|
||||
|
||||
// 有資料,取出該年資料
|
||||
if (bhrd.Rows.Count != 0)
|
||||
{
|
||||
yearData = bhrd.Rows[0]["BHHRD"].ToString();
|
||||
}
|
||||
// 無資料,回傳預設資料
|
||||
else
|
||||
{
|
||||
char[] tmp = new char[366];
|
||||
for (int i = 0; i < tmp.Length; i++)
|
||||
{
|
||||
tmp[i] = ' ';
|
||||
}
|
||||
|
||||
DateTime aDate = new DateTime(Year, 1, 1);
|
||||
for (int i = 0; i < tmp.Length; i++)
|
||||
{
|
||||
if (aDate.DayOfWeek == DayOfWeek.Sunday || aDate.DayOfWeek == DayOfWeek.Saturday)
|
||||
tmp[i] = (char)HolidayType.Holiday;
|
||||
else if (nationalHolidays.Contains(String.Format("{0:00}{1:00}", aDate.Month, aDate.Day)))
|
||||
tmp[i] = (char)HolidayType.NationalHoliday;
|
||||
else
|
||||
tmp[i] = (char)HolidayType.WorkDay;
|
||||
|
||||
aDate = aDate.AddDays(1);
|
||||
if (aDate.Year != Year)
|
||||
break;
|
||||
}
|
||||
|
||||
yearData = new String(tmp);
|
||||
}
|
||||
|
||||
string[] result = new string[12];
|
||||
for (int m = 1; m <= 12; m++)
|
||||
{
|
||||
DateTime aDate = new DateTime(Year, m, 1);
|
||||
result[m - 1] = yearData.Substring(aDate.DayOfYear - 1, WGuard1.GetMonthEnd(aDate, 0).Day);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void SetYear(int Year, string[] YearData)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand("SELECT COUNT(1) FROM BHRD WHERE BHYER=@BHYER");
|
||||
cmd.Parameters.Add(Query.NewParameter("BHYER", Year));
|
||||
int count;
|
||||
ExecuteScalar(cmd, out count);
|
||||
if (count == 0)
|
||||
{
|
||||
cmd.CommandText = "INSERT INTO BHRD (BHYER, BHHRD, TRDAT, TRMOD, TRUSR) VALUES (@BHYER, @BHHRD, GETDATE(), 'INSERT', 'X001')";
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd.CommandText = "UPDATE BHRD SET BHHRD=@BHHRD, TRDAT=GETDATE(), TRMOD='MODIFY', TRUSR='X001' WHERE BHYER=@BHYER";
|
||||
}
|
||||
cmd.Parameters.Add(Query.NewParameter("BHHRD", String.Concat(YearData)));
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
public string GetMonth(int Year, int Month)
|
||||
{
|
||||
string[] YearData = GetYear(Year);
|
||||
return YearData[Month - 1];
|
||||
}
|
||||
|
||||
public void SetMonth(int Year, int Month, string Value)
|
||||
{
|
||||
string[] YearData = GetYear(Year);
|
||||
YearData[Month - 1] = Value;
|
||||
SetYear(Year, YearData);
|
||||
}
|
||||
|
||||
public HolidayType GetDayHolidayType(DateTime aDateTime)
|
||||
{
|
||||
string bhhrd = "";
|
||||
if (!bhrdData.Contains(aDateTime.Year))
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand("SELECT BHHRD FROM BHRD WHERE BHYER=@BHYER");
|
||||
cmd.Parameters.Add(Query.NewParameter("BHYER", aDateTime.Year));
|
||||
if (ExecuteScalar(cmd, out bhhrd))
|
||||
bhrdData.Add(aDateTime.Year, bhhrd);
|
||||
}
|
||||
else
|
||||
{
|
||||
bhhrd = bhrdData[aDateTime.Year].ToString();
|
||||
}
|
||||
|
||||
if (bhhrd != "")
|
||||
{
|
||||
// 有節假日資料,找出該日之節假日資料
|
||||
char theDay;
|
||||
try
|
||||
{
|
||||
theDay = bhhrd[aDateTime.DayOfYear - 1];
|
||||
}
|
||||
catch
|
||||
{
|
||||
theDay = ' ';
|
||||
}
|
||||
|
||||
switch ((HolidayType)theDay)
|
||||
{
|
||||
case HolidayType.WorkDay: // 上班日
|
||||
case HolidayType.CompensatoryWorkDay: // 補班
|
||||
case HolidayType.NationalHoliday: // 國定假日或民俗假
|
||||
case HolidayType.Holiday: // 例假日
|
||||
case HolidayType.ElasticRest: // 彈性休假
|
||||
case HolidayType.TyphoonRest: // 颱風假
|
||||
case HolidayType.VoteRest: // 選舉假
|
||||
case HolidayType.CompanyActivity: // 公司活動
|
||||
return (HolidayType)theDay;
|
||||
default:
|
||||
if (nationalHolidays.Contains(aDateTime.ToString("MMdd")))
|
||||
return HolidayType.NationalHoliday;
|
||||
else if (aDateTime.DayOfWeek == DayOfWeek.Sunday || aDateTime.DayOfWeek == DayOfWeek.Saturday)
|
||||
return HolidayType.Holiday;
|
||||
else
|
||||
return HolidayType.WorkDay;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 若無節假日資料,則週六、週日為假日
|
||||
if (nationalHolidays.Contains(aDateTime.ToString("MMdd")))
|
||||
return HolidayType.NationalHoliday;
|
||||
else if (aDateTime.DayOfWeek == DayOfWeek.Sunday || aDateTime.DayOfWeek == DayOfWeek.Saturday)
|
||||
return HolidayType.Holiday;
|
||||
else
|
||||
return HolidayType.WorkDay;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsHoliday(string bpeno, DateTime aDateTime)
|
||||
{
|
||||
// 先看班表有沒有資料
|
||||
RtmeDAC rtmeDao = new RtmeDAC();
|
||||
var rtme = rtmeDao.SelectDay(bpeno, aDateTime).FirstOrDefault();
|
||||
if (rtme != null && !string.IsNullOrEmpty(rtme.RTTID.Trim()))
|
||||
{
|
||||
return ItemIsHoliday(rtme.RTTID.Trim());
|
||||
}
|
||||
|
||||
// 若沒有班表資料,用行事曆資料判斷是否需要上班
|
||||
HolidayType theDay = GetDayHolidayType(aDateTime);
|
||||
|
||||
switch (theDay)
|
||||
{
|
||||
case HolidayType.WorkDay: // 上班日
|
||||
case HolidayType.CompensatoryWorkDay: // 補班
|
||||
return false;
|
||||
case HolidayType.NationalHoliday: // 國定假日或民俗假
|
||||
case HolidayType.Holiday: // 例假日
|
||||
case HolidayType.ElasticRest: // 彈性休假
|
||||
case HolidayType.TyphoonRest: // 颱風假
|
||||
case HolidayType.VoteRest: // 選舉假
|
||||
case HolidayType.CompanyActivity: // 公司活動
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool ItemIsHoliday(string item)
|
||||
{
|
||||
return 休假日班表.IndexOf(item.Trim()) >= 0;
|
||||
}
|
||||
}
|
||||
|
||||
public enum HolidayType
|
||||
{
|
||||
/// <summary>
|
||||
/// 無資料
|
||||
/// </summary>
|
||||
Null = ' ',
|
||||
/// <summary>
|
||||
/// 上班日
|
||||
/// </summary>
|
||||
WorkDay = '-',
|
||||
/// <summary>
|
||||
/// 補班
|
||||
/// </summary>
|
||||
CompensatoryWorkDay = 'B',
|
||||
/// <summary>
|
||||
/// 國定假日或民俗假
|
||||
/// </summary>
|
||||
NationalHoliday = 'N',
|
||||
/// <summary>
|
||||
/// 例假日
|
||||
/// </summary>
|
||||
Holiday = 'H',
|
||||
/// <summary>
|
||||
/// 彈性休假
|
||||
/// </summary>
|
||||
ElasticRest = 'V',
|
||||
/// <summary>
|
||||
/// 颱風假
|
||||
/// </summary>
|
||||
TyphoonRest = 'T',
|
||||
/// <summary>
|
||||
/// 選舉假
|
||||
/// </summary>
|
||||
VoteRest = 'E',
|
||||
/// <summary>
|
||||
/// 公司活動
|
||||
/// </summary>
|
||||
CompanyActivity = 'A'
|
||||
}
|
||||
@@ -0,0 +1,328 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using Wellan.Common;
|
||||
using Wellan.Data;
|
||||
|
||||
/// <summary>
|
||||
/// 取得專案年度接單資料
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得所有年度專案計畫代號與名稱,不含總公司
|
||||
/// 20141230 修改,必定包含 103 年度新譽與展譽
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得指定年度專案計畫代號與名稱,不含總公司
|
||||
/// 20141230 修改,必定包含 103 年度新譽與展譽
|
||||
/// </summary>
|
||||
/// <param name="year">指定年度</param>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得所有年度專案計畫代號與名稱,含總公司
|
||||
/// 20141230 修改,必定包含 103 年度新譽與展譽
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得所有年度專案計畫代號與名稱,含總公司,並加上一個空項目
|
||||
/// 20141230 修改,必定包含 103 年度新譽與展譽
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得指定年度專案計畫代號與名稱,含總公司
|
||||
/// 20141230 修改,必定包含 103 年度新譽與展譽
|
||||
/// </summary>
|
||||
/// <param name="yearFrom">指定年度</param>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得指定年度專案計畫代號與名稱,含總公司,並加上一個空項目
|
||||
/// 20141230 修改,必定包含 103 年度新譽與展譽
|
||||
/// </summary>
|
||||
/// <param name="year">指定年度</param>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得指定年度專案計畫代號與名稱,含總公司
|
||||
/// </summary>
|
||||
public DataTable GetBpaaWithTYPlusNone(int yearFrom, int yearTo)
|
||||
{
|
||||
return GetBpaa(yearFrom, yearTo, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得指定年度專案計畫代號與名稱,含總公司
|
||||
/// </summary>
|
||||
public DataTable GetBpaaWithTYPlusNoneNotCheckYear(int yearFrom, int yearTo)
|
||||
{
|
||||
return GetBpaa(yearFrom, yearTo, false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得指定年度專案計畫代號與名稱,含總公司
|
||||
/// 20141230 修改,必定包含 103 年度新譽與展譽
|
||||
/// </summary>
|
||||
/// <param name="yearFrom">指定年度</param>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得加班時數計算方式
|
||||
/// </summary>
|
||||
/// <param name="BPPYN">年度專案計畫編號</param>
|
||||
/// <returns>1=計算至小時,2=計算至分鐘</returns>
|
||||
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";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得上下班時間
|
||||
/// </summary>
|
||||
/// <param name="bppyn"></param>
|
||||
/// <returns></returns>
|
||||
//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');
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// 取得年初特休計算方式
|
||||
/// </summary>
|
||||
/// <param name="BPPYN">年度專案計畫編號</param>
|
||||
/// <returns>S=加總上年生效(正數) / Z=年初時數為0</returns>
|
||||
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";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得年度專案計畫代號對應的班表編號
|
||||
/// </summary>
|
||||
/// <param name="BPPYN">年度專案計畫編號</param>
|
||||
/// <returns>班表編號</returns>
|
||||
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));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using System.Transactions;
|
||||
using System.ComponentModel;
|
||||
|
||||
/// <summary>
|
||||
/// 外部人員帳號資料檔
|
||||
/// </summary>
|
||||
[DataObject]
|
||||
public class BpapDAC : Wellan.Data.WDAC
|
||||
{
|
||||
private string _select =
|
||||
@" SELECT BPENO, BPNME, BPPWD, BPEML, BPZON, BPBRH, TRDAT, TRMOD, TRUSR FROM BPAP ";
|
||||
private string _insert =
|
||||
@"INSERT INTO dbo.BPAP
|
||||
(BPENO, BPNME, BPPWD, BPEML, BPZON, BPBRH, TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@BPENO, @BPNME, @BPPWD, @BPEML, @BPZON, @BPBRH, GETDATE(), 'INSERT', @TRUSR)";
|
||||
private string _update =
|
||||
@"UPDATE BPAP SET
|
||||
BPNME = @BPNME,
|
||||
BPEML = @BPEML,
|
||||
BPZON = @BPZON,
|
||||
BPBRH = @BPBRH,
|
||||
TRDAT = GETDATE(),
|
||||
TRMOD = 'UPDATE',
|
||||
TRUSR = @TRUSR
|
||||
WHERE BPENO = @OLD_BPENO";
|
||||
private string _delete =
|
||||
@"DELETE FROM BPAP
|
||||
WHERE BPENO = @OLD_BPENO";
|
||||
|
||||
public BpapDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public BpapDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public BpapDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectAll()
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _select + " ORDER BY BPENO ";
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectOne(string BPENO)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _select + " WHERE BPENO=@BPENO ";
|
||||
AddParam(cmd, "BPENO", BPENO);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
||||
public void InsertOne(string BPNME, string BPEML, string BPZON, string BPBRH, string TRUSR)
|
||||
{
|
||||
string BPENO = WGuard1.WNextRen(DateTime.UtcNow.AddHours(8).Date, "BPAP", "BPENO", "\"Z\"<999>", "");
|
||||
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _insert;
|
||||
AddParam(cmd, "BPENO", BPENO);
|
||||
AddParam(cmd, "BPNME", BPNME);
|
||||
AddParam(cmd, "BPPWD", WGuard1.KeyEnc(BPENO));
|
||||
AddParam(cmd, "BPEML", BPEML);
|
||||
AddParam(cmd, "BPZON", BPZON);
|
||||
AddParam(cmd, "BPBRH", BPBRH);
|
||||
AddParam(cmd, "TRUSR", TRUSR);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
||||
public void UpdateOne(string OLD_BPENO, string BPENO, string BPNME, string BPEML, string BPZON, string BPBRH, string TRUSR)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _update;
|
||||
AddParam(cmd, "BPNME", BPNME);
|
||||
AddParam(cmd, "BPEML", BPEML);
|
||||
AddParam(cmd, "BPZON", BPZON);
|
||||
AddParam(cmd, "BPBRH", BPBRH);
|
||||
AddParam(cmd, "TRUSR", TRUSR);
|
||||
AddParam(cmd, "OLD_BPENO", OLD_BPENO);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public void DeleteOne(string OLD_BPENO)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _delete;
|
||||
AddParam(cmd, "OLD_BPENO", OLD_BPENO);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得人員電子郵件
|
||||
/// </summary>
|
||||
/// <param name="bpeno"></param>
|
||||
/// <returns></returns>
|
||||
public string GetEmail(string bpeno)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand(@"
|
||||
SELECT BPEML
|
||||
FROM BPAP
|
||||
WHERE BPENO=@BPENO");
|
||||
AddParam(cmd, "BPENO", bpeno);
|
||||
return GetStringValue(Query.ExecuteScalar(cmd));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
|
||||
/// <summary>
|
||||
/// BprjDAC 的摘要描述
|
||||
/// </summary>
|
||||
public class BprjDAC : Wellan.Data.WDAC
|
||||
{
|
||||
public BprjDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public BprjDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public BprjDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.Data.Common;
|
||||
using Wellan.Data;
|
||||
|
||||
/// <summary>
|
||||
/// 用來取得專案處理人員資料的類別
|
||||
/// </summary>
|
||||
public class BprmDAC : Wellan.Data.WDAC
|
||||
{
|
||||
public BprmDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public BprmDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public BprmDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得某使用者是否有處理某專案的權限
|
||||
/// </summary>
|
||||
/// <param name="bppyn">年度專案編號</param>
|
||||
/// <param name="bpeno"></param>
|
||||
/// <returns></returns>
|
||||
public bool GetRight(string bppyn, string bpeno)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand(
|
||||
//@"SELECT COUNT(1) FROM BPRM A
|
||||
// INNER JOIN BPAA B ON A.BPPNM=B.BPPNM
|
||||
// WHERE B.BPPYN=@BPPYN AND BPENO=@BPENO");
|
||||
@"SELECT COUNT(1) FROM BPRM
|
||||
WHERE BPPNM=@BPPYN AND BPENO=@BPENO");
|
||||
cmd.Parameters.Add(Query.NewParameter("BPPYN", bppyn.Length > 3 ? bppyn.Substring(3) : bppyn));
|
||||
cmd.Parameters.Add(Query.NewParameter("BPENO", bpeno));
|
||||
int i;
|
||||
ExecuteScalar(cmd, out i);
|
||||
return i > 0;
|
||||
}
|
||||
|
||||
public DataTable SelectBy年度接單編號(string BPPYN)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand(
|
||||
@"SELECT A.BPENO, C.BPNME, C.BPEML
|
||||
FROM BPRM A
|
||||
JOIN BPAA B ON A.BPPNM = B.BPPNM
|
||||
JOIN BPSNView C ON A.BPENO = C.BPENO
|
||||
WHERE B.BPPYN = @BPPYN");
|
||||
cmd.Parameters.Add(Query.NewParameter("BPPYN", BPPYN));
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using System.Transactions;
|
||||
using System.ComponentModel;
|
||||
|
||||
/// <summary>
|
||||
/// BPSE 片語資料表資料處理類別
|
||||
/// </summary>
|
||||
[DataObject]
|
||||
public class BpseDAC : Wellan.Data.WDAC
|
||||
{
|
||||
public BpseDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public BpseDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public BpseDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectAll()
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT BPTYP, BPCNT
|
||||
FROM BPSE
|
||||
ORDER BY BPTYP, BPCNT";
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectOne(string BPTYP, string BPCNT)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT BPTYP, BPCNT
|
||||
FROM BPSE
|
||||
WHERE BPTYP=@BPTYP
|
||||
AND BPCNT=@BPCNT";
|
||||
Query.AddParam(cmd, "BPTYP", BPTYP);
|
||||
Query.AddParam(cmd, "BPCNT", BPCNT);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable Select片語類別()
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT DISTINCT BPTYP
|
||||
FROM BPSE ORDER BY BPTYP";
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable Select片語By類別(string BPTYP)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT BPCNT
|
||||
FROM BPSE
|
||||
WHERE BPTYP=@BPTYP AND BPENB=1
|
||||
ORDER BY BPORD, BPCNT";
|
||||
Query.AddParam(cmd, "BPTYP", BPTYP);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
||||
public void InsertOne(string BPTYP, string BPCNT, string UserId)
|
||||
{
|
||||
if (SelectOne(BPTYP, BPCNT).Rows.Count == 0)
|
||||
{
|
||||
DbCommand cmdInsert = Query.NewCommand();
|
||||
cmdInsert.CommandText =
|
||||
@"INSERT INTO BPSE (BPTYP, BPCNT, TRDAT, TRMOD, TRUSR)
|
||||
VALUES (@BPTYP, @BPCNT, GETDATE(), 'INSERT', @TRUSR)";
|
||||
Query.AddParam(cmdInsert, "BPTYP", BPTYP);
|
||||
Query.AddParam(cmdInsert, "BPCNT", BPCNT);
|
||||
Query.AddParam(cmdInsert, "TRUSR", UserId);
|
||||
Query.ExecuteNonQuery(cmdInsert);
|
||||
}
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
||||
public void UpdateOne(string OLD_BPTYP, string OLD_BPCNT, string BPTYP, string BPCNT, string UserId)
|
||||
{
|
||||
DbCommand cmdUpdate = Query.NewCommand();
|
||||
cmdUpdate.CommandText =
|
||||
@"UPDATE BPSE SET
|
||||
BPTYP = @BPTYP,
|
||||
BPCNT = @BPCNT,
|
||||
TRDAT = GETDATE(),
|
||||
TRMOD = 'MODIFY',
|
||||
TRUSR = @TRUSR
|
||||
WHERE BPTYP=@OLD_BPTYP
|
||||
AND BPCNT=@OLD_BPCNT";
|
||||
Query.AddParam(cmdUpdate, "BPTYP", BPTYP);
|
||||
Query.AddParam(cmdUpdate, "BPCNT", BPCNT);
|
||||
Query.AddParam(cmdUpdate, "TRUSR", UserId);
|
||||
Query.AddParam(cmdUpdate, "OLD_BPTYP", OLD_BPTYP);
|
||||
Query.AddParam(cmdUpdate, "OLD_BPCNT", OLD_BPCNT);
|
||||
Query.ExecuteNonQuery(cmdUpdate);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public void DeleteOne(string OLD_BPTYP, string OLD_BPCNT)
|
||||
{
|
||||
DbCommand cmdDelete = Query.NewCommand();
|
||||
cmdDelete.CommandText =
|
||||
@"DELETE FROM BPSE
|
||||
WHERE BPTYP=@OLD_BPTYP
|
||||
AND BPCNT=@OLD_BPCNT";
|
||||
Query.AddParam(cmdDelete, "OLD_BPTYP", OLD_BPTYP);
|
||||
Query.AddParam(cmdDelete, "OLD_BPCNT", OLD_BPCNT);
|
||||
Query.ExecuteNonQuery(cmdDelete);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,531 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Text;
|
||||
using System.ComponentModel;
|
||||
using Wellan.Data;
|
||||
|
||||
/// <summary>
|
||||
/// 薪資資料與薪資異動資料的資料處理類別
|
||||
/// </summary>
|
||||
[DataObject(true)]
|
||||
public class BpslDAC : Wellan.Data.WDAC
|
||||
{
|
||||
private DbCommand cmdSelectBpslBpeno;
|
||||
private DbCommand cmdSelectRpsl;
|
||||
private DbCommand cmdSelectBpslOne;
|
||||
private DbCommand cmdSelectRpslOne;
|
||||
private DbCommand cmdSelectRpslAll;
|
||||
private DbCommand cmdSelectBpsl2;
|
||||
|
||||
public BpslDAC()
|
||||
{
|
||||
// 取出最後一筆異動
|
||||
cmdSelectRpsl = Query.NewCommand(
|
||||
@"SELECT TOP 1 RPENO BPENO, RPITM BPITM, RPBDT BPBDT, RPSRM BPSRM, RPSRD BPSRD,
|
||||
RPP01 BPP01, RPP02 BPP02, RPP03 BPP03, RPP04 BPP04, RPP05 BPP05, APPNO
|
||||
FROM RPSL WHERE RPENO=@BPENO ORDER BY BPITM DESC");
|
||||
cmdSelectRpsl.Parameters.Add(Query.NewParameter("BPENO", DbType.String));
|
||||
|
||||
// 取出員工薪資資料
|
||||
cmdSelectBpslOne = Query.NewCommand(
|
||||
@"SELECT *, 0 BPITM, NULL BPBDT FROM BPSL WHERE BPENO=@BPENO");
|
||||
cmdSelectBpslOne.Parameters.Add(Query.NewParameter("BPENO", DbType.String));
|
||||
|
||||
// 取出某一筆薪資異動資料
|
||||
cmdSelectRpslOne = Query.NewCommand(
|
||||
@"SELECT RPENO BPENO, RPITM BPITM, RPBDT BPBDT, RPSRM BPSRM, RPSRD BPSRD,
|
||||
RPP01 BPP01, RPP02 BPP02, RPP03 BPP03, RPP04 BPP04, RPP05 BPP05, APPNO
|
||||
FROM RPSL WHERE RPENO=@BPENO AND RPITM=@BPITM");
|
||||
cmdSelectRpslOne.Parameters.Add(Query.NewParameter("BPENO", DbType.String));
|
||||
cmdSelectRpslOne.Parameters.Add(Query.NewParameter("BPITM", DbType.Int32));
|
||||
|
||||
// 取出某員工編號全部的紀錄,以異動次數排序
|
||||
cmdSelectRpslAll = Query.NewCommand(
|
||||
@"SELECT BPENO, 0 BPITM, NULL BPBDT, BPSRM, BPSRD,
|
||||
BPP01, BPP02, BPP03, BPP04, BPP05, APPNO
|
||||
FROM BPSL
|
||||
WHERE BPENO=@BPENO
|
||||
UNION
|
||||
SELECT RPENO BPENO, RPITM BPITM, RPBDT BPBDT, RPSRM BPSRM, RPSRD BPSRD,
|
||||
RPP01 BPP01, RPP02 BPP02, RPP03 BPP03, RPP04 BPP04, RPP05 BPP05, APPNO
|
||||
FROM RPSL
|
||||
WHERE RPENO=@BPENO
|
||||
ORDER BY BPITM");
|
||||
cmdSelectRpslAll.Parameters.Add(Query.NewParameter("BPENO", DbType.String));
|
||||
|
||||
// 取出某員工編號全部的紀錄,以生效日期排序
|
||||
cmdSelectBpsl2 = Query.NewCommand(
|
||||
@"SELECT BPENO, 0 BPITM, '1899/12/31' BPBDT, BPSRM, BPSRD,
|
||||
BPP01, BPP02, BPP03, BPP04, BPP05, APPNO
|
||||
FROM BPSL
|
||||
WHERE BPENO=@BPENO
|
||||
UNION
|
||||
SELECT RPENO BPENO, RPITM BPITM, RPBDT BPBDT, RPSRM BPSRM, RPSRD BPSRD,
|
||||
RPP01 BPP01, RPP02 BPP02, RPP03 BPP03, RPP04 BPP04, RPP05 BPP05, APPNO
|
||||
FROM RPSL
|
||||
WHERE RPENO=@BPENO
|
||||
ORDER BY BPBDT");
|
||||
cmdSelectBpsl2.Parameters.Add(Query.NewParameter("BPENO", DbType.String));
|
||||
}
|
||||
|
||||
public BpslDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
base._connectionConfig = connectionConfig;
|
||||
base._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public BpslDAC(WQuery query)
|
||||
: this()
|
||||
{
|
||||
base._query = query;
|
||||
}
|
||||
|
||||
private DataTable NewResult()
|
||||
{
|
||||
// 準備輸出資料架構
|
||||
DataTable Result = new DataTable();
|
||||
Result.Columns.Add("BPENO", typeof(String));
|
||||
Result.Columns.Add("BPITM", typeof(Int32));
|
||||
Result.Columns.Add("BPBDT", typeof(DateTime));
|
||||
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("APPNO", typeof(Int32));
|
||||
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["BPENO"] = source["BPENO"];
|
||||
newRow["BPITM"] = source["BPITM"];
|
||||
newRow["BPBDT"] = source["BPBDT"];
|
||||
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["APPNO"] = source["APPNO"];
|
||||
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["BPENO"] = current["BPENO"];
|
||||
newRow["BPITM"] = current["BPITM"];
|
||||
newRow["BPBDT"] = current["BPBDT"];
|
||||
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["APPNO"] = current["APPNO"];
|
||||
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 BPENO, string BPNME)
|
||||
{
|
||||
if (cmdSelectBpslBpeno == null)
|
||||
cmdSelectBpslBpeno = Query.NewCommand();
|
||||
cmdSelectBpslBpeno.Parameters.Clear();
|
||||
|
||||
// 清空輸出資料表
|
||||
DataTable Result = NewResult();
|
||||
|
||||
// 依條件抓出員工編號
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append("SELECT A.BPENO FROM BPSL A INNER JOIN BPSNView B ON A.BPENO=B.BPENO WHERE 1=1 ");
|
||||
if (BPENO != null && BPENO.Length > 0)
|
||||
{
|
||||
sb.Append(" AND A.BPENO LIKE @BPENO ");
|
||||
cmdSelectBpslBpeno.Parameters.Add(Query.NewParameter("BPENO", BPENO + "%"));
|
||||
}
|
||||
if (BPNME != null && BPNME.Length > 0)
|
||||
{
|
||||
sb.Append(" AND B.BPNME LIKE @BPNME ");
|
||||
cmdSelectBpslBpeno.Parameters.Add(Query.NewParameter("BPNME", BPNME + "%"));
|
||||
}
|
||||
cmdSelectBpslBpeno.CommandText = sb.ToString();
|
||||
DataTable bpenoTmp = Query.Select(cmdSelectBpslBpeno);
|
||||
|
||||
DataTable bpslTmp;
|
||||
// 一筆一筆的抓出應該顯示的資料
|
||||
foreach (DataRow bpenoRow in bpenoTmp.Rows)
|
||||
{
|
||||
// 依照員工編號,抓出最後一筆異動
|
||||
cmdSelectRpsl.Parameters[0].Value = bpenoRow[0];
|
||||
bpslTmp = Query.Select(cmdSelectRpsl);
|
||||
|
||||
// 有異動資料,填入異動資料
|
||||
if (bpslTmp.Rows.Count != 0)
|
||||
{
|
||||
FillResult(Result, bpslTmp.Rows[0]);
|
||||
}
|
||||
// 沒有異動資料,填入原始資料
|
||||
else
|
||||
{
|
||||
cmdSelectBpslOne.Parameters[0].Value = bpenoRow[0];
|
||||
bpslTmp = Query.Select(cmdSelectBpslOne);
|
||||
FillResult(Result, bpslTmp.Rows[0]);
|
||||
}
|
||||
}
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取出最新資料,給 FormView 的 Select 用的
|
||||
/// </summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectOne(string BPENO, int BPITM)
|
||||
{
|
||||
return SelectOne(BPENO, BPITM, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取出某一筆薪資異動資料
|
||||
/// </summary>
|
||||
public DataTable SelectOne(string BPENO, int BPITM, DbTransaction tran)
|
||||
{
|
||||
DataTable Result = NewResult();
|
||||
|
||||
if (BPENO != null && BPENO.Length > 0)
|
||||
{
|
||||
// 取原始資料
|
||||
if (BPITM == 0)
|
||||
{
|
||||
cmdSelectBpslOne.Parameters[0].Value = BPENO;
|
||||
DataTable tmp;
|
||||
if (tran == null)
|
||||
tmp = Query.Select(cmdSelectBpslOne);
|
||||
else
|
||||
tmp = Query.Select(cmdSelectBpslOne, tran);
|
||||
if (tmp.Rows.Count > 0)
|
||||
FillResult(Result, tmp.Rows[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmdSelectRpslOne.Parameters[0].Value = BPENO;
|
||||
cmdSelectRpslOne.Parameters[1].Value = BPITM;
|
||||
DataTable tmp;
|
||||
if (tran == null)
|
||||
tmp = Query.Select(cmdSelectRpslOne);
|
||||
else
|
||||
tmp = Query.Select(cmdSelectRpslOne, tran);
|
||||
if (tmp.Rows.Count > 0)
|
||||
FillResult(Result, tmp.Rows[0]);
|
||||
}
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取出所有薪資異動歷史資料,薪資異動查詢用
|
||||
/// </summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectRPSL(string BPENO)
|
||||
{
|
||||
DataTable Result = NewResult();
|
||||
|
||||
if (BPENO != null && BPENO.Length > 0)
|
||||
{
|
||||
cmdSelectRpslAll.Parameters[0].Value = BPENO;
|
||||
DataTable tmp = Query.Select(cmdSelectRpslAll);
|
||||
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>
|
||||
public DataTable SelectBPSLDateRange(string bpeno, DateTime startDay, DateTime endDay, DbTransaction tran)
|
||||
{
|
||||
DataTable Result = NewResult();
|
||||
|
||||
if (bpeno != null && bpeno.Length > 0)
|
||||
{
|
||||
cmdSelectBpsl2.Parameters[0].Value = bpeno;
|
||||
DataTable tmp = Query.Select(cmdSelectBpsl2, tran);
|
||||
int startIndex = -1;
|
||||
int endIndex = -1;
|
||||
for (int i = 0; i < tmp.Rows.Count; i++)
|
||||
{
|
||||
DateTime bpbdt = Convert.ToDateTime(tmp.Rows[i]["BPBDT"]);
|
||||
if (startDay >= bpbdt)
|
||||
startIndex = i;
|
||||
if (endDay >= bpbdt)
|
||||
endIndex = i;
|
||||
}
|
||||
|
||||
if (startIndex != -1 && endIndex != -1)
|
||||
{
|
||||
for (int i = startIndex; i <= endIndex; i++)
|
||||
{
|
||||
FillResult(Result, tmp.Rows[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取出某一筆薪資異動紀錄
|
||||
/// </summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectRPSLOne(string BPENO, int BPITM)
|
||||
{
|
||||
DataTable Result = NewResult();
|
||||
|
||||
if (BPENO != null && BPENO.Length > 0)
|
||||
{
|
||||
cmdSelectRpslAll.Parameters[0].Value = BPENO;
|
||||
DataTable tmp = Query.Select(cmdSelectRpslAll);
|
||||
for (int i = 0; i < tmp.Rows.Count; i++)
|
||||
{
|
||||
if (Convert.ToInt32(tmp.Rows[i]["BPITM"]) == BPITM)
|
||||
{
|
||||
if (i > 0)
|
||||
FillResult(Result, tmp.Rows[i], tmp.Rows[i - 1]);
|
||||
else
|
||||
FillResult(Result, tmp.Rows[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得下一個薪資異動項次
|
||||
/// </summary>
|
||||
private int NextRPITM(string BPENO)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand("SELECT ISNULL(MAX(RPITM), 0) + 1 FROM RPSL WHERE RPENO=@RPENO");
|
||||
cmd.Parameters.Add(Query.NewParameter("RPENO", BPENO));
|
||||
int Result;
|
||||
ExecuteScalar(cmd, out Result);
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新增一筆員工薪資資料,或薪資異動紀錄
|
||||
/// </summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
||||
public int Insert(string BPENO, int BPITM, DateTime BPBDT, int BPSRM, int BPSRD, int BPP01, int BPP02,
|
||||
int BPP03, int BPP04, int BPP05, string TRUSR)
|
||||
{
|
||||
DbCommand cmdInsert = Query.NewCommand();
|
||||
|
||||
if (BPITM == 0)
|
||||
{
|
||||
cmdInsert.CommandText =
|
||||
@"INSERT INTO BPSL
|
||||
(BPENO, BPSRM, BPSRD, BPP01, BPP02, BPP03, BPP04, BPP05, APPNO,
|
||||
TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@BPENO, @BPSRM, @BPSRD, @BPP01, @BPP02, @BPP03, @BPP04, @BPP05, 1,
|
||||
GETDATE(), 'INSERT', @TRUSR)";
|
||||
AddParam(cmdInsert, "BPENO", BPENO);
|
||||
AddParam(cmdInsert, "BPSRM", BPSRM);
|
||||
AddParam(cmdInsert, "BPSRD", BPSRD);
|
||||
AddParam(cmdInsert, "BPP01", BPP01);
|
||||
AddParam(cmdInsert, "BPP02", BPP02);
|
||||
AddParam(cmdInsert, "BPP03", BPP03);
|
||||
AddParam(cmdInsert, "BPP04", BPP04);
|
||||
AddParam(cmdInsert, "BPP05", BPP05);
|
||||
AddParam(cmdInsert, "TRUSR", TRUSR);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmdInsert.CommandText =
|
||||
@"INSERT INTO RPSL
|
||||
(RPENO, RPITM, RPBDT, RPSRM, RPSRD, RPP01, RPP02, RPP03, RPP04, RPP05, APPNO,
|
||||
TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@RPENO, @RPITM, @RPBDT, @RPSRM, @RPSRD, @RPP01, @RPP02, @RPP03, @RPP04, @RPP05, 1,
|
||||
GETDATE(), 'INSERT', @TRUSR)";
|
||||
AddParam(cmdInsert, "RPENO", BPENO);
|
||||
AddParam(cmdInsert, "RPITM", NextRPITM(BPENO));
|
||||
AddParam(cmdInsert, "RPBDT", BPBDT);
|
||||
AddParam(cmdInsert, "RPSRM", BPSRM);
|
||||
AddParam(cmdInsert, "RPSRD", BPSRD);
|
||||
AddParam(cmdInsert, "RPP01", BPP01);
|
||||
AddParam(cmdInsert, "RPP02", BPP02);
|
||||
AddParam(cmdInsert, "RPP03", BPP03);
|
||||
AddParam(cmdInsert, "RPP04", BPP04);
|
||||
AddParam(cmdInsert, "RPP05", BPP05);
|
||||
AddParam(cmdInsert, "TRUSR", TRUSR);
|
||||
}
|
||||
|
||||
return Query.ExecuteNonQuery(cmdInsert);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更正員工薪資資料或薪資異動紀錄
|
||||
/// </summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
||||
public int Update(string BPENO, int BPITM, DateTime BPBDT, int BPSRM, int BPSRD, int BPP01, int BPP02,
|
||||
int BPP03, int BPP04, int BPP05, string TRUSR, int APPNO,
|
||||
string OLD_BPENO, int OLD_BPITM, int OLD_APPNO)
|
||||
{
|
||||
DbCommand cmdUpdate = Query.NewCommand();
|
||||
|
||||
if (OLD_BPITM == 0)
|
||||
{
|
||||
cmdUpdate.CommandText =
|
||||
@"UPDATE BPSL SET
|
||||
BPENO = @BPENO,
|
||||
BPSRM = @BPSRM,
|
||||
BPSRD = @BPSRD,
|
||||
BPP01 = @BPP01,
|
||||
BPP02 = @BPP02,
|
||||
BPP03 = @BPP03,
|
||||
BPP04 = @BPP04,
|
||||
BPP05 = @BPP05,
|
||||
APPNO = APPNO + 1,
|
||||
TRDAT = GETDATE(),
|
||||
TRMOD = 'UPDATE',
|
||||
TRUSR = @TRUSR
|
||||
WHERE BPENO = @OLD_BPENO
|
||||
AND APPNO = @OLD_APPNO";
|
||||
AddParam(cmdUpdate, "BPENO", BPENO);
|
||||
AddParam(cmdUpdate, "BPSRM", BPSRM);
|
||||
AddParam(cmdUpdate, "BPSRD", BPSRD);
|
||||
AddParam(cmdUpdate, "BPP01", BPP01);
|
||||
AddParam(cmdUpdate, "BPP02", BPP02);
|
||||
AddParam(cmdUpdate, "BPP03", BPP03);
|
||||
AddParam(cmdUpdate, "BPP04", BPP04);
|
||||
AddParam(cmdUpdate, "BPP05", BPP05);
|
||||
AddParam(cmdUpdate, "TRUSR", TRUSR);
|
||||
AddParam(cmdUpdate, "OLD_BPENO", OLD_BPENO);
|
||||
AddParam(cmdUpdate, "OLD_APPNO", OLD_APPNO);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmdUpdate.CommandText =
|
||||
@"UPDATE RPSL SET
|
||||
RPENO = @RPENO,
|
||||
RPITM = @RPITM,
|
||||
RPBDT = @RPBDT,
|
||||
RPSRM = @RPSRM,
|
||||
RPSRD = @RPSRD,
|
||||
RPP01 = @RPP01,
|
||||
RPP02 = @RPP02,
|
||||
RPP03 = @RPP03,
|
||||
RPP04 = @RPP04,
|
||||
RPP05 = @RPP05,
|
||||
APPNO = APPNO + 1,
|
||||
TRDAT = GETDATE(),
|
||||
TRMOD = 'UPDATE',
|
||||
TRUSR = @TRUSR
|
||||
WHERE RPENO = @OLD_RPENO
|
||||
AND RPITM = @OLD_RPITM
|
||||
AND APPNO = @OLD_APPNO";
|
||||
AddParam(cmdUpdate, "RPENO", BPENO);
|
||||
AddParam(cmdUpdate, "RPITM", BPITM);
|
||||
AddParam(cmdUpdate, "RPBDT", BPBDT);
|
||||
AddParam(cmdUpdate, "RPSRM", BPSRM);
|
||||
AddParam(cmdUpdate, "RPSRD", BPSRD);
|
||||
AddParam(cmdUpdate, "RPP01", BPP01);
|
||||
AddParam(cmdUpdate, "RPP02", BPP02);
|
||||
AddParam(cmdUpdate, "RPP03", BPP03);
|
||||
AddParam(cmdUpdate, "RPP04", BPP04);
|
||||
AddParam(cmdUpdate, "RPP05", BPP05);
|
||||
AddParam(cmdUpdate, "TRUSR", TRUSR);
|
||||
AddParam(cmdUpdate, "OLD_RPENO", OLD_BPENO);
|
||||
AddParam(cmdUpdate, "OLD_RPITM", OLD_BPITM);
|
||||
AddParam(cmdUpdate, "OLD_APPNO", OLD_APPNO);
|
||||
}
|
||||
|
||||
return Query.ExecuteNonQuery(cmdUpdate);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刪除員工薪資資料或薪資異動紀錄
|
||||
/// </summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public int Delete(string OLD_BPENO, int OLD_BPITM, int OLD_APPNO)
|
||||
{
|
||||
OLD_BPENO = OLD_BPENO != null ? OLD_BPENO : "";
|
||||
|
||||
DbCommand cmdDelete = Query.NewCommand();
|
||||
|
||||
if (OLD_BPITM == 0)
|
||||
{
|
||||
cmdDelete.CommandText =
|
||||
@"DELETE FROM BPSL
|
||||
WHERE BPENO = @OLD_BPENO
|
||||
AND APPNO = @OLD_APPNO";
|
||||
AddParam(cmdDelete, "OLD_BPENO", OLD_BPENO);
|
||||
AddParam(cmdDelete, "OLD_APPNO", OLD_APPNO);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmdDelete.CommandText =
|
||||
@"DELETE FROM RPSL
|
||||
WHERE RPENO = @OLD_BPENO
|
||||
AND RPITM = @OLD_BPITM
|
||||
AND APPNO = @OLD_APPNO";
|
||||
AddParam(cmdDelete, "OLD_BPENO", OLD_BPENO);
|
||||
AddParam(cmdDelete, "OLD_BPITM", OLD_BPITM);
|
||||
AddParam(cmdDelete, "OLD_APPNO", OLD_APPNO);
|
||||
}
|
||||
|
||||
return Query.ExecuteNonQuery(cmdDelete);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,298 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Configuration;
|
||||
using System.Text;
|
||||
using System.Collections.Generic;
|
||||
using Wellan.Data;
|
||||
|
||||
/// <summary>
|
||||
/// 員工資料的資料處理類別
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得人員目前派駐專案
|
||||
/// </summary>
|
||||
/// <param name="bpeno"></param>
|
||||
/// <returns></returns>
|
||||
public string GetCurrentProject(string bpeno)
|
||||
{
|
||||
return GetProjectByDate(bpeno, DateTime.UtcNow.AddHours(8).Date);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得人員目前派駐專案
|
||||
/// </summary>
|
||||
/// <param name="bpeno"></param>
|
||||
/// <returns></returns>
|
||||
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));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得人員目前派駐地點
|
||||
/// </summary>
|
||||
/// <param name="bpeno"></param>
|
||||
/// <returns></returns>
|
||||
public string GetCurrentSite(string bpeno)
|
||||
{
|
||||
return GetSiteByDate(bpeno, DateTime.UtcNow.AddHours(8).Date);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得人員目前派駐地點
|
||||
/// </summary>
|
||||
/// <param name="bpeno"></param>
|
||||
/// <returns></returns>
|
||||
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));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得人員電子郵件
|
||||
/// </summary>
|
||||
/// <param name="bpeno"></param>
|
||||
/// <returns></returns>
|
||||
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));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得人員電子郵件2
|
||||
/// </summary>
|
||||
/// <param name="bpeno"></param>
|
||||
/// <returns></returns>
|
||||
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));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得某日期人員所屬公司名稱
|
||||
/// </summary>
|
||||
/// <param name="bpeno">員工編號</param>
|
||||
/// <param name="date">日期</param>
|
||||
/// <returns></returns>
|
||||
public List<string> 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<string> result = new List<string>();
|
||||
result.Add(GetStringValue(Query.ExecuteScalar(cmd)));
|
||||
result.Add(CompanyDAC.GetCompanyName(result[0]));
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得人員到職日期
|
||||
/// </summary>
|
||||
/// <param name="bpeno"></param>
|
||||
/// <returns></returns>
|
||||
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));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得人員離職日期
|
||||
/// </summary>
|
||||
/// <param name="bpeno"></param>
|
||||
/// <returns></returns>
|
||||
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<string> managerIds = new List<string>();
|
||||
|
||||
public static bool IsManager(string bpeno)
|
||||
{
|
||||
if (managerIds.Count == 0)
|
||||
{
|
||||
managerIds.Add("00001");
|
||||
managerIds.Add("00002");
|
||||
managerIds.Add("00003");
|
||||
}
|
||||
|
||||
return managerIds.Contains(bpeno);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取出某日期在職的員工
|
||||
/// </summary>
|
||||
/// <param name="date">日期</param>
|
||||
/// <returns></returns>
|
||||
public DataTable GetOnBoardEmployee(DateTime date)
|
||||
{
|
||||
return Query.Select(Query.NewCommand("SELECT * FROM BPSNView WHERE dbo.EmployeeOnboard(BPENO, @DATE) = 1"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,219 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using System.Transactions;
|
||||
using System.ComponentModel;
|
||||
|
||||
/// <summary>
|
||||
/// 簽核關卡人員檔
|
||||
/// </summary>
|
||||
[DataObject]
|
||||
public class BsgpDAC : Wellan.Data.WDAC
|
||||
{
|
||||
private string _select =
|
||||
@" SELECT BSPYN, BSFLW, BSLVL, BSENO, TRDAT, TRMOD, TRUSR,
|
||||
CASE WHEN SUBSTRING(BSENO, 1, 1) = 'Z'
|
||||
THEN (SELECT TOP 1 BPNME FROM BPAP WHERE BPENO=BSENO)
|
||||
ELSE (SELECT TOP 1 BPNME FROM BPSNView WHERE BPENO=BSENO) END AS BSNME,
|
||||
CASE WHEN SUBSTRING(BSENO, 1, 1) = 'Z'
|
||||
THEN (SELECT TOP 1 BPEML FROM BPAP WHERE BPENO=BSENO)
|
||||
ELSE (SELECT TOP 1 BPEML FROM BPSNView WHERE BPENO=BSENO) END AS BSEML
|
||||
FROM BSGP ";
|
||||
private string _insert =
|
||||
@"INSERT INTO dbo.BSGP
|
||||
(BSPYN, BSFLW, BSLVL, BSENO, TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@BSPYN, @BSFLW, @BSLVL, @BSENO, GETDATE(), 'INSERT', @TRUSR)";
|
||||
private string _update =
|
||||
@"UPDATE BSGP SET
|
||||
BSPYN = @BSPYN,
|
||||
BSFLW = @BSFLW,
|
||||
BSLVL = @BSLVL,
|
||||
BSENO = @BSENO,
|
||||
TRDAT = GETDATE(),
|
||||
TRMOD = 'UPDATE',
|
||||
TRUSR = @TRUSR
|
||||
WHERE BSPYN = @OLD_BSPYN
|
||||
AND BSFLW = @OLD_BSFLW
|
||||
AND BSLVL = @OLD_BSLVL
|
||||
AND BSENO = @OLD_BSENO";
|
||||
private string _delete =
|
||||
@"DELETE FROM BSGP
|
||||
WHERE BSPYN = @OLD_BSPYN
|
||||
AND BSFLW = @OLD_BSFLW
|
||||
AND BSLVL = @OLD_BSLVL
|
||||
AND BSENO = @OLD_BSENO";
|
||||
|
||||
public BsgpDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public BsgpDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public BsgpDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectAll()
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _select + " ORDER BY BSPYN, BSFLW, BSLVL, BSENO ";
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectOne(string BSPYN, string BSFLW, int BSLVL, string BSENO)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _select + " WHERE BSPYN = @BSPYN AND BSFLW = @BSFLW AND BSLVL = @BSLVL AND BSENO = @BSENO ";
|
||||
AddParam(cmd, "BSPYN", BSPYN);
|
||||
AddParam(cmd, "BSFLW", BSFLW);
|
||||
AddParam(cmd, "BSLVL", BSLVL);
|
||||
AddParam(cmd, "BSENO", BSENO);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectByLevel(string BSPYN, string BSFLW, int BSLVL)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _select + " WHERE BSPYN = @BSPYN AND BSFLW = @BSFLW AND BSLVL = @BSLVL ORDER BY BSENO ";
|
||||
AddParam(cmd, "BSPYN", BSPYN);
|
||||
AddParam(cmd, "BSFLW", BSFLW);
|
||||
AddParam(cmd, "BSLVL", BSLVL);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectForDropdown(string BSPYN, string BSFLW, int BSLVL)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _select + " WHERE BSPYN = @BSPYN AND BSFLW = @BSFLW AND BSLVL = @BSLVL ORDER BY BSENO ";
|
||||
//@"SELECT NULL AS BSPYN, NULL AS BSFLW, NULL AS BSLVL, NULL AS BSENO, NULL AS TRDAT,
|
||||
// NULL AS TRMOD, NULL AS TRUSR, NULL AS BSNME
|
||||
// UNION ALL "
|
||||
// + _select + " WHERE BSPYN = @BSPYN AND BSFLW = @BSFLW AND BSLVL = @BSLVL ORDER BY BSENO ";
|
||||
AddParam(cmd, "BSPYN", BSPYN);
|
||||
AddParam(cmd, "BSFLW", BSFLW);
|
||||
AddParam(cmd, "BSLVL", BSLVL);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
||||
public void InsertOne(string BSPYN, string BSFLW, int BSLVL, string BSENO, string TRUSR)
|
||||
{
|
||||
if (SelectOne(BSPYN, BSFLW, BSLVL, BSENO).Rows.Count > 0)
|
||||
return;
|
||||
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _insert;
|
||||
AddParam(cmd, "BSPYN", BSPYN);
|
||||
AddParam(cmd, "BSFLW", BSFLW);
|
||||
AddParam(cmd, "BSLVL", BSLVL);
|
||||
AddParam(cmd, "BSENO", BSENO);
|
||||
AddParam(cmd, "TRUSR", TRUSR);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
||||
public void UpdateOne(string OLD_BSPYN, string OLD_BSFLW, int OLD_BSLVL, string OLD_BSENO,
|
||||
string BSPYN, string BSFLW, int BSLVL, string BSENO, string TRUSR)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _update;
|
||||
AddParam(cmd, "BSPYN", BSPYN);
|
||||
AddParam(cmd, "BSFLW", BSFLW);
|
||||
AddParam(cmd, "BSLVL", BSLVL);
|
||||
AddParam(cmd, "BSENO", BSENO);
|
||||
AddParam(cmd, "OLD_BSPYN", OLD_BSPYN);
|
||||
AddParam(cmd, "OLD_BSFLW", OLD_BSFLW);
|
||||
AddParam(cmd, "OLD_BSLVL", OLD_BSLVL);
|
||||
AddParam(cmd, "OLD_BSENO", OLD_BSENO);
|
||||
AddParam(cmd, "TRUSR", TRUSR);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public void DeleteOne(string OLD_BSPYN, string OLD_BSFLW, int OLD_BSLVL, string OLD_BSENO)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _delete;
|
||||
AddParam(cmd, "OLD_BSPYN", OLD_BSPYN);
|
||||
AddParam(cmd, "OLD_BSFLW", OLD_BSFLW);
|
||||
AddParam(cmd, "OLD_BSLVL", OLD_BSLVL);
|
||||
AddParam(cmd, "OLD_BSENO", OLD_BSENO);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
public bool 是否是主要簽核(string BSENO)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT COUNT(1)
|
||||
FROM BSGP
|
||||
WHERE BSLVL IN (1, 3) AND BSENO=@BSENO";
|
||||
AddParam(cmd, "BSENO", BSENO);
|
||||
return GetInt32Value(Query.ExecuteScalar(cmd)) > 0;
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable 我督導的專案(string BSENO)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT A.BSPYN, B.BPPYM
|
||||
FROM BSGP A
|
||||
INNER JOIN BPAA B ON A.BSPYN=B.BPPYN
|
||||
WHERE BSLVL=3 AND BSENO=@BSENO
|
||||
ORDER BY BSPYN";
|
||||
AddParam(cmd, "BSENO", BSENO);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable 我可簽核的專案(int Year1, int Year2, string BSENO)
|
||||
{
|
||||
string yearWhere = "";
|
||||
if (Year1 > 0 && Year2 > 0)
|
||||
yearWhere = " AND B.BPYER>=@BPYER1 AND B.BPYER<=@BPYER2 ";
|
||||
if (Year1 > 0 && Year2 == 0)
|
||||
yearWhere = " AND B.BPYER=@BPYER1 ";
|
||||
if (Year1 == 0 && Year2 > 0)
|
||||
yearWhere = " AND B.BPYER=@BPYER2 ";
|
||||
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = String.Format(
|
||||
@"SELECT A.BSPYN, B.BPPYM
|
||||
FROM BSGP A
|
||||
INNER JOIN BPAA B ON A.BSPYN=B.BPPYN {0}
|
||||
WHERE BSLVL IN (1, 3) AND BSENO=@BSENO
|
||||
UNION
|
||||
SELECT A.BSPYN, B.BPPYM
|
||||
FROM BSGP A
|
||||
INNER JOIN BPAA B ON A.BSPYN=B.BPPYN
|
||||
WHERE BSLVL IN (1, 3) AND BSENO=@BSENO AND (BPPYN = '103TYB00001' OR BPPYN = '103JYB00001')
|
||||
ORDER BY BSPYN", yearWhere);
|
||||
AddParam(cmd, "BPYER1", Year1);
|
||||
AddParam(cmd, "BPYER2", Year2);
|
||||
AddParam(cmd, "BSENO", BSENO);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable 我可簽核的專案(int Year, string BSENO)
|
||||
{
|
||||
return 我可簽核的專案(Year, 0, BSENO);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using System.ComponentModel;
|
||||
|
||||
/// <summary>
|
||||
/// 班表的資料處理類別
|
||||
/// </summary>
|
||||
[DataObject]
|
||||
public class BtmeDAC : WDAC
|
||||
{
|
||||
public BtmeDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public BtmeDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public BtmeDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public List<BtmeItem> SelectAll()
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText = "SELECT * FROM BTME ORDER BY BTTID";
|
||||
return Query.Select<BtmeItem>(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public List<BtmeItem> SelectOne(string BTTID)
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText = "SELECT * FROM BTME WHERE BTTID=@BTTID";
|
||||
AddParam(cmd, "BTTID", BTTID);
|
||||
return Query.Select<BtmeItem>(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
||||
public void InsertOne(BtmeItem value)
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"INSERT INTO dbo.BTME
|
||||
(BTTID, BTNME, BTSTM, BTETM, BTRST, BTRED, TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@BTTID, @BTNME, @BTSTM, @BTETM, @BTRST, @BTRED, GETDATE(), 'INSERT', @TRUSR)";
|
||||
AddParam(cmd, "BTTID", WGuard1.WNextRen(DateTime.UtcNow.AddHours(8).Date, "BTME", "BTTID", "<9999>", "") );
|
||||
AddParam(cmd, "BTNME", value.BTNME);
|
||||
AddParam(cmd, "BTSTM", value.BTSTM);
|
||||
AddParam(cmd, "BTETM", value.BTETM);
|
||||
AddParam(cmd, "BTRST", value.BTRST);
|
||||
AddParam(cmd, "BTRED", value.BTRED);
|
||||
AddParam(cmd, "TRUSR", value.TRUSR);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
||||
public void UpdateOne(BtmeItem value)
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"UPDATE dbo.BTME SET
|
||||
BTNME = @BTNME,
|
||||
BTSTM = @BTSTM,
|
||||
BTETM = @BTETM,
|
||||
BTRST = @BTRST,
|
||||
BTRED = @BTRED,
|
||||
TRDAT = GETDATE(),
|
||||
TRMOD = 'MODIFY',
|
||||
TRUSR = @TRUSR
|
||||
WHERE
|
||||
BTTID = @OLD_BTTID";
|
||||
AddParam(cmd, "BTNME", value.BTNME);
|
||||
AddParam(cmd, "BTSTM", value.BTSTM);
|
||||
AddParam(cmd, "BTETM", value.BTETM);
|
||||
AddParam(cmd, "BTRST", value.BTRST);
|
||||
AddParam(cmd, "BTRED", value.BTRED);
|
||||
AddParam(cmd, "TRUSR", value.TRUSR);
|
||||
AddParam(cmd, "OLD_BTTID", value.BTTID);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public void DeleteOne(BtmeItem value)
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText = @"DELETE FROM dbo.BTME WHERE BTTID = @OLD_BTTID";
|
||||
AddParam(cmd, "OLD_BTTID", value.BTTID);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取出班表選擇下拉選單的資料,包含預設班表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public List<BtmeItem> SelectForDropdown()
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT NULL BTTID, '預設班表 (08:00-17:00)' BTNME
|
||||
UNION ALL
|
||||
SELECT BTTID, CONCAT(BTNME, ' (', BTSTM, '-', BTETM, ')') BTNME FROM BTME
|
||||
WHERE BTSTM <> '' AND BTSTM IS NOT NULL
|
||||
ORDER BY BTTID";
|
||||
return Query.Select<BtmeItem>(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
public class BtmeItem
|
||||
{
|
||||
public string BTTID { get; set; }
|
||||
public string BTNME { get; set; }
|
||||
public string BTSTM { get; set; }
|
||||
public string BTETM { get; set; }
|
||||
public string BTRST { get; set; }
|
||||
public string BTRED { get; set; }
|
||||
public DateTime TRDAT { get; set; }
|
||||
public string TRMOD { get; set; }
|
||||
public string TRUSR { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Web;
|
||||
using System.ComponentModel;
|
||||
|
||||
/// <summary>
|
||||
/// CompanyDAC 的摘要描述
|
||||
/// </summary>
|
||||
[DataObject]
|
||||
public class CompanyDAC
|
||||
{
|
||||
private List<CompanyItem> items;
|
||||
private static CompanyDAC _staticInstance = null;
|
||||
|
||||
public CompanyDAC()
|
||||
{
|
||||
items = new List<CompanyItem>();
|
||||
items.Add(new CompanyItem("", "(請選擇)", "(請選擇)"));
|
||||
items.Add(new CompanyItem("TY", "新譽管理有限公司", "新譽"));
|
||||
items.Add(new CompanyItem("JY", "展譽職涯管理顧問有限公司", "展譽"));
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public List<CompanyItem> SelectAll()
|
||||
{
|
||||
return items;
|
||||
}
|
||||
|
||||
private string FindCompanyName(string companyId)
|
||||
{
|
||||
foreach (CompanyItem item in items)
|
||||
{
|
||||
if (item.CompanyId.CompareTo(companyId) == 0)
|
||||
return item.CompanyName;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private string FindCompanyShortName(string companyId)
|
||||
{
|
||||
foreach (CompanyItem item in items)
|
||||
{
|
||||
if (item.CompanyId.CompareTo(companyId) == 0)
|
||||
return item.ShortName;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static string GetCompanyName(string companyId)
|
||||
{
|
||||
if (_staticInstance == null)
|
||||
_staticInstance = new CompanyDAC();
|
||||
return _staticInstance.FindCompanyName(companyId);
|
||||
}
|
||||
|
||||
public static string GetCompanyShortName(string companyId)
|
||||
{
|
||||
if (_staticInstance == null)
|
||||
_staticInstance = new CompanyDAC();
|
||||
return _staticInstance.FindCompanyShortName(companyId);
|
||||
}
|
||||
}
|
||||
|
||||
public class CompanyItem
|
||||
{
|
||||
public CompanyItem(string companyId, string companyName, string shortName)
|
||||
{
|
||||
this.CompanyId = companyId;
|
||||
this.CompanyName = companyName;
|
||||
this.ShortName = shortName;
|
||||
}
|
||||
|
||||
[DataObjectField(true)]
|
||||
public string CompanyId
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[DataObjectField(false)]
|
||||
public string CompanyName
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[DataObjectField(false)]
|
||||
public string ShortName
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,143 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.Data.Common;
|
||||
using Wellan.Common;
|
||||
using Wellan.Data;
|
||||
|
||||
/// <summary>
|
||||
/// Summary description for Login
|
||||
/// </summary>
|
||||
public class LoginBPAP
|
||||
{
|
||||
private string _userId = "";
|
||||
private string _password = "";
|
||||
private string _userName = "";
|
||||
private string _errMessage = "";
|
||||
private string _userLang = "";
|
||||
private bool _noPassword = false;
|
||||
|
||||
public LoginBPAP()
|
||||
{
|
||||
}
|
||||
|
||||
public string UserId
|
||||
{
|
||||
get
|
||||
{
|
||||
return _userId;
|
||||
}
|
||||
set
|
||||
{
|
||||
_userId = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string Password
|
||||
{
|
||||
get
|
||||
{
|
||||
return _password;
|
||||
}
|
||||
set
|
||||
{
|
||||
_password = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string UserName
|
||||
{
|
||||
get
|
||||
{
|
||||
return _userName;
|
||||
}
|
||||
}
|
||||
|
||||
public string ErrorMessage
|
||||
{
|
||||
get
|
||||
{
|
||||
return _errMessage;
|
||||
}
|
||||
}
|
||||
|
||||
public bool NoPassword
|
||||
{
|
||||
get
|
||||
{
|
||||
return _noPassword;
|
||||
}
|
||||
}
|
||||
|
||||
public string UserLang
|
||||
{
|
||||
get
|
||||
{
|
||||
return _userLang;
|
||||
}
|
||||
set
|
||||
{
|
||||
_userLang = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得是否登入成功
|
||||
/// </summary>
|
||||
/// <returns>登入成功與否。若回傳 false,錯誤訊息將儲存在 ErrorMessage 屬性中</returns>
|
||||
public bool GetResult()
|
||||
{
|
||||
WConnectionString.ConnectionConfigFile = WConfig.GetConnectionConfig();
|
||||
string ConnName = WConfig.GetConnectionConfigName();
|
||||
string ConnStr = WConnectionString.GetConnectionString(ConnName);
|
||||
string ConnType = WConnectionString.GetConnectionType(ConnName);
|
||||
|
||||
WQuery Query = new WQuery(ConnType);
|
||||
DbConnection conn = Query.NewConnection(ConnStr);
|
||||
DbCommand cmd = Query.NewCommand("SELECT BPENO, BPNME, BPPWD FROM BPAP WHERE BPENO=@BPENO");
|
||||
cmd.Parameters.Add(Query.NewParameter("@BPENO", _userId));
|
||||
DataTable rs = Query.Select(conn, cmd);
|
||||
_noPassword = false;
|
||||
|
||||
if (rs.Rows.Count == 0)
|
||||
{
|
||||
_errMessage = WStringTable.GetInstance().GetString(_userLang, "LOGIN.NOUSERID");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
string pwd1 = rs.Rows[0]["BPPWD"].ToString();
|
||||
string pwd2 = WGuard1.KeyDec(pwd1);
|
||||
|
||||
if (pwd1.CompareTo("\u007f\u007f\u007f\u007f") == 0)
|
||||
{
|
||||
_noPassword = true;
|
||||
pwd2 = "";
|
||||
}
|
||||
|
||||
if (_password.CompareTo(pwd2) != 0)
|
||||
{
|
||||
_errMessage = WStringTable.GetInstance().GetString(_userLang, "LOGIN.WRONGPASSWORD");
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
if (rs.Rows[0]["BPEDY"] != DBNull.Value)
|
||||
{
|
||||
_errMessage = WStringTable.GetInstance().GetString(_userLang, "LOGIN.NORIGHT");
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
_errMessage = "";
|
||||
_userName = rs.Rows[0]["BPNME"].ToString();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.Data.Common;
|
||||
using Wellan.Common;
|
||||
using Wellan.Data;
|
||||
|
||||
/// <summary>
|
||||
/// Summary description for Login
|
||||
/// </summary>
|
||||
public class LoginBPSN
|
||||
{
|
||||
private string _userId = "";
|
||||
private string _password = "";
|
||||
private string _userName = "";
|
||||
private string _errMessage = "";
|
||||
private string _userLang = "";
|
||||
private bool _noPassword = false;
|
||||
|
||||
public LoginBPSN()
|
||||
{
|
||||
}
|
||||
|
||||
public string UserId
|
||||
{
|
||||
get
|
||||
{
|
||||
return _userId;
|
||||
}
|
||||
set
|
||||
{
|
||||
_userId = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string Password
|
||||
{
|
||||
get
|
||||
{
|
||||
return _password;
|
||||
}
|
||||
set
|
||||
{
|
||||
_password = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string UserName
|
||||
{
|
||||
get
|
||||
{
|
||||
return _userName;
|
||||
}
|
||||
}
|
||||
|
||||
public string ErrorMessage
|
||||
{
|
||||
get
|
||||
{
|
||||
return _errMessage;
|
||||
}
|
||||
}
|
||||
|
||||
public bool NoPassword
|
||||
{
|
||||
get
|
||||
{
|
||||
return _noPassword;
|
||||
}
|
||||
}
|
||||
|
||||
public string UserLang
|
||||
{
|
||||
get
|
||||
{
|
||||
return _userLang;
|
||||
}
|
||||
set
|
||||
{
|
||||
_userLang = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得是否登入成功
|
||||
/// </summary>
|
||||
/// <returns>登入成功與否。若回傳 false,錯誤訊息將儲存在 ErrorMessage 屬性中</returns>
|
||||
public bool GetResult()
|
||||
{
|
||||
try
|
||||
{
|
||||
WConnectionString.ConnectionConfigFile = WConfig.GetConnectionConfig();
|
||||
string ConnName = WConfig.GetConnectionConfigName();
|
||||
string ConnStr = WConnectionString.GetConnectionString(ConnName);
|
||||
string ConnType = WConnectionString.GetConnectionType(ConnName);
|
||||
|
||||
WQuery Query = new WQuery(ConnType);
|
||||
DbConnection conn = Query.NewConnection(ConnStr);
|
||||
DbCommand cmd = Query.NewCommand("SELECT BPENO, BPNME, BPEDY, BPAWD FROM BPSNView WHERE BPENO=@BPENO");
|
||||
cmd.Parameters.Add(Query.NewParameter("@BPENO", _userId));
|
||||
DataTable rs = Query.Select(conn, cmd);
|
||||
_noPassword = false;
|
||||
|
||||
if (rs.Rows.Count == 0)
|
||||
{
|
||||
_errMessage = WStringTable.GetInstance().GetString(_userLang, "LOGIN.NOUSERID");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
string pwd1 = rs.Rows[0]["BPAWD"].ToString();
|
||||
string pwd2 = WGuard1.KeyDec(pwd1);
|
||||
|
||||
if (pwd1.CompareTo("\u007f\u007f\u007f\u007f") == 0)
|
||||
{
|
||||
_noPassword = true;
|
||||
pwd2 = "";
|
||||
}
|
||||
|
||||
if (_password.CompareTo(pwd2) != 0)
|
||||
{
|
||||
_errMessage = WStringTable.GetInstance().GetString(_userLang, "LOGIN.WRONGPASSWORD");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (rs.Rows[0]["BPEDY"] != DBNull.Value)
|
||||
{
|
||||
_errMessage = WStringTable.GetInstance().GetString(_userLang, "LOGIN.NORIGHT");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
_errMessage = "";
|
||||
_userName = rs.Rows[0]["BPNME"].ToString();
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
_errMessage = "系統忙碌中,請稍後再試";
|
||||
_userName = "";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.ComponentModel;
|
||||
|
||||
/// <summary>
|
||||
/// ProjectBranchGroupDAC 的摘要描述
|
||||
/// </summary>
|
||||
[DataObject]
|
||||
public class ProjectBranchGroupDAC : Wellan.Data.WDAC
|
||||
{
|
||||
public ProjectBranchGroupDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public ProjectBranchGroupDAC(Wellan.Data.WQuery query): base(query)
|
||||
{
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public List<ProjectBranchGroupItem> SelectByProject(string projectID)
|
||||
{
|
||||
var cmd = Query.NewCommand(
|
||||
@"SELECT SELECT A.ProjectID, A.BranchID, B.BSSCR BranchName, A.GroupID
|
||||
FROM ProjectBranchGroup A
|
||||
LEFT JOIN BCLS B ON A.BranchID = B.BSCLS AND B.BSPAR='BPSNBRH'
|
||||
WHERE A.ProjectID=@ProjectID ORDER BY A.GroupID, A.BranchID");
|
||||
AddParam(cmd, "ProjectID", projectID);
|
||||
return Query.Select<ProjectBranchGroupItem>(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public void DeleteByProject(string projectID)
|
||||
{
|
||||
var cmd = Query.NewCommand(@"DELETE FROM ProjectBranchGroup WHERE ProjectID=@ProjectID");
|
||||
AddParam(cmd, "ProjectID", projectID);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
||||
public void Insert(string projectID, string branchID, string groupID)
|
||||
{
|
||||
var cmd = Query.NewCommand(@"INSERT INTO ProjectBranchGroup (ProjectID, BranchID, GroupID) VALUES (@ProjectID, @BranchID, @GroupID)");
|
||||
AddParam(cmd, "ProjectID", projectID);
|
||||
AddParam(cmd, "BranchID", branchID);
|
||||
AddParam(cmd, "GroupID", groupID);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
public class ProjectBranchGroupItem
|
||||
{
|
||||
public string ProjectID { get; set; }
|
||||
public string BranchID { get; set; }
|
||||
public string BranchName { get; set; }
|
||||
public string GroupID { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,595 @@
|
||||
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; }
|
||||
}
|
||||
@@ -0,0 +1,280 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
|
||||
/// <summary>
|
||||
/// 補休補登以及沖補登
|
||||
/// </summary>
|
||||
[DataObject]
|
||||
public class RbsaDAC : Wellan.Data.WDAC
|
||||
{
|
||||
public RbsaDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public RbsaDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public RbsaDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable Select(string RBPYN)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
cmd.CommandText =
|
||||
@"SELECT RBREN, RBENO, RBPYN, RBDAT, RBTCT / 60 AS RBTCT, RBUST FROM RBSA
|
||||
WHERE RBPYN=@RBPYN
|
||||
ORDER BY RBENO, RBDAT";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RBPYN", RBPYN);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
||||
public void InsertOne(string RBENO, string RBPYN, DateTime RBDAT, int RBTCT, string TRUSR)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
cmd.CommandText =
|
||||
@"INSERT INTO RBSA
|
||||
(RBREN, RBENO, RBPYN, RBDAT, RBTCT, RBUST, TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@RBREN, @RBENO, @RBPYN, @RBDAT, @RBTCT, 0, GETDATE(), 'INSERT', @TRUSR)";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RBREN", NextRBREN(RBDAT));
|
||||
Query.AddParam(cmd, "RBENO", RBENO);
|
||||
Query.AddParam(cmd, "RBPYN", RBPYN);
|
||||
Query.AddParam(cmd, "RBDAT", RBDAT);
|
||||
Query.AddParam(cmd, "RBTCT", RBTCT * 60);
|
||||
Query.AddParam(cmd, "TRUSR", TRUSR);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
||||
public void UpdateOne(string OLD_RBREN, string RBENO, string RBPYN, DateTime RBDAT, int RBTCT, string TRUSR)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
cmd.CommandText =
|
||||
@"UPDATE RBSA
|
||||
SET TRDAT = GETDATE() ,
|
||||
TRMOD = 'UPDATE' ,
|
||||
TRUSR = @TRUSR ,
|
||||
RBENO = @RBENO ,
|
||||
RBPYN = @RBPYN ,
|
||||
RBDAT = @RBDAT ,
|
||||
RBTCT = @RBTCT
|
||||
WHERE RBREN = @RBREN";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "TRUSR", TRUSR);
|
||||
Query.AddParam(cmd, "RBENO", RBENO);
|
||||
Query.AddParam(cmd, "RBPYN", RBPYN);
|
||||
Query.AddParam(cmd, "RBDAT", RBDAT);
|
||||
Query.AddParam(cmd, "RBTCT", RBTCT * 60);
|
||||
Query.AddParam(cmd, "RBREN", OLD_RBREN);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public void DeleteOne(string OLD_RBREN)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
cmd.CommandText =
|
||||
@"DELETE FROM RBSA
|
||||
WHERE RBREN = @RBREN";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RBREN", OLD_RBREN);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
public string NextRBREN(DateTime RBDAT)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
cmd.CommandText =
|
||||
@"DECLARE @MAXRBREN NVARCHAR(10)
|
||||
DECLARE @YYMM NVARCHAR(6)
|
||||
DECLARE @SERIAL NVARCHAR(4)
|
||||
SELECT @MAXRBREN = ISNULL(MAX(RBREN), @RBREN1) FROM RBSA WHERE RBREN > @RBREN1 AND RBREN <= @RBREN2
|
||||
SET @YYMM = SUBSTRING(@MAXRBREN, 1, 6)
|
||||
SET @SERIAL = SUBSTRING(@MAXRBREN, 7, 4)
|
||||
SELECT @YYMM + RIGHT('0000' + CAST(CAST(@SERIAL AS INT) + 1 AS NVARCHAR(4)), 4)";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RBREN1", RBDAT.ToString("yyyyMM", WGuard1.InvariantCulture) + "0000");
|
||||
Query.AddParam(cmd, "RBREN2", RBDAT.ToString("yyyyMM", WGuard1.InvariantCulture) + "9999");
|
||||
return Query.ExecuteScalar(cmd).ToString();
|
||||
}
|
||||
|
||||
/// <param name="rbeno">員工編號</param>
|
||||
/// <param name="rpdat">請假日期</param>
|
||||
/// <returns></returns>
|
||||
public int Get可用補休(string rbeno, DateTime rpdat)
|
||||
{
|
||||
// 取得員工在請假日期所在專案的補休期限設定
|
||||
int otd = new GetData(Query).GetBPOTD_DATE_BPENO(rpdat, rbeno);
|
||||
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = @"
|
||||
SELECT SUM(RBTCT - ISNULL(RBUST, 0))
|
||||
FROM RBSA
|
||||
WHERE RBENO = @RBENO
|
||||
AND RBDAT >= @RBDAT
|
||||
AND (RBUST IS NULL OR RBUST<RBTCT)
|
||||
AND RBDAT < @TODAY -- 20160429 增加加班日期需小於今天的條件
|
||||
AND RBDAT >= dbo.BPSDY(@RBENO) -- 加班日期大於到職日的條件
|
||||
";
|
||||
|
||||
AddParam(cmd, "RBENO", rbeno);
|
||||
AddParam(cmd, "RBDAT", rpdat.AddMonths(-otd));
|
||||
AddParam(cmd, "TODAY", DateTime.UtcNow.AddHours(8).Date);
|
||||
return WDAC.GetInt32Value(Query.ExecuteScalar(cmd));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 沖補休補登
|
||||
/// </summary>
|
||||
/// <param name="tran">要參加的交易</param>
|
||||
/// <param name="rbren">請假單號</param>
|
||||
/// <param name="rbeno">員工編號</param>
|
||||
/// <param name="rbdat">請假日期</param>
|
||||
/// <param name="rbtct">請假時數</param>
|
||||
/// <param name="備註">補休備註</param>
|
||||
/// <returns>剩餘時數</returns>
|
||||
public int 沖補休(DbTransaction tran, string rbren, string rbeno, DateTime rbdat, int rbtct, out string 備註)
|
||||
{
|
||||
備註 = "";
|
||||
|
||||
// 取得員工在請假日期所在專案的補休期限設定
|
||||
int otd = new GetData(Query).GetBPOTD_DATE_BPENO(rbdat, rbeno);
|
||||
|
||||
// 取出可沖補休補登單
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT RBREN, RBENO, RBPYN, RBDAT, RBTCT, RBUST
|
||||
FROM RBSA
|
||||
WHERE RBENO = @RBENO
|
||||
AND RBDAT >= @RBDAT -- 補休6個月之內有效
|
||||
AND RBDAT >= dbo.BPSDY(@RBENO) -- 到職日之後
|
||||
AND RBDAT < @TODAY -- 今天之前
|
||||
AND (RBUST IS NULL OR RBUST<RBTCT)
|
||||
ORDER BY RBDAT, RBREN";
|
||||
AddParam(cmd, "RBENO", rbeno);
|
||||
AddParam(cmd, "RBDAT", rbdat.AddMonths(-otd));
|
||||
AddParam(cmd, "TODAY", DateTime.UtcNow.AddHours(8).Date);
|
||||
DataTable data = Query.Select(cmd, tran);
|
||||
|
||||
// 準備新增補休補登沖帳檔 SQL
|
||||
DbCommand cmdInsertRbsb = Query.NewCommand();
|
||||
cmdInsertRbsb.CommandText =
|
||||
@"INSERT INTO RBSB
|
||||
(RBREN, RBREX, RBTCT, TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@RBREN, @RBREX, @RBTCT, GETDATE(), 'INSERT', @TRUSR)";
|
||||
|
||||
// 準備回填已沖時數 SQL
|
||||
DbCommand cmdUpdateRbsa = Query.NewCommand();
|
||||
cmdUpdateRbsa.CommandText =
|
||||
@"UPDATE RBSA
|
||||
SET RBUST = (SELECT SUM(RBTCT) FROM RBSB WHERE RBREX=RBSA.RBREN)
|
||||
WHERE RBREN = @RBREN";
|
||||
|
||||
// 用來儲存要重新加總的 RBSA 的 RBREN,以免 RBSA 重複 UPDATE 被 LOCK
|
||||
List<string> RbsaRbren = new List<string>();
|
||||
|
||||
foreach (DataRow row in data.Rows)
|
||||
{
|
||||
// 一筆一筆的寫沖銷紀錄
|
||||
string rbren1 = WDAC.GetStringValue(row["RBREN"]);
|
||||
int rbtct1 = WDAC.GetInt32Value(row["RBTCT"]);
|
||||
int rbust1 = WDAC.GetInt32Value(row["RBUST"]);
|
||||
DateTime rbdat1 = WDAC.GetDateTimeValue(row["RBDAT"]);
|
||||
|
||||
int tct = rbtct > rbtct1 - rbust1 ? rbtct1 - rbust1 : rbtct;
|
||||
rbtct -= tct;
|
||||
|
||||
// 新增補休補登沖帳檔
|
||||
AddParam(cmdInsertRbsb, "RBREN", rbren);
|
||||
AddParam(cmdInsertRbsb, "RBREX", rbren1);
|
||||
AddParam(cmdInsertRbsb, "RBTCT", tct);
|
||||
AddParam(cmdInsertRbsb, "TRUSR", rbeno);
|
||||
Query.ExecuteNonQuery(tran.Connection, tran, cmdInsertRbsb);
|
||||
|
||||
備註 += String.Format("{0:MM/dd}-{1}、", rbdat1, tct / 60);
|
||||
|
||||
if (!RbsaRbren.Contains(rbren1))
|
||||
RbsaRbren.Add(rbren1);
|
||||
|
||||
if (rbtct <= 0)
|
||||
break;
|
||||
}
|
||||
|
||||
// 重新加總 RBSA 的已用時數
|
||||
foreach (string rbren1 in RbsaRbren)
|
||||
{
|
||||
AddParam(cmdUpdateRbsa, "RBREN", rbren1);
|
||||
Query.ExecuteNonQuery(tran.Connection, tran, cmdUpdateRbsa);
|
||||
}
|
||||
|
||||
// 回傳未沖完的時數
|
||||
return rbtct;
|
||||
}
|
||||
|
||||
public void 取消沖補休(DbTransaction tran, string rbren)
|
||||
{
|
||||
// 取出本張單據沖銷的紀錄
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = @"SELECT RBREN, RBREX, RBTCT FROM RBSB WHERE RBREN=@RBREN";
|
||||
AddParam(cmd, "RBREN", rbren);
|
||||
DataTable data = Query.Select(cmd, tran);
|
||||
|
||||
DbCommand cmdDeleteRbsb = Query.NewCommand();
|
||||
cmdDeleteRbsb.CommandText =
|
||||
@"DELETE FROM RBSB
|
||||
WHERE RBREN = @RBREN AND RBREX = @RBREX";
|
||||
|
||||
DbCommand cmdUpdateRbsa = Query.NewCommand();
|
||||
cmdUpdateRbsa.CommandText =
|
||||
@"UPDATE RBSA
|
||||
SET RBUST = (SELECT SUM(RBTCT) FROM RBSB WHERE RBREX=RBSA.RBREN)
|
||||
WHERE RBREN = @RBREN";
|
||||
|
||||
// 用來儲存要重新加總的 RBSA 的 RBREN,以免 RBSA 重複 UPDATE 被 LOCK
|
||||
List<string> RbsaRbren = new List<string>();
|
||||
|
||||
// 還原被沖銷單據的被沖銷時數
|
||||
foreach (DataRow row in data.Rows)
|
||||
{
|
||||
string rprex1 = WDAC.GetStringValue(row["RBREX"]);
|
||||
int rptct1 = WDAC.GetInt32Value(row["RBTCT"]);
|
||||
|
||||
AddParam(cmdDeleteRbsb, "RBREN", rbren);
|
||||
AddParam(cmdDeleteRbsb, "RBREX", rprex1);
|
||||
Query.ExecuteNonQuery(tran.Connection, tran, cmdDeleteRbsb);
|
||||
|
||||
if (!RbsaRbren.Contains(rprex1))
|
||||
RbsaRbren.Add(rprex1);
|
||||
}
|
||||
|
||||
// 重新加總 RBSA 的已用時數
|
||||
foreach (string rbren1 in RbsaRbren)
|
||||
{
|
||||
AddParam(cmdUpdateRbsa, "RBREN", rbren1);
|
||||
Query.ExecuteNonQuery(tran.Connection, tran, cmdUpdateRbsa);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,290 @@
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using Wellan.Common;
|
||||
using Wellan.Data;
|
||||
|
||||
/// <summary>
|
||||
/// 打卡資料檔
|
||||
/// </summary>
|
||||
public class RcrdDAC : Wellan.Data.WDAC
|
||||
{
|
||||
public const string T01_上班 = "01";
|
||||
public const string T02_下班 = "02";
|
||||
public const string T03_中午休息 = "03";
|
||||
public const string T04_下午上班 = "04";
|
||||
public const string T05_加班上班 = "05";
|
||||
public const string T06_加班下班 = "06";
|
||||
public const string T07_出差離開 = "07";
|
||||
public const string T08_出差返回 = "08";
|
||||
|
||||
|
||||
public RcrdDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public RcrdDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public RcrdDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 讀取今天某人員的打卡資料
|
||||
/// </summary>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
public DataTable ReadToday(string rcusr, DateTime date)
|
||||
{
|
||||
return ReadByDate(rcusr, date);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 讀取某天某人員的打卡資料
|
||||
/// </summary>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
public DataTable ReadByDate(string rcusr, DateTime date)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT RCDAT, RCUSR, RCC01, RCC02, RCC03, RCC04, RCC05, RCC06, RCC07, RCC08,
|
||||
RCP01, RCP02, RCP03, RCP04, RCP05, RCP06, RCP07, RCP08
|
||||
FROM RCRD WHERE RCDAT = @RCDAT AND RCUSR = @RCUSR ";
|
||||
Query.AddParam(cmd, "RCDAT", date);
|
||||
Query.AddParam(cmd, "RCUSR", rcusr);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 讀取日期區間某人員的打卡資料
|
||||
/// </summary>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
public DataTable SelectPeriod(string rcusr, DateTime rcdat1, DateTime rcdat2)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT RCDAT, RCUSR, RCC01, RCC02, RCC03, RCC04, RCC05, RCC06, RCC07, RCC08,
|
||||
RCP01, RCP02, RCP03, RCP04, RCP05, RCP06, RCP07, RCP08
|
||||
FROM RCRD WHERE RCUSR = @RCUSR AND RCDAT >= @RCDAT1 AND RCDAT < @RCDAT2";
|
||||
Query.AddParam(cmd, "RCUSR", rcusr);
|
||||
Query.AddParam(cmd, "RCDAT1", rcdat1.Date);
|
||||
Query.AddParam(cmd, "RCDAT2", rcdat2.Date.AddDays(1));
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 檢查某一天某人員是否有打卡資料
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
/// <returns></returns>
|
||||
public bool CheckExists(DateTime rcdat, string rcusr)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = "SELECT COUNT(1) FROM RCRD WHERE RCDAT = @RCDAT AND RCUSR = @RCUSR ";
|
||||
Query.AddParam(cmd, "RCDAT", rcdat.Date);
|
||||
Query.AddParam(cmd, "RCUSR", rcusr);
|
||||
int c = WQuery.GetInt32Value(Query.ExecuteScalar(cmd));
|
||||
return c > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打卡
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
/// <param name="time">時間</param>
|
||||
/// <param name="fieldName">打卡欄位</param>
|
||||
/// <param name="補打">是否為補打卡</param>
|
||||
private void Punch(DateAndTime rcdat, string rcusr, string ip, string fieldName, bool 補打)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
var d = ReadByDate(rcusr, rcdat.CardDate);
|
||||
|
||||
if (d.Rows.Count == 0)
|
||||
{
|
||||
cmd.CommandText =
|
||||
String.Format(@"INSERT INTO RCRD
|
||||
(TRDAT, TRMOD, TRUSR, RCDAT, RCUSR, RCC{0}, RCP{0}, RCZ{0})
|
||||
VALUES
|
||||
(GETDATE(), 'INSERT', @TRUSR, @RCDAT, @RCUSR, @TIME, @IP, @TIMEZONE)", fieldName);
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "TRUSR", rcusr);
|
||||
Query.AddParam(cmd, "RCDAT", rcdat.CardDate);
|
||||
Query.AddParam(cmd, "RCUSR", rcusr);
|
||||
Query.AddParam(cmd, "TIME", rcdat.LocalTime);
|
||||
Query.AddParam(cmd, "IP", ip);
|
||||
Query.AddParam(cmd, "TIMEZONE", rcdat.TimezoneName);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (String.IsNullOrEmpty(WDAC.GetStringValue(d.Rows[0]["RCC" + fieldName])))
|
||||
{
|
||||
cmd.CommandText =
|
||||
String.Format(@"UPDATE RCRD
|
||||
SET TRDAT = GETDATE() ,
|
||||
TRMOD = 'UPDATE' ,
|
||||
TRUSR = @TRUSR ,
|
||||
RCC{0} = @TIME ,
|
||||
RCP{0} = @IP ,
|
||||
RCZ{0} = @TIMEZONE
|
||||
WHERE RCDAT = @RCDAT
|
||||
AND RCUSR = @RCUSR", fieldName);
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "TRUSR", rcusr);
|
||||
Query.AddParam(cmd, "TIME", rcdat.LocalTime);
|
||||
Query.AddParam(cmd, "IP", ip);
|
||||
Query.AddParam(cmd, "TIMEZONE", rcdat.TimezoneName);
|
||||
Query.AddParam(cmd, "RCDAT", rcdat.CardDate);
|
||||
Query.AddParam(cmd, "RCUSR", rcusr);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除打卡
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
/// <param name="fieldName">打卡欄位</param>
|
||||
private void Clear(DateTime rcdat, string rcusr, string fieldName)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
cmd.CommandText =
|
||||
String.Format(@"UPDATE RCRD
|
||||
SET TRDAT = GETDATE() ,
|
||||
TRMOD = 'UPDATE' ,
|
||||
TRUSR = @TRUSR ,
|
||||
RCC{0} = NULL ,
|
||||
RCP{0} = NULL
|
||||
WHERE RCDAT = @RCDAT
|
||||
AND RCUSR = @RCUSR", fieldName);
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "TRUSR", rcusr);
|
||||
Query.AddParam(cmd, "RCDAT", rcdat);
|
||||
Query.AddParam(cmd, "RCUSR", rcusr);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打上班卡
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
/// <param name="time">時間</param>
|
||||
/// <param name="補打"></param>
|
||||
public void PunchRCC01(DateAndTime rcdat, string rcusr, string ip, bool 補打)
|
||||
{
|
||||
Punch(rcdat, rcusr, ip, T01_上班, 補打);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除上班卡
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
public void ClearRCC01(DateTime rcdat, string rcusr)
|
||||
{
|
||||
Clear(rcdat, rcusr, T01_上班);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打下班卡
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
/// <param name="time">時間</param>
|
||||
public void PunchRCC02(DateAndTime rcdat, string rcusr, string ip, bool 補打)
|
||||
{
|
||||
Punch(rcdat, rcusr, ip, T02_下班, 補打);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除下班卡
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
public void ClearRCC02(DateTime rcdat, string rcusr)
|
||||
{
|
||||
Clear(rcdat, rcusr, T02_下班);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打出差外出打卡
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
/// <param name="time">時間</param>
|
||||
public void PunchRCC07(DateAndTime rcdat, string rcusr, string ip, bool 補打)
|
||||
{
|
||||
Punch(rcdat, rcusr, ip, T07_出差離開, 補打);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除出差外出打卡
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
public void ClearRCC07(DateTime rcdat, string rcusr)
|
||||
{
|
||||
Clear(rcdat, rcusr, T07_出差離開);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打出差返回打卡
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
/// <param name="time">時間</param>
|
||||
public void PunchRCC08(DateAndTime rcdat, string rcusr, string ip, bool 補打)
|
||||
{
|
||||
Punch(rcdat, rcusr, ip, T08_出差返回, 補打);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除出差返回打卡
|
||||
/// </summary>
|
||||
/// <param name="rcdat">日期</param>
|
||||
/// <param name="rcusr">人員編號</param>
|
||||
public void ClearRCC08(DateTime rcdat, string rcusr)
|
||||
{
|
||||
Clear(rcdat, rcusr, T08_出差返回);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得某員工某日期往前6天之內的打卡天數
|
||||
/// </summary>
|
||||
/// <param name="rcdat"></param>
|
||||
/// <param name="rcusr"></param>
|
||||
/// <returns></returns>
|
||||
public int PunchDaysIn7Days(DateTime rcdat, string rcusr, bool includeLastDay)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = string.Format(@"SELECT COUNT(1) FROM RCRD
|
||||
WHERE RCUSR = @RCUSR
|
||||
AND RCDAT >= @RCDAT1
|
||||
AND RCDAT {0} @RCDAT2
|
||||
AND (RCC01 IS NOT NULL AND RCC01 <> ''
|
||||
OR RCC02 IS NOT NULL AND RCC02 <> ''
|
||||
OR RCC07 IS NOT NULL AND RCC07 <> ''
|
||||
OR RCC08 IS NOT NULL AND RCC08 <> '')", (includeLastDay ? "<=": "<"));
|
||||
Query.AddParam(cmd, "RCUSR", rcusr);
|
||||
Query.AddParam(cmd, "RCDAT1", rcdat.Date.AddDays(-6));
|
||||
Query.AddParam(cmd, "RCDAT2", rcdat.Date);
|
||||
int c = WQuery.GetInt32Value(Query.ExecuteScalar(cmd));
|
||||
return c;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using System.Transactions;
|
||||
using System.ComponentModel;
|
||||
|
||||
/// <summary>
|
||||
/// RlogDAC 的摘要描述
|
||||
/// </summary>
|
||||
public class RlogDAC : Wellan.Data.WDAC
|
||||
{
|
||||
//private string _select =
|
||||
// @" SELECT RLDAT, RLTIM, RLUSR, RLPRG, RLCIP, RLCNT, TRDAT, TRMOD, TRUSR FROM RLOG ";
|
||||
|
||||
private string _insert =
|
||||
@"INSERT INTO RLOG
|
||||
(RLDAT, RLTIM, RLUSR, RLPRG, RLCIP, RLCNT, TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@RLDAT, @RLTIM, @RLUSR, @RLPRG, @RLCIP, @RLCNT, GETDATE(), 'INSERT', @TRUSR)";
|
||||
|
||||
public RlogDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public RlogDAC(WQuery query)
|
||||
: this()
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
public RlogDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public void InsertOne(string RLUSR, string RLPRG, string RLCIP, string RLCNT)
|
||||
{
|
||||
DbCommand cmdInsert = Query.NewCommand(_insert);
|
||||
Query.AddParam(cmdInsert, "RLDAT", DateTime.UtcNow.AddHours(8).Date);
|
||||
Query.AddParam(cmdInsert, "RLTIM", DateTime.UtcNow.AddHours(8).ToString("HH:mm:ss"));
|
||||
Query.AddParam(cmdInsert, "RLUSR", RLUSR);
|
||||
Query.AddParam(cmdInsert, "RLPRG", RLPRG);
|
||||
Query.AddParam(cmdInsert, "RLCIP", RLCIP);
|
||||
Query.AddParam(cmdInsert, "RLCNT", RLCNT);
|
||||
Query.AddParam(cmdInsert, "TRUSR", RLUSR);
|
||||
Query.ExecuteNonQuery(cmdInsert);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,292 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using System.Transactions;
|
||||
using System.ComponentModel;
|
||||
|
||||
/// <summary>
|
||||
/// 人員差勤簽核檔
|
||||
/// </summary>
|
||||
public class RpabDAC : Wellan.Data.WDAC
|
||||
{
|
||||
private string _select =
|
||||
@" SELECT RPREN, RPANO, RPAPN, RPENO, RPDAT, RPAPP, RPDOC, TRDAT, TRMOD, TRUSR FROM RPAB ";
|
||||
private string _insert =
|
||||
@"INSERT INTO dbo.RPAB
|
||||
(RPREN, RPANO, RPAPN, RPENO, RPDAT, RPAPP, RPDOC, TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@RPREN, @RPANO, @RPAPN, @RPENO, NULL, NULL, NULL, GETDATE(), 'INSERT', @TRUSR)";
|
||||
private string _update1 =
|
||||
@"UPDATE dbo.RPAB SET
|
||||
RPDAT = @RPDAT,
|
||||
RPAPP = @RPAPP,
|
||||
RPDOC = @RPDOC,
|
||||
TRDAT = GETDATE(),
|
||||
TRMOD = 'UPDATE',
|
||||
TRUSR = @TRUSR
|
||||
WHERE RPREN = @OLD_RPREN
|
||||
AND RPANO = @OLD_RPANO";
|
||||
private string _update2 =
|
||||
@"UPDATE dbo.RPAB SET
|
||||
RPENO = @RPENO,
|
||||
RPDAT = NULL,
|
||||
RPAPP = NULL,
|
||||
RPDOC = NULL,
|
||||
TRDAT = GETDATE(),
|
||||
TRMOD = 'UPDATE',
|
||||
TRUSR = @TRUSR
|
||||
WHERE RPREN = @OLD_RPREN
|
||||
AND RPANO = @OLD_RPANO";
|
||||
private string _delete =
|
||||
@"DELETE FROM dbo.RPAB
|
||||
WHERE RPREN = @OLD_RPREN
|
||||
AND RPANO = @OLD_RPANO";
|
||||
|
||||
public RpabDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public RpabDAC(WQuery query)
|
||||
: this()
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
public RpabDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public DataTable SelectRpren(string RPREN)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _select + " WHERE RPREN=@RPREN ";
|
||||
AddParam(cmd, "RPREN", RPREN);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
public DataTable SelectOne(string RPREN, string RPANO)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _select + " WHERE RPREN=@RPREN AND RPANO=@RPANO ";
|
||||
AddParam(cmd, "RPREN", RPREN);
|
||||
AddParam(cmd, "RPANO", RPANO);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
public DataTable SelectOne(DbTransaction tran, string RPREN, string RPANO)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _select + " WHERE RPREN=@RPREN AND RPANO=@RPANO ";
|
||||
AddParam(cmd, "RPREN", RPREN);
|
||||
AddParam(cmd, "RPANO", RPANO);
|
||||
return Query.Select(cmd, tran);
|
||||
}
|
||||
|
||||
private string NextRPANO(string RPREN)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = "SELECT ISNULL(MAX(RPANO), '0') + 1 FROM RPAB WHERE RPREN=@RPREN AND RPANO <> 'D' ";
|
||||
AddParam(cmd, "RPREN", RPREN);
|
||||
string s;
|
||||
ExecuteScalar(cmd, out s);
|
||||
return s;
|
||||
}
|
||||
|
||||
private void InsertOne(DbTransaction tran, string RPREN, string RPAPN, string RPANO, string RPENO, object TRUSR)
|
||||
{
|
||||
if (string.IsNullOrEmpty(RPREN) || string.IsNullOrEmpty(RPAPN) || string.IsNullOrEmpty(RPANO) || string.IsNullOrEmpty(RPENO))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (SelectOne(RPREN, RPANO).Rows.Count > 0)
|
||||
{
|
||||
UpdateOne(tran, RPREN, RPANO, RPENO, TRUSR);
|
||||
}
|
||||
else
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _insert;
|
||||
AddParam(cmd, "RPREN", RPREN);
|
||||
AddParam(cmd, "RPANO", RPANO);
|
||||
AddParam(cmd, "RPAPN", RPAPN);
|
||||
AddParam(cmd, "RPENO", RPENO);
|
||||
AddParam(cmd, "TRUSR", TRUSR);
|
||||
Query.ExecuteNonQuery(tran.Connection, tran, cmd);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateOne(DbTransaction tran, string RPREN, string RPANO,
|
||||
object RPENO, object TRUSR)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _update2;
|
||||
AddParam(cmd, "RPENO", RPENO);
|
||||
AddParam(cmd, "TRUSR", TRUSR);
|
||||
AddParam(cmd, "OLD_RPREN", RPREN);
|
||||
AddParam(cmd, "OLD_RPANO", RPANO);
|
||||
Query.ExecuteNonQuery(tran.Connection, tran, cmd);
|
||||
}
|
||||
|
||||
private void UpdateOne(DbTransaction tran, string RPREN, string RPANO,
|
||||
object RPDAT, object RPAPP, object RPDOC, object TRUSR)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _update1;
|
||||
AddParam(cmd, "RPDAT", RPDAT);
|
||||
AddParam(cmd, "RPAPP", RPAPP);
|
||||
AddParam(cmd, "RPDOC", RPDOC);
|
||||
AddParam(cmd, "TRUSR", TRUSR);
|
||||
AddParam(cmd, "OLD_RPREN", RPREN);
|
||||
AddParam(cmd, "OLD_RPANO", RPANO);
|
||||
Query.ExecuteNonQuery(tran.Connection, tran, cmd);
|
||||
}
|
||||
|
||||
private void DeleteOne(DbTransaction tran, string RPREN, string RPANO)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _delete;
|
||||
AddParam(cmd, "OLD_RPREN", RPREN);
|
||||
AddParam(cmd, "OLD_RPANO", RPANO);
|
||||
Query.ExecuteNonQuery(tran.Connection, tran, cmd);
|
||||
}
|
||||
|
||||
public DataTable SelectLastOne(DbTransaction tran, string RPREN)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = "SELECT TOP 1 * FROM RPAB WHERE RPREN=@RPREN AND RPANO <> 'D' ORDER BY RPANO DESC";
|
||||
AddParam(cmd, "RPREN", RPREN);
|
||||
return Query.Select(cmd, tran);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 送簽
|
||||
/// </summary>
|
||||
/// <param name="RPREN">單號</param>
|
||||
/// <param name="RPENO">簽核人員</param>
|
||||
public void 送簽(DbTransaction tran, string RPREN, string RPAPN, string RPANO, string RPENO, string TRUSR)
|
||||
{
|
||||
InsertOne(tran, RPREN, RPAPN, RPANO, RPENO, TRUSR);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 抽單
|
||||
/// </summary>
|
||||
/// <param name="RPREN">單號</param>
|
||||
/// <param name="RPENO">簽核人員</param>
|
||||
public void 抽單(DbTransaction tran, string RPREN, string RPENO, string TRUSR)
|
||||
{
|
||||
InsertOne(tran, RPREN, "D", "D", RPENO, TRUSR);
|
||||
}
|
||||
|
||||
public string 取消抽單(DbTransaction tran, string RPREN, out string 前關關號,
|
||||
out DateTime 前關日期, out string 前關結果, out string 前關應簽)
|
||||
{
|
||||
DeleteOne(tran, RPREN, "D");
|
||||
DataTable t = SelectLastOne(tran, RPREN);
|
||||
if (t.Rows.Count > 0)
|
||||
{
|
||||
前關關號 = WDAC.GetStringValue(t.Rows[0]["RPANO"]);
|
||||
前關日期 = WDAC.GetDateTimeValue(t.Rows[0]["RPDAT"]);
|
||||
前關結果 = WDAC.GetStringValue(t.Rows[0]["RPAPP"]);
|
||||
前關應簽 = WDAC.GetStringValue(t.Rows[0]["RPAPN"]);
|
||||
return WDAC.GetStringValue(t.Rows[0]["RPENO"]);
|
||||
}
|
||||
else
|
||||
{
|
||||
前關關號 = "";
|
||||
前關日期 = new DateTime();
|
||||
前關結果 = "";
|
||||
前關應簽 = "";
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 核准
|
||||
/// </summary>
|
||||
/// <param name="RPREN">單號</param>
|
||||
/// <param name="RPANO">關卡</param>
|
||||
/// <param name="RPDAT">簽核日期</param>
|
||||
/// <param name="RPDOC">簽核備註</param>
|
||||
public void 核准(DbTransaction tran, string RPREN, string RPANO,
|
||||
DateTime RPDAT, string RPDOC, string TRUSR)
|
||||
{
|
||||
UpdateOne(tran, RPREN, RPANO, RPDAT, "Y", RPDOC, TRUSR);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 駁回
|
||||
/// </summary>
|
||||
/// <param name="RPREN">單號</param>
|
||||
/// <param name="RPENO">簽核人員</param>
|
||||
/// <param name="RPDAT">簽核日期</param>
|
||||
/// <param name="RPDOC">簽核備註</param>
|
||||
public void 不核准(DbTransaction tran, string RPREN, string RPANO,
|
||||
DateTime RPDAT, string RPDOC, string TRUSR)
|
||||
{
|
||||
UpdateOne(tran, RPREN, RPANO, RPDAT, "N", RPDOC, TRUSR);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取消本關簽核
|
||||
/// </summary>
|
||||
public void 取消本關(DbTransaction tran, string RPREN, string 本關, string TRUSR)
|
||||
{
|
||||
UpdateOne(tran, RPREN, 本關, DBNull.Value, DBNull.Value, DBNull.Value, TRUSR);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取消本關簽核,並退回上一關
|
||||
/// </summary>
|
||||
public string 退回上一關(DbTransaction tran, string RPREN, string 本關, string TRUSR)
|
||||
{
|
||||
// 抽單
|
||||
if (本關.CompareTo("D") == 0)
|
||||
{
|
||||
UpdateOne(tran, RPREN, "D", DBNull.Value, DBNull.Value, DBNull.Value, TRUSR);
|
||||
return "";
|
||||
}
|
||||
// 非抽單
|
||||
else
|
||||
{
|
||||
int i本關 = Convert.ToInt32(本關);
|
||||
if (i本關 > 1)
|
||||
{
|
||||
DeleteOne(tran, RPREN, 本關);
|
||||
UpdateOne(tran, RPREN, Convert.ToString(i本關 - 1), DBNull.Value, DBNull.Value, DBNull.Value, TRUSR);
|
||||
|
||||
DataTable t = SelectLastOne(tran, RPREN);
|
||||
if (t.Rows.Count > 0)
|
||||
return WDAC.GetStringValue(t.Rows[0]["RPENO"]);
|
||||
else
|
||||
return "";
|
||||
}
|
||||
else
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刪除某張單據的簽核資料
|
||||
/// </summary>
|
||||
/// <param name="RPREN"></param>
|
||||
public void Delete(DbTransaction tran, string RPREN)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"DELETE FROM dbo.RPAB
|
||||
WHERE RPREN = @OLD_RPREN";
|
||||
AddParam(cmd, "OLD_RPREN", RPREN);
|
||||
Query.ExecuteNonQuery(tran.Connection, tran, cmd);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using System.Transactions;
|
||||
using System.ComponentModel;
|
||||
|
||||
/// <summary>
|
||||
/// 出差費用檔
|
||||
/// </summary>
|
||||
[DataObject]
|
||||
public class RpadDAC : Wellan.Data.WDAC
|
||||
{
|
||||
private string _select =
|
||||
@"SELECT RPREN, RPITM, RPSTP, RPEDP, RPF01, RPF02, RPF03, RPF04, RPF05, RPF06, RPF07, RPF08,
|
||||
RPF09, RPF10, RPSUM, RPDAT, RPJOB, RPVCH, RPDOC, TRDAT, TRMOD, TRUSR
|
||||
FROM RPAD ";
|
||||
|
||||
public RpadDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public RpadDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public RpadDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectRpar(string rpren)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = _select + " WHERE RPREN=@RPREN ORDER BY RPITM";
|
||||
AddParam(cmd, "RPREN", rpren);
|
||||
return Query.Select(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
||||
public void InsertOne(string userId, string rpren, string rpstp, string rpedp, int rpf01, int rpf02, int rpf03, int rpf04,
|
||||
int rpf05, int rpf06, int rpf07, int rpf08, int rpf09, int rpf10, DateTime rpdat, string rpvch, string rpdoc)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"INSERT INTO RPAD
|
||||
(RPREN, RPITM, RPSTP, RPEDP, RPF01, RPF02, RPF03, RPF04, RPF05, RPF06, RPF07, RPF08, RPF09, RPF10, RPSUM, RPDAT, RPVCH, RPDOC, TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@RPREN, @RPITM, @RPSTP, @RPEDP, @RPF01, @RPF02, @RPF03, @RPF04, @RPF05, @RPF06, @RPF07, @RPF08, @RPF09, @RPF10, @RPSUM, @RPDAT, @RPVCH, @RPDOC, GETDATE(), 'INSERT', @TRUSR)";
|
||||
AddParam(cmd, "RPREN", rpren);
|
||||
AddParam(cmd, "RPITM", GetNextRpitm(rpren));
|
||||
AddParam(cmd, "RPSTP", rpstp);
|
||||
AddParam(cmd, "RPEDP", rpedp);
|
||||
AddParam(cmd, "RPF01", rpf01);
|
||||
AddParam(cmd, "RPF02", rpf02);
|
||||
AddParam(cmd, "RPF03", rpf03);
|
||||
AddParam(cmd, "RPF04", rpf04);
|
||||
AddParam(cmd, "RPF05", rpf05);
|
||||
AddParam(cmd, "RPF06", rpf06);
|
||||
AddParam(cmd, "RPF07", rpf07);
|
||||
AddParam(cmd, "RPF08", rpf08);
|
||||
AddParam(cmd, "RPF09", rpf09);
|
||||
AddParam(cmd, "RPF10", rpf10);
|
||||
AddParam(cmd, "RPSUM", rpf01 + rpf02 + rpf03 + rpf04 + rpf05 + rpf06 + rpf07 + rpf08 + rpf09 + rpf10);
|
||||
AddParam(cmd, "RPDAT", rpdat);
|
||||
AddParam(cmd, "RPVCH", rpvch);
|
||||
AddParam(cmd, "RPDOC", rpdoc);
|
||||
AddParam(cmd, "TRUSR", userId);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
|
||||
UpdateRpar(rpren);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
||||
public void UpdateOne(string userId, string rpren, int rpitm, string rpstp, string rpedp, int rpf01, int rpf02, int rpf03, int rpf04,
|
||||
int rpf05, int rpf06, int rpf07, int rpf08, int rpf09, int rpf10, DateTime rpdat, string rpvch, string rpdoc)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"UPDATE RPAD SET
|
||||
RPSTP = @RPSTP,
|
||||
RPEDP = @RPEDP,
|
||||
RPF01 = @RPF01,
|
||||
RPF02 = @RPF02,
|
||||
RPF03 = @RPF03,
|
||||
RPF04 = @RPF04,
|
||||
RPF05 = @RPF05,
|
||||
RPF06 = @RPF06,
|
||||
RPF07 = @RPF07,
|
||||
RPF08 = @RPF08,
|
||||
RPF09 = @RPF09,
|
||||
RPF10 = @RPF10,
|
||||
RPSUM = @RPSUM,
|
||||
RPDAT = @RPDAT,
|
||||
RPVCH = @RPVCH,
|
||||
RPDOC = @RPDOC,
|
||||
TRDAT = GETDATE(),
|
||||
TRMOD = 'UPDATE',
|
||||
TRUSR = @TRUSR
|
||||
WHERE RPREN = @RPREN
|
||||
AND RPITM = @RPITM";
|
||||
AddParam(cmd, "RPSTP", rpstp);
|
||||
AddParam(cmd, "RPEDP", rpedp);
|
||||
AddParam(cmd, "RPF01", rpf01);
|
||||
AddParam(cmd, "RPF02", rpf02);
|
||||
AddParam(cmd, "RPF03", rpf03);
|
||||
AddParam(cmd, "RPF04", rpf04);
|
||||
AddParam(cmd, "RPF05", rpf05);
|
||||
AddParam(cmd, "RPF06", rpf06);
|
||||
AddParam(cmd, "RPF07", rpf07);
|
||||
AddParam(cmd, "RPF08", rpf08);
|
||||
AddParam(cmd, "RPF09", rpf09);
|
||||
AddParam(cmd, "RPF10", rpf10);
|
||||
AddParam(cmd, "RPSUM", rpf01 + rpf02 + rpf03 + rpf04 + rpf05 + rpf06 + rpf07 + rpf08 + rpf09 + rpf10);
|
||||
AddParam(cmd, "RPDAT", rpdat);
|
||||
AddParam(cmd, "RPVCH", rpvch);
|
||||
AddParam(cmd, "RPDOC", rpdoc);
|
||||
AddParam(cmd, "TRUSR", userId);
|
||||
AddParam(cmd, "RPREN", rpren);
|
||||
AddParam(cmd, "RPITM", rpitm);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
|
||||
UpdateRpar(rpren);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public void DeleteOne(string rpren, int rpitm)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"DELETE FROM RPAD
|
||||
WHERE RPREN = @RPREN
|
||||
AND RPITM = @RPITM";
|
||||
AddParam(cmd, "RPREN", rpren);
|
||||
AddParam(cmd, "RPITM", rpitm);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
|
||||
UpdateRpar(rpren);
|
||||
}
|
||||
|
||||
public void DeleteByRpren(string rpren)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"DELETE FROM RPAD
|
||||
WHERE RPREN = @RPREN";
|
||||
AddParam(cmd, "RPREN", rpren);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
|
||||
UpdateRpar(rpren);
|
||||
}
|
||||
|
||||
private int GetNextRpitm(string rpren)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = @"SELECT ISNULL(MAX(RPITM), 0) + 1 FROM RPAD WHERE RPREN=@RPREN";
|
||||
AddParam(cmd, "RPREN", rpren);
|
||||
return WDAC.GetInt32Value(Query.ExecuteScalar(cmd));
|
||||
}
|
||||
|
||||
private void UpdateRpar(string rpren)
|
||||
{
|
||||
DbCommand cmd1 = Query.NewCommand();
|
||||
cmd1.CommandText =
|
||||
@"UPDATE RPAR
|
||||
SET RPFTR = (SELECT ISNULL(SUM(RPSUM), 0) FROM RPAD WHERE RPREN=@RPREN)
|
||||
WHERE RPREN=@RPREN";
|
||||
AddParam(cmd1, "RPREN", rpren);
|
||||
Query.ExecuteNonQuery(cmd1);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,439 @@
|
||||
//
|
||||
// 這個檔案是 RPSB 資料表的資料存取類別 檔案一
|
||||
// 請不要修改這個檔案,重新產生資料存取類別時,這個檔案會被覆蓋掉
|
||||
//
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using Wellan.Data;
|
||||
using System.Data.Common;
|
||||
using Wellan.Common;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
///<summary>
|
||||
/// RPSB 人員異動資料 資料存取類別
|
||||
///</summary>
|
||||
[DataObject]
|
||||
public class RpsbDAC : Wellan.Data.WDAC
|
||||
{
|
||||
private const string _tableName = "[RPSB]";
|
||||
private const string _allFields = "[RPENO], [RPITM], [RPDAT], [RPCLS], [RPODT], [RPDPT], [RPDOC], [DB_CRDAT], [DB_CRUSR], [DB_TRDAT], [DB_TRUSR]";
|
||||
//private string _select = "select " + _allFields;
|
||||
private string _insert = "[RPENO], [RPITM], [RPDAT], [RPCLS], [RPODT], [RPDPT], [RPDOC], [DB_CRDAT], [DB_CRUSR], [DB_TRDAT], [DB_TRUSR]";
|
||||
private string _insertValue = "@RPENO, @RPITM, @RPDAT, @RPCLS, @RPODT, @RPDPT, @RPDOC, @DB_CRDAT, @DB_CRUSR, @DB_TRDAT, @DB_TRUSR";
|
||||
//private string _from = " from " + _tableName + " WITH (NOLOCK) ";
|
||||
//private string _where = " where 1=1 ";
|
||||
//private string _order = " order by [RPENO], [RPITM] ";
|
||||
|
||||
public RpsbDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public RpsbDAC(string connectionConfig, string connectionConfigName) : this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public RpsbDAC(WQuery query) : this()
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
///<summary>
|
||||
/// 查詢
|
||||
///</summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public RPSBList Select(string RPENO)
|
||||
{
|
||||
RPSBList result = new RPSBList();
|
||||
IDataList list = result as IDataList;
|
||||
DbCommand cmdSelect = Query.NewCommand();
|
||||
cmdSelect.CommandText = @"
|
||||
SELECT A.*, B.BDNAM AS RPODT_NAME, C.BDNAM AS RPDPT_NAME
|
||||
FROM RPSB A
|
||||
LEFT JOIN BDPT B ON A.RPODT = B.BDNUM
|
||||
LEFT JOIN BDPT C ON A.RPDPT = C.BDNUM
|
||||
WHERE A.RPENO = @RPENO
|
||||
ORDER BY A.RPITM";
|
||||
AddParam(cmdSelect, "RPENO", RPENO);
|
||||
Query.Select(cmdSelect, ref list);
|
||||
return result;
|
||||
}
|
||||
|
||||
///<summary>
|
||||
/// 查詢
|
||||
///</summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public RPSBList SelectOne(string RPENO, int RPITM)
|
||||
{
|
||||
RPSBList result = new RPSBList();
|
||||
IDataList list = result as IDataList;
|
||||
DbCommand cmdSelect = Query.NewCommand();
|
||||
cmdSelect.CommandText = @"
|
||||
SELECT A.*, B.BDNAM AS RPODT_NAME, C.BDNAM AS RPDPT_NAME
|
||||
FROM RPSB A
|
||||
LEFT JOIN BDPT B ON A.RPODT = B.BDNUM
|
||||
LEFT JOIN BDPT C ON A.RPDPT = C.BDNUM
|
||||
WHERE A.RPENO = @RPENO
|
||||
AND A.RPITM = @RPITM";
|
||||
AddParam(cmdSelect, "RPENO", RPENO);
|
||||
AddParam(cmdSelect, "RPITM", RPITM);
|
||||
Query.Select(cmdSelect, ref list);
|
||||
return result;
|
||||
}
|
||||
|
||||
public RPSBItem SelectLast(string RPENO, int prevRBITM)
|
||||
{
|
||||
RPSBList result = new RPSBList();
|
||||
IDataList list = result as IDataList;
|
||||
DbCommand cmdSelect = Query.NewCommand();
|
||||
cmdSelect.CommandText = @"
|
||||
SELECT TOP 1 A.*, B.BDNAM AS RPODT_NAME, C.BDNAM AS RPDPT_NAME
|
||||
FROM RPSB A
|
||||
LEFT JOIN BDPT B ON A.RPODT = B.BDNUM
|
||||
LEFT JOIN BDPT C ON A.RPDPT = C.BDNUM
|
||||
WHERE A.RPENO = @RPENO
|
||||
AND A.RPITM < @RPITM
|
||||
ORDER BY RPITM DESC";
|
||||
AddParam(cmdSelect, "RPENO", RPENO);
|
||||
AddParam(cmdSelect, "RPITM", prevRBITM == 0 ? Int32.MaxValue : prevRBITM);
|
||||
Query.Select(cmdSelect, ref list);
|
||||
if (result.Count == 0)
|
||||
return null;
|
||||
else
|
||||
return result[0];
|
||||
}
|
||||
|
||||
public string PrevRPDPT(string RPENO, int RPITM)
|
||||
{
|
||||
DbCommand cmdSelect = Query.NewCommand();
|
||||
cmdSelect.CommandText = @"
|
||||
SELECT TOP 1 RPDPT
|
||||
FROM RPSB
|
||||
WHERE RPENO = @RPENO
|
||||
AND RPITM < @RPITM
|
||||
AND RPCLS = '部門調動'
|
||||
ORDER BY RPITM DESC";
|
||||
AddParam(cmdSelect, "RPENO", RPENO);
|
||||
AddParam(cmdSelect, "RPITM", RPITM);
|
||||
return WDAC.GetStringValue(Query.ExecuteScalar(cmdSelect));
|
||||
}
|
||||
|
||||
public int NextRPITM(string RPENO)
|
||||
{
|
||||
DbCommand cmdSelect = Query.NewCommand();
|
||||
cmdSelect.CommandText = @"
|
||||
SELECT ISNULL(MAX(RPITM), 0) + 1
|
||||
FROM RPSB
|
||||
WHERE RPENO = @RPENO";
|
||||
AddParam(cmdSelect, "RPENO", RPENO);
|
||||
return WDAC.GetInt32Value(Query.ExecuteScalar(cmdSelect));
|
||||
}
|
||||
|
||||
private bool BeforeInsertOne(RPSBItem value)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
///<summary>
|
||||
/// 新增一筆資料
|
||||
///</summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
||||
public bool InsertOne(RPSBItem value)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!BeforeInsertOne(value))
|
||||
return false;
|
||||
value.DB_CRDAT = DateTime.UtcNow.AddHours(8);
|
||||
value.DB_CRUSR = UserId;
|
||||
value.DB_TRDAT = DateTime.UtcNow.AddHours(8);
|
||||
value.DB_TRUSR = UserId;
|
||||
DbCommand cmdInsert = Query.NewCommand();
|
||||
cmdInsert.CommandText =
|
||||
"insert into [RPSB]"
|
||||
+ " (" + _insert + ") "
|
||||
+ " values "
|
||||
+ " (" + _insertValue + ") "
|
||||
;
|
||||
AddParam(cmdInsert, "RPENO", value.RPENO);
|
||||
AddParam(cmdInsert, "RPITM", value.RPITM);
|
||||
AddParam(cmdInsert, "RPDAT", value.RPDAT);
|
||||
AddParam(cmdInsert, "RPCLS", value.RPCLS);
|
||||
AddParam(cmdInsert, "RPODT", value.RPODT);
|
||||
AddParam(cmdInsert, "RPDPT", value.RPDPT);
|
||||
AddParam(cmdInsert, "RPDOC", value.RPDOC);
|
||||
AddParam(cmdInsert, "DB_CRDAT", value.DB_CRDAT);
|
||||
AddParam(cmdInsert, "DB_CRUSR", value.DB_CRUSR);
|
||||
AddParam(cmdInsert, "DB_TRDAT", value.DB_TRDAT);
|
||||
AddParam(cmdInsert, "DB_TRUSR", value.DB_TRUSR);
|
||||
Query.ExecuteNonQuery(cmdInsert);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private bool BeforeUpdateOne(RPSBItem value)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
///<summary>
|
||||
/// 修改一筆資料
|
||||
///</summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
||||
public bool UpdateOne(RPSBItem value)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!BeforeUpdateOne(value))
|
||||
return false;
|
||||
value.DB_TRDAT = DateTime.UtcNow.AddHours(8);
|
||||
value.DB_TRUSR = UserId;
|
||||
DbCommand cmdUpdate = Query.NewCommand();
|
||||
cmdUpdate.CommandText = @"
|
||||
update [RPSB]
|
||||
set
|
||||
[RPDAT] = @RPDAT ,
|
||||
[RPCLS] = @RPCLS ,
|
||||
[RPODT] = @RPODT ,
|
||||
[RPDPT] = @RPDPT ,
|
||||
[RPDOC] = @RPDOC ,
|
||||
DB_TRDAT = @DB_TRDAT ,
|
||||
DB_TRUSR = @DB_TRUSR
|
||||
where 1=1
|
||||
and [RPENO] = @original_RPENO
|
||||
and [RPITM] = @original_RPITM
|
||||
";
|
||||
AddParam(cmdUpdate, "RPDAT", value.RPDAT);
|
||||
AddParam(cmdUpdate, "RPCLS", value.RPCLS);
|
||||
AddParam(cmdUpdate, "RPODT", value.RPODT);
|
||||
AddParam(cmdUpdate, "RPDPT", value.RPDPT);
|
||||
AddParam(cmdUpdate, "RPDOC", value.RPDOC);
|
||||
AddParam(cmdUpdate, "DB_TRDAT", value.DB_TRDAT);
|
||||
AddParam(cmdUpdate, "DB_TRUSR", value.DB_TRUSR);
|
||||
AddParam(cmdUpdate, "original_RPENO", value.RPENO);
|
||||
AddParam(cmdUpdate, "original_RPITM", value.RPITM);
|
||||
Query.ExecuteNonQuery(cmdUpdate);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private bool BeforeDeleteOne(string RPENO, int RPITM)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
///<summary>
|
||||
/// 刪除一筆資料
|
||||
///</summary>
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public bool DeleteOne(string RPENO, int RPITM)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!BeforeDeleteOne(RPENO, RPITM))
|
||||
return false;
|
||||
DbCommand cmdDelete = Query.NewCommand();
|
||||
cmdDelete.CommandText = @"
|
||||
delete from [RPSB]
|
||||
where 1=1
|
||||
and RPENO = @RPENO
|
||||
and RPITM = @RPITM
|
||||
";
|
||||
AddParam(cmdDelete, "RPENO", RPENO);
|
||||
AddParam(cmdDelete, "RPITM", RPITM);
|
||||
Query.ExecuteNonQuery(cmdDelete);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
///<summary>
|
||||
/// RPSB 資料集合類別
|
||||
///</summary>
|
||||
[Serializable]
|
||||
public partial class RPSBList : List<RPSBItem>, IDataList
|
||||
{
|
||||
///<summary>
|
||||
/// 從 DataReader 填入資料
|
||||
///</summary>
|
||||
public void Fill(DbDataReader reader)
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
RPSBItem newItem = new RPSBItem
|
||||
{
|
||||
RPENO = WDAC.GetStringValue(reader["RPENO"]),
|
||||
RPITM = WDAC.GetInt32Value(reader["RPITM"]),
|
||||
RPCLS = WDAC.GetStringValue(reader["RPCLS"]),
|
||||
RPDAT = WDAC.GetDateTimeValue(reader["RPDAT"]),
|
||||
RPDPT = WDAC.GetStringValue(reader["RPDPT"]),
|
||||
RPODT = WDAC.GetStringValue(reader["RPODT"]),
|
||||
RPDOC = WDAC.GetStringValue(reader["RPDOC"]),
|
||||
RPDPT_NAME = WDAC.GetStringValue(reader["RPDPT_NAME"]),
|
||||
RPODT_NAME = WDAC.GetStringValue(reader["RPODT_NAME"]),
|
||||
DB_CRDAT = WDAC.GetDateTimeValue(reader["DB_CRDAT"]),
|
||||
DB_CRUSR = WDAC.GetStringValue(reader["DB_CRUSR"]),
|
||||
DB_TRDAT = WDAC.GetDateTimeValue(reader["DB_TRDAT"]),
|
||||
DB_TRUSR = WDAC.GetStringValue(reader["DB_TRUSR"]),
|
||||
};
|
||||
Add(newItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
///<summary>
|
||||
/// RPSB 資料紀錄類別
|
||||
///</summary>
|
||||
[Serializable]
|
||||
[Description("人員異動資料")]
|
||||
public class RPSBItem
|
||||
{
|
||||
public static string 到職 = "到職";
|
||||
public static string 離職回任 = "離職回任";
|
||||
public static string 離職 = "離職";
|
||||
public static string 留職停薪 = "留職停薪";
|
||||
public static string 留停復職 = "留停復職";
|
||||
public static string 部門調動 = "部門調動";
|
||||
|
||||
///<summary>
|
||||
/// 人員編號
|
||||
///</summary>
|
||||
public string RPENO { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 異動項次
|
||||
///</summary>
|
||||
public int RPITM { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 異動日期
|
||||
///</summary>
|
||||
[JsonIgnore]
|
||||
public DateTime? RPDAT { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName = "RPDAT")]
|
||||
public string RPDAT_STR { get { return string.Format("{0:yyyyMMdd}", RPDAT); } }
|
||||
///<summary>
|
||||
/// 異動類別
|
||||
/// 到職/離職/留職停薪/留停復職/部門調動
|
||||
///</summary>
|
||||
public string RPCLS { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 原部門
|
||||
///</summary>
|
||||
public string RPODT { get; set; }
|
||||
public string RPODT_NAME { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 新部門
|
||||
///</summary>
|
||||
public string RPDPT { get; set; }
|
||||
public string RPDPT_NAME { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 備註
|
||||
///</summary>
|
||||
public string RPDOC { get; set; }
|
||||
|
||||
public DateTime? DB_CRDAT { get; set; }
|
||||
public string DB_CRUSR { get; set; }
|
||||
public DateTime? DB_TRDAT { get; set; }
|
||||
public string DB_TRUSR { get; set; }
|
||||
public bool OnBoard { get { return Array.IndexOf(RPSBSaveItem.OnBoardRPCLS, RPCLS) >= 0; } }
|
||||
public bool OffBoard { get { return Array.IndexOf(RPSBSaveItem.OffBoardRPCLS, RPCLS) >= 0; } }
|
||||
public bool Quit { get { return Array.IndexOf(RPSBSaveItem.QuitRPCLS, RPCLS) >= 0; } }
|
||||
public bool DeptChange { get { return RPCLS == RPSBItem.部門調動; } }
|
||||
}
|
||||
|
||||
|
||||
public class RPSBSaveItem
|
||||
{
|
||||
public static string[] RPCLSOptions = { RPSBItem.到職, RPSBItem.離職回任, RPSBItem.離職, RPSBItem.留職停薪, RPSBItem.留停復職 };
|
||||
public static string[] OnBoardRPCLS = { RPSBItem.到職, RPSBItem.離職回任, RPSBItem.留停復職 };
|
||||
public static string[] OffBoardRPCLS = { RPSBItem.離職, RPSBItem.留職停薪 };
|
||||
public static string[] QuitRPCLS = { RPSBItem.離職 };
|
||||
|
||||
private DateTime _RPDAT_DATE;
|
||||
public string RPENO { get; set; }
|
||||
public int RPITM { get; set; }
|
||||
public string RPDAT { get; set; }
|
||||
public string RPCLS { get; set; }
|
||||
public string RPDPT { get; set; }
|
||||
public string RPDOC { get; set; }
|
||||
public DateTime RPDAT_DATE { get { return _RPDAT_DATE; } }
|
||||
public string Message;
|
||||
|
||||
public bool IsValid
|
||||
{
|
||||
get
|
||||
{
|
||||
var valid = true;
|
||||
var messages = new List<string>();
|
||||
|
||||
if (string.IsNullOrEmpty(RPCLS))
|
||||
{
|
||||
messages.Add("異動類別未輸入");
|
||||
valid = false;
|
||||
}
|
||||
|
||||
else if (Array.IndexOf(RPCLSOptions, RPCLS) < 0)
|
||||
{
|
||||
messages.Add("異動類別不正確");
|
||||
valid = false;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(RPENO))
|
||||
{
|
||||
messages.Add("人員編號未輸入");
|
||||
valid = false;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(RPDAT))
|
||||
{
|
||||
messages.Add("異動日期未輸入");
|
||||
valid = false;
|
||||
}
|
||||
else if (!WGuard1.CheckDate(RPDAT, out _RPDAT_DATE) || _RPDAT_DATE.Year > 2112)
|
||||
{
|
||||
messages.Add("異動日期不正確");
|
||||
valid = false;
|
||||
}
|
||||
|
||||
//if (RPCLS == RPSBItem.部門調動 && string.IsNullOrEmpty(RPDPT))
|
||||
//{
|
||||
// messages.Add("新部門未輸入");
|
||||
// valid = false;
|
||||
//}
|
||||
|
||||
Message = string.Join(" / ", messages.ToArray());
|
||||
return valid;
|
||||
}
|
||||
}
|
||||
|
||||
public bool OnBoard { get { return Array.IndexOf(OnBoardRPCLS, RPCLS) >= 0; } }
|
||||
public bool OffBoard { get { return Array.IndexOf(OffBoardRPCLS, RPCLS) >= 0; } }
|
||||
public bool Quit { get { return Array.IndexOf(QuitRPCLS, RPCLS) >= 0; } }
|
||||
public bool DeptChange { get { return RPCLS == RPSBItem.部門調動; } }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
|
||||
/// <summary>
|
||||
/// 薪資加減項資料處理類別
|
||||
/// </summary>
|
||||
public class RsajDAC : Wellan.Data.WDAC
|
||||
{
|
||||
public RsajDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public RsajDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public RsajDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得某年月、某人員薪資加減項紀錄
|
||||
/// </summary>
|
||||
/// <param name="yymm">年月</param>
|
||||
/// <param name="rseno">人員編號</param>
|
||||
/// <param name="rspyn">專案年度編號</param>
|
||||
/// <param name="tran">要加入的交易</param>
|
||||
public DataTable GetRSAJ(DateTime yymm, string rseno, string rspyn, DbTransaction tran)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand(
|
||||
@"SELECT RSAMT, RSDOC
|
||||
FROM RSAJ WHERE RSENO=@RSENO AND RSPYN=@RSPYN
|
||||
AND RSYMM = @YYMM");
|
||||
cmd.Parameters.Add(Query.NewParameter("RSENO", rseno));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSPYN", rspyn));
|
||||
cmd.Parameters.Add(Query.NewParameter("YYMM", yymm));
|
||||
cmd.Connection = tran.Connection;
|
||||
cmd.Transaction = tran;
|
||||
DbDataAdapter da = Query.NewDataAdapter(cmd);
|
||||
DataTable result = new DataTable();
|
||||
da.Fill(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 寫特休結算薪資加減項
|
||||
/// </summary>
|
||||
/// <param name="yymm"></param>
|
||||
/// <param name="rseno"></param>
|
||||
/// <param name="rspyn"></param>
|
||||
/// <param name="rsamt"></param>
|
||||
/// <param name="rsdoc"></param>
|
||||
public string WriteAnnualLeaveSalary(DateTime yymm, string rseno, string rspyn, int rsamt, string rsdoc)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
var rsren = GetAnnualLeaveSalaryREN(yymm, rseno, rspyn);
|
||||
if (string.IsNullOrEmpty(rsren) && rsamt > 0)
|
||||
{
|
||||
cmd.CommandText =
|
||||
@"INSERT INTO RSAJ
|
||||
(TRDAT, TRMOD, TRUSR, RSREN, RSENO, RSPYN, RSYMM, RSAMT, RSDOC, APPNO)
|
||||
VALUES
|
||||
(@TRDAT, 'INSERT', @TRUSR, @RSREN, @RSENO, @RSPYN, @RSYMM, @RSAMT, @RSDOC, 1)";
|
||||
cmd.Parameters.Clear();
|
||||
cmd.Parameters.Add(Query.NewParameter("TRDAT", DateTime.UtcNow.AddHours(8)));
|
||||
cmd.Parameters.Add(Query.NewParameter("TRUSR", UserId));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSREN", WGuard1.WNextRen(yymm, "RSAJ", "RSREN", "YYYYMM\"F\"<9999>", "", null)));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSENO", rseno));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSPYN", rspyn));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSYMM", yymm));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSAMT", rsamt));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSDOC", rsdoc));
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
else if (rsamt == 0)
|
||||
{
|
||||
cmd.CommandText = @"DELETE FROM RSAJ WHERE RSREN = @RSREN";
|
||||
cmd.Parameters.Add(Query.NewParameter("RSREN", rsren));
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd.CommandText =
|
||||
@"UPDATE RSAJ
|
||||
SET TRDAT = @TRDAT
|
||||
, TRMOD = 'UPDATE'
|
||||
, TRUSR = @TRUSR
|
||||
, RSENO = @RSENO
|
||||
, RSPYN = @RSPYN
|
||||
, RSYMM = @RSYMM
|
||||
, RSAMT = @RSAMT
|
||||
, RSDOC = @RSDOC
|
||||
, APPNO = APPNO + 1
|
||||
WHERE RSREN = @RSREN";
|
||||
cmd.Parameters.Clear();
|
||||
cmd.Parameters.Add(Query.NewParameter("TRDAT", DateTime.UtcNow.AddHours(8)));
|
||||
cmd.Parameters.Add(Query.NewParameter("TRUSR", UserId));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSENO", rseno));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSPYN", rspyn));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSYMM", yymm));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSAMT", rsamt));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSDOC", rsdoc));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSREN", rsren));
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
return rsren;
|
||||
}
|
||||
|
||||
public string GetAnnualLeaveSalaryREN(DateTime yymm, string rseno, string rspyn)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand(
|
||||
@"SELECT RSREN
|
||||
FROM RSAJ
|
||||
WHERE RSENO=@RSENO
|
||||
AND RSPYN=@RSPYN
|
||||
AND RSYMM=@RSYMM
|
||||
AND RSREN LIKE '______F____'");
|
||||
cmd.Parameters.Add(Query.NewParameter("RSENO", rseno));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSPYN", rspyn));
|
||||
cmd.Parameters.Add(Query.NewParameter("RSYMM", yymm));
|
||||
return GetStringValue(Query.ExecuteScalar(cmd));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using System.ComponentModel;
|
||||
|
||||
/// <summary>
|
||||
/// 人員班表的資料處理類別
|
||||
/// </summary>
|
||||
[DataObject]
|
||||
public class RtmeDAC : WDAC
|
||||
{
|
||||
public RtmeDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public RtmeDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public RtmeDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public List<RtmeItem> SelectDay(string RTENO, DateTime? RTDAT)
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText = "SELECT * FROM RTME WHERE 1=1";
|
||||
|
||||
if (!string.IsNullOrEmpty(RTENO))
|
||||
cmd.CommandText += " AND RTENO = @RTENO ";
|
||||
if (RTDAT.HasValue)
|
||||
cmd.CommandText += " AND RTDAT = @RTDAT ";
|
||||
|
||||
AddParam(cmd, "RTENO", RTENO);
|
||||
AddParam(cmd, "RTDAT", RTDAT);
|
||||
return Query.Select<RtmeItem>(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public List<RtmeItem> SelectMonth(string RTENO, DateTime? RTDAT)
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText = "SELECT * FROM RTME WHERE 1=1";
|
||||
|
||||
// if (!string.IsNullOrEmpty(RTENO))
|
||||
cmd.CommandText += " AND RTENO = @RTENO ";
|
||||
|
||||
if (RTDAT.HasValue)
|
||||
{
|
||||
cmd.CommandText += " AND RTDAT >= @RTDAT_1 AND RTDAT < @RTDAT_2 ";
|
||||
var d = RTDAT.Value.AddDays(-(RTDAT.Value.Day - 1));
|
||||
AddParam(cmd, "RTDAT_1", d);
|
||||
AddParam(cmd, "RTDAT_2", d.AddMonths(1));
|
||||
}
|
||||
|
||||
AddParam(cmd, "RTENO", RTENO);
|
||||
return Query.Select<RtmeItem>(cmd);
|
||||
}
|
||||
|
||||
public void SetDay(string RTENO, DateTime RTDAT, string RTTID, string TRUSR)
|
||||
{
|
||||
var item = SelectDay(RTENO, RTDAT).FirstOrDefault();
|
||||
if (item == null)
|
||||
{
|
||||
InsertOne(new RtmeItem()
|
||||
{
|
||||
RTENO = RTENO,
|
||||
RTDAT = RTDAT,
|
||||
RTTID = RTTID,
|
||||
TRUSR = TRUSR
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
item.RTTID = RTTID;
|
||||
UpdateOne(item);
|
||||
}
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Insert)]
|
||||
public void InsertOne(RtmeItem value)
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"INSERT INTO dbo.RTME
|
||||
(RTENO, RTDAT, RTTID, TRDAT, TRMOD, TRUSR)
|
||||
VALUES
|
||||
(@RTENO, @RTDAT, @RTTID, GETDATE(), 'INSERT', @TRUSR)";
|
||||
AddParam(cmd, "RTENO", value.RTENO);
|
||||
AddParam(cmd, "RTDAT", value.RTDAT);
|
||||
AddParam(cmd, "RTTID", value.RTTID);
|
||||
AddParam(cmd, "TRUSR", value.TRUSR);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
||||
public void UpdateOne(RtmeItem value)
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"UPDATE dbo.RTME SET
|
||||
RTTID = @RTTID,
|
||||
TRDAT = GETDATE(),
|
||||
TRMOD = 'MODIFY',
|
||||
TRUSR = @TRUSR
|
||||
WHERE RTENO = @OLD_RTENO
|
||||
AND RTDAT = @OLD_RTDAT";
|
||||
AddParam(cmd, "RTTID", value.RTTID);
|
||||
AddParam(cmd, "TRUSR", value.TRUSR);
|
||||
AddParam(cmd, "OLD_RTENO", value.RTENO);
|
||||
AddParam(cmd, "OLD_RTDAT", value.RTDAT);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public void DeleteOne(RtmeItem value)
|
||||
{
|
||||
var cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"DELETE FROM dbo.RTME
|
||||
WHERE RTENO = @OLD_RTENO
|
||||
AND RTDAT = @OLD_RTDAT";
|
||||
AddParam(cmd, "OLD_RTENO", value.RTENO);
|
||||
AddParam(cmd, "OLD_RTDAT", value.RTDAT);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 由員工與日期取班表資料
|
||||
/// </summary>
|
||||
/// <param name="RTENO"></param>
|
||||
/// <param name="RTDAT"></param>
|
||||
/// <returns></returns>
|
||||
public BtmeItem SelectBtmeDay(string RTENO, DateTime RTDAT)
|
||||
{
|
||||
var rtmeItem = SelectDay(RTENO, RTDAT).FirstOrDefault();
|
||||
if (rtmeItem != null && !string.IsNullOrEmpty(rtmeItem.RTTID.Trim()) && !BhrdDAC.ItemIsHoliday(rtmeItem.RTTID))
|
||||
{
|
||||
return new BtmeDAC(Query).SelectOne(rtmeItem.RTTID).FirstOrDefault();
|
||||
}
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public class RtmeItem
|
||||
{
|
||||
public string RTENO { get; set; }
|
||||
public DateTime RTDAT { get; set; }
|
||||
public string RTTID { get; set; }
|
||||
public DateTime TRDAT { get; set; }
|
||||
public string TRMOD { get; set; }
|
||||
public string TRUSR { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,788 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using System.IdentityModel.Claims;
|
||||
using Microsoft.Win32;
|
||||
|
||||
/// <summary>
|
||||
/// 年度特休
|
||||
/// </summary>
|
||||
[DataObject]
|
||||
public class RyerDAC : Wellan.Data.WDAC
|
||||
{
|
||||
public RyerDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public RyerDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public RyerDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||
public DataTable SelectProject(int RYYERFrom, int RYYERTo, string RAPYN, string RANUM)
|
||||
{
|
||||
string select = @"SELECT A.RANUM AS RYENO
|
||||
, A.BPYER AS RYYER
|
||||
, B.BPNME
|
||||
, B.BPSDY
|
||||
, B.BPEDY
|
||||
, C.RYYST
|
||||
, '' AS RYYST_H
|
||||
, '' AS RYYST_M
|
||||
, ISNULL(C.RYYXT, 0) AS RYYXT
|
||||
, '' AS RYYXT_D
|
||||
, ISNULL(C.RYTOT, 0) / 60 AS RYTOT
|
||||
, ISNULL(C.RYH01, 0) / 60 AS RYH01
|
||||
, ISNULL(C.RYH02, 0) / 60 AS RYH02
|
||||
, ISNULL(C.RYH03, 0) / 60 AS RYH03
|
||||
, ISNULL(C.RYH04, 0) / 60 AS RYH04
|
||||
, ISNULL(C.RYH05, 0) / 60 AS RYH05
|
||||
, ISNULL(C.RYH06, 0) / 60 AS RYH06
|
||||
, ISNULL(C.RYH07, 0) / 60 AS RYH07
|
||||
, ISNULL(C.RYH08, 0) / 60 AS RYH08
|
||||
, ISNULL(C.RYH09, 0) / 60 AS RYH09
|
||||
, ISNULL(C.RYH10, 0) / 60 AS RYH10
|
||||
, ISNULL(C.RYH11, 0) / 60 AS RYH11
|
||||
, ISNULL(C.RYH12, 0) / 60 AS RYH12
|
||||
, ISNULL(C.RYD01, 1) AS RYD01
|
||||
, ISNULL(C.RYD02, 1) AS RYD02
|
||||
, ISNULL(C.RYD03, 1) AS RYD03
|
||||
, ISNULL(C.RYD04, 1) AS RYD04
|
||||
, ISNULL(C.RYD05, 1) AS RYD05
|
||||
, ISNULL(C.RYD06, 1) AS RYD06
|
||||
, ISNULL(C.RYD07, 1) AS RYD07
|
||||
, ISNULL(C.RYD08, 1) AS RYD08
|
||||
, ISNULL(C.RYD09, 1) AS RYD09
|
||||
, ISNULL(C.RYD10, 1) AS RYD10
|
||||
, ISNULL(C.RYD11, 1) AS RYD11
|
||||
, ISNULL(C.RYD12, 1) AS RYD12
|
||||
, '' AS RYVLD
|
||||
, '' AS RYUST
|
||||
, '' AS RYLFT
|
||||
, '' AS RYPLF
|
||||
, ISNULL(C.RYSLY, 0) AS RYSLY
|
||||
, ISNULL(C.RYNXT, 0) AS RYNXT
|
||||
, '' AS RYSLY_H
|
||||
, '' AS RYSLY_M
|
||||
, '' AS RYNXT_H
|
||||
, '' AS RYNXT_M
|
||||
, C.RYRMK";
|
||||
|
||||
if (RAPYN == "103JYB00001" || RAPYN == "103TYB00001")
|
||||
{
|
||||
RYYERTo = RYYERFrom;
|
||||
}
|
||||
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
if (RYYERFrom != RYYERTo)
|
||||
{
|
||||
cmd.CommandText = string.Format(
|
||||
@"{0}
|
||||
FROM (SELECT DISTINCT RASN.RANUM, BPAA.BPYER + @CY11 BPYER
|
||||
FROM RASN
|
||||
JOIN BPAA on RASN.RAPYN = BPAA.BPPYN
|
||||
WHERE (BPYER + @CY11 >= @RYYER_FROM AND BPYER + @CY11 <= @RYYER_TO)
|
||||
AND (RASN.RAPYN = @RAPYN OR @RAPYN = '') -- 跨年度查詢忽略專案條件
|
||||
AND (RASN.RANUM = @RANUM OR @RANUM = '')
|
||||
) A
|
||||
JOIN BPSNView B ON A.RANUM=B.BPENO -- AND (B.BPEDY IS NULL OR YEAR(B.BPEDY) = BPYER)
|
||||
LEFT JOIN RYER C ON A.RANUM=C.RYENO AND A.BPYER = C.RYYER
|
||||
ORDER BY (CASE WHEN BPEDY IS NULL THEN 0 ELSE 1 END), RYENO, BPYER"
|
||||
, select);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd.CommandText = string.Format(
|
||||
@"{0}
|
||||
FROM (SELECT DISTINCT RASN.RANUM, @RYYER_FROM BPYER
|
||||
FROM RASN
|
||||
WHERE (RASN.RAPYN = @RAPYN OR @RAPYN = '')
|
||||
AND (RASN.RANUM = @RANUM OR @RANUM = '')
|
||||
-- AND (RASN.RAEDT IS NULL OR YEAR(RASN.RAEDT) = @RYYER_FROM) -- 加上專案結束日為空或年度=查詢年度
|
||||
) A
|
||||
JOIN BPSNView B ON A.RANUM=B.BPENO -- AND (B.BPEDY IS NULL OR YEAR(B.BPEDY) = BPYER)
|
||||
LEFT JOIN RYER C ON A.RANUM=C.RYENO AND A.BPYER = C.RYYER
|
||||
ORDER BY (CASE WHEN BPEDY IS NULL THEN 0 ELSE 1 END), RYENO, BPYER"
|
||||
, select);
|
||||
}
|
||||
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "CY11", WGuard1.CY11);
|
||||
Query.AddParam(cmd, "RANUM", RANUM);
|
||||
Query.AddParam(cmd, "RAPYN", RAPYN);
|
||||
Query.AddParam(cmd, "RYYER_FROM", RYYERFrom);
|
||||
Query.AddParam(cmd, "RYYER_TO", RYYERTo);
|
||||
DataTable result = Query.Select(cmd);
|
||||
|
||||
var nowtime = DateTime.UtcNow.AddHours(8);
|
||||
int month = nowtime.Month;
|
||||
int day = nowtime.Day;
|
||||
foreach (DataRow r in result.Rows)
|
||||
{
|
||||
var ryyer = WDAC.GetInt32Value(r["RYYER"]);
|
||||
var ryeno = WDAC.GetStringValue(r["RYENO"]);
|
||||
if (ryyer < nowtime.Year)
|
||||
{
|
||||
month = 12;
|
||||
day = 31;
|
||||
}
|
||||
|
||||
r.BeginEdit();
|
||||
int 年初特休 = Get年初特休(ryeno, ryyer);
|
||||
int 可用特休 = Get可用特休(ryeno, ryyer, month, day);
|
||||
int 至今生效特休 = Get至今生效特休(ryeno, ryyer, month, day);
|
||||
int 已休時數 = 年初特休 + 至今生效特休 - 可用特休;
|
||||
int 上年未休 = Get可用特休(ryeno, ryyer - 1, 12, 31);
|
||||
|
||||
r["RYYST_H"] = String.Format("{0}", GetInt32Value(GetInt32Value(r["RYYST"]) / 60));
|
||||
r["RYYST_M"] = String.Format("{0:00}", GetInt32Value(GetInt32Value(r["RYYST"]) % 60));
|
||||
r["RYYXT_D"] = String.Format("{0}:{1:00}", GetInt32Value(GetInt32Value(r["RYYXT"]) / 60), GetInt32Value(r["RYYXT"]) % 60);
|
||||
r["RYVLD"] = String.Format("{0}:{1:00}", GetInt32Value(至今生效特休 / 60), 至今生效特休 % 60);
|
||||
r["RYUST"] = String.Format("{0}:{1:00}", GetInt32Value(已休時數 / 60), 已休時數 % 60);
|
||||
r["RYLFT"] = String.Format("{0}:{1:00}", GetInt32Value(可用特休 / 60), 可用特休 % 60);
|
||||
r["RYPLF"] = String.Format("{0}:{1:00}", GetInt32Value(上年未休 / 60), 上年未休 % 60);
|
||||
r["RYSLY_H"] = String.Format("{0}", GetInt32Value(GetInt32Value(r["RYSLY"]) / 60));
|
||||
r["RYSLY_M"] = String.Format("{0:00}", GetInt32Value(r["RYSLY"]) % 60);
|
||||
r["RYNXT_H"] = String.Format("{0}", GetInt32Value(GetInt32Value(r["RYNXT"]) / 60));
|
||||
r["RYNXT_M"] = String.Format("{0:00}", GetInt32Value(r["RYNXT"]) % 60);
|
||||
r.EndEdit();
|
||||
r.AcceptChanges();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得某人某年還有多少特休
|
||||
/// </summary>
|
||||
/// <param name="RYENO">員工編號</param>
|
||||
/// <param name="year">年</param>
|
||||
/// <param name="month">月</param>
|
||||
/// <param name="day">日</param>
|
||||
/// <param name="addYearBegin">加入年初已生效時數</param>
|
||||
/// <param name="substrateOffHours">減去本年已休時數</param>
|
||||
public int DoGet可用特休(string RYENO, int year, int month, int day, bool addYearBegin, bool substrateOffHours)
|
||||
{
|
||||
// 取得總時數
|
||||
if (month < 1) month = 1;
|
||||
if (month > 12) month = 12;
|
||||
List<string> monthsql = new List<string>();
|
||||
if (addYearBegin)
|
||||
{
|
||||
monthsql.Add("ISNULL(RYYST, 0)"); // 年初生效時數
|
||||
monthsql.Add("ISNULL(RYYXT, 0)"); // 上年遞延時數
|
||||
}
|
||||
for (int i = 1; i < month; i++)
|
||||
{
|
||||
monthsql.Add(string.Format("ISNULL(RYH{0:00}, 0)", i));
|
||||
}
|
||||
monthsql.Add(string.Format("ISNULL(CASE WHEN @RYDAY >= ISNULL(RYD{0:00}, 1) THEN RYH{0:00} ELSE 0 END, 0)", month));
|
||||
|
||||
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
string.Format(@"SELECT {0}
|
||||
FROM RYER
|
||||
WHERE RYYER=@RYYER
|
||||
AND RYENO=@RYENO", string.Join("+", monthsql.ToArray()));
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RYYER", year);
|
||||
Query.AddParam(cmd, "RYENO", RYENO);
|
||||
Query.AddParam(cmd, "RYDAY", day);
|
||||
int 總時數 = GetInt32Value(Query.ExecuteScalar(cmd));
|
||||
|
||||
// 取得已休時數
|
||||
int 已休時數 = 0;
|
||||
if (substrateOffHours)
|
||||
{
|
||||
cmd.CommandText =
|
||||
@"SELECT ISNULL(SUM(RPTCT), 0)
|
||||
FROM RPAR
|
||||
WHERE RPNUM = @RYENO
|
||||
AND RPTYP = '01'
|
||||
AND YEAR(RPRDT) = @RYYER
|
||||
AND YEAR(RPEDT) = @RYYER
|
||||
AND (MONTH(RPRDT) < @RYMON or MONTH(RPRDT) = @RYMON AND DAY(RPRDT) <= @RYDAY)
|
||||
AND (RPAPN IS NULL OR RPAPN <> 'D' AND (RPAPP IS NULL OR RPAPP <> 'N'))";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RYENO", RYENO);
|
||||
Query.AddParam(cmd, "RYYER", year);
|
||||
Query.AddParam(cmd, "RYMON", month);
|
||||
Query.AddParam(cmd, "RYDAY", day);
|
||||
已休時數 += GetInt32Value(Query.ExecuteScalar(cmd));
|
||||
}
|
||||
|
||||
return 總時數 - 已休時數;
|
||||
}
|
||||
|
||||
public int Get可用特休(string RYENO, int year, int month, int day)
|
||||
{
|
||||
return DoGet可用特休(RYENO, year, month, day, true, true);
|
||||
}
|
||||
public int Get至今生效特休(string RYENO, int year, int month, int day)
|
||||
{
|
||||
return DoGet可用特休(RYENO, year, month, day, false, false);
|
||||
}
|
||||
public int Get年初特休(string RYENO, int year)
|
||||
{
|
||||
return DoGet可用特休(RYENO, year, 1, 0, true, false);
|
||||
}
|
||||
|
||||
public int Get上年結轉(string RYENO, int year)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"SELECT RYNXT
|
||||
FROM RYER
|
||||
WHERE RYYER=@RYYER
|
||||
AND RYENO=@RYENO";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RYYER", year - 1);
|
||||
Query.AddParam(cmd, "RYENO", RYENO);
|
||||
return GetInt32Value(Query.ExecuteScalar(cmd));
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Update)]
|
||||
public void UpdateOne(
|
||||
string old_ryeno
|
||||
, int old_ryyer
|
||||
, int rytot
|
||||
, string trusr
|
||||
, int ryyst
|
||||
, int ryh01
|
||||
, int ryh02
|
||||
, int ryh03
|
||||
, int ryh04
|
||||
, int ryh05
|
||||
, int ryh06
|
||||
, int ryh07
|
||||
, int ryh08
|
||||
, int ryh09
|
||||
, int ryh10
|
||||
, int ryh11
|
||||
, int ryh12
|
||||
, int ryd01
|
||||
, int ryd02
|
||||
, int ryd03
|
||||
, int ryd04
|
||||
, int ryd05
|
||||
, int ryd06
|
||||
, int ryd07
|
||||
, int ryd08
|
||||
, int ryd09
|
||||
, int ryd10
|
||||
, int ryd11
|
||||
, int ryd12
|
||||
, int rysly
|
||||
, int rynxt
|
||||
, string ryrmk
|
||||
)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
if (!CheckExists(old_ryeno, old_ryyer))
|
||||
{
|
||||
cmd.CommandText =
|
||||
@"INSERT INTO RYER
|
||||
(TRDAT, TRMOD, TRUSR, RYENO, RYYER, RYTOT, RYUST, RYYST,
|
||||
RYH01, RYH02, RYH03, RYH04, RYH05, RYH06, RYH07, RYH08, RYH09, RYH10, RYH11, RYH12,
|
||||
RYD01, RYD02, RYD03, RYD04, RYD05, RYD06, RYD07, RYD08, RYD09, RYD10, RYD11, RYD12,
|
||||
RYSLY, RYNXT, RYRMK
|
||||
)
|
||||
VALUES
|
||||
(GETDATE(), 'INSERT', @TRUSR, @RYENO, @RYYER, @RYTOT, 0, @RYYST,
|
||||
@RYH01, @RYH02, @RYH03, @RYH04, @RYH05, @RYH06, @RYH07, @RYH08, @RYH09, @RYH10, @RYH11, @RYH12,
|
||||
@RYD01, @RYD02, @RYD03, @RYD04, @RYD05, @RYD06, @RYD07, @RYD08, @RYD09, @RYD10, @RYD11, @RYD12,
|
||||
@RYSLY, @RYNXT, @RYRMK
|
||||
)";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "TRUSR", trusr);
|
||||
Query.AddParam(cmd, "RYENO", old_ryeno);
|
||||
Query.AddParam(cmd, "RYYER", old_ryyer);
|
||||
Query.AddParam(cmd, "RYTOT", rytot);
|
||||
Query.AddParam(cmd, "RYYST", ryyst);
|
||||
Query.AddParam(cmd, "RYH01", ryh01);
|
||||
Query.AddParam(cmd, "RYH02", ryh02);
|
||||
Query.AddParam(cmd, "RYH03", ryh03);
|
||||
Query.AddParam(cmd, "RYH04", ryh04);
|
||||
Query.AddParam(cmd, "RYH05", ryh05);
|
||||
Query.AddParam(cmd, "RYH06", ryh06);
|
||||
Query.AddParam(cmd, "RYH07", ryh07);
|
||||
Query.AddParam(cmd, "RYH08", ryh08);
|
||||
Query.AddParam(cmd, "RYH09", ryh09);
|
||||
Query.AddParam(cmd, "RYH10", ryh10);
|
||||
Query.AddParam(cmd, "RYH11", ryh11);
|
||||
Query.AddParam(cmd, "RYH12", ryh12);
|
||||
Query.AddParam(cmd, "RYD01", ryd01);
|
||||
Query.AddParam(cmd, "RYD02", ryd02);
|
||||
Query.AddParam(cmd, "RYD03", ryd03);
|
||||
Query.AddParam(cmd, "RYD04", ryd04);
|
||||
Query.AddParam(cmd, "RYD05", ryd05);
|
||||
Query.AddParam(cmd, "RYD06", ryd06);
|
||||
Query.AddParam(cmd, "RYD07", ryd07);
|
||||
Query.AddParam(cmd, "RYD08", ryd08);
|
||||
Query.AddParam(cmd, "RYD09", ryd09);
|
||||
Query.AddParam(cmd, "RYD10", ryd10);
|
||||
Query.AddParam(cmd, "RYD11", ryd11);
|
||||
Query.AddParam(cmd, "RYD12", ryd12);
|
||||
Query.AddParam(cmd, "RYSLY", rysly);
|
||||
Query.AddParam(cmd, "RYNXT", rynxt);
|
||||
Query.AddParam(cmd, "RYRMK", ryrmk);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd.CommandText =
|
||||
@"UPDATE RYER
|
||||
SET TRDAT = GETDATE() ,
|
||||
TRMOD = 'UPDATE' ,
|
||||
TRUSR = @TRUSR ,
|
||||
RYTOT = @RYTOT ,
|
||||
RYYST = @RYYST ,
|
||||
RYH01 = @RYH01 ,
|
||||
RYH02 = @RYH02 ,
|
||||
RYH03 = @RYH03 ,
|
||||
RYH04 = @RYH04 ,
|
||||
RYH05 = @RYH05 ,
|
||||
RYH06 = @RYH06 ,
|
||||
RYH07 = @RYH07 ,
|
||||
RYH08 = @RYH08 ,
|
||||
RYH09 = @RYH09 ,
|
||||
RYH10 = @RYH10 ,
|
||||
RYH11 = @RYH11 ,
|
||||
RYH12 = @RYH12 ,
|
||||
RYD01 = @RYD01 ,
|
||||
RYD02 = @RYD02 ,
|
||||
RYD03 = @RYD03 ,
|
||||
RYD04 = @RYD04 ,
|
||||
RYD05 = @RYD05 ,
|
||||
RYD06 = @RYD06 ,
|
||||
RYD07 = @RYD07 ,
|
||||
RYD08 = @RYD08 ,
|
||||
RYD09 = @RYD09 ,
|
||||
RYD10 = @RYD10 ,
|
||||
RYD11 = @RYD11 ,
|
||||
RYD12 = @RYD12 ,
|
||||
RYSLY = @RYSLY ,
|
||||
RYNXT = @RYNXT ,
|
||||
RYRMK = @RYRMK
|
||||
WHERE RYENO = @OLD_RYENO
|
||||
AND RYYER = @OLD_RYYER";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "TRUSR", trusr);
|
||||
Query.AddParam(cmd, "RYTOT", rytot);
|
||||
Query.AddParam(cmd, "RYYST", ryyst);
|
||||
Query.AddParam(cmd, "RYH01", ryh01);
|
||||
Query.AddParam(cmd, "RYH02", ryh02);
|
||||
Query.AddParam(cmd, "RYH03", ryh03);
|
||||
Query.AddParam(cmd, "RYH04", ryh04);
|
||||
Query.AddParam(cmd, "RYH05", ryh05);
|
||||
Query.AddParam(cmd, "RYH06", ryh06);
|
||||
Query.AddParam(cmd, "RYH07", ryh07);
|
||||
Query.AddParam(cmd, "RYH08", ryh08);
|
||||
Query.AddParam(cmd, "RYH09", ryh09);
|
||||
Query.AddParam(cmd, "RYH10", ryh10);
|
||||
Query.AddParam(cmd, "RYH11", ryh11);
|
||||
Query.AddParam(cmd, "RYH12", ryh12);
|
||||
Query.AddParam(cmd, "RYD01", ryd01);
|
||||
Query.AddParam(cmd, "RYD02", ryd02);
|
||||
Query.AddParam(cmd, "RYD03", ryd03);
|
||||
Query.AddParam(cmd, "RYD04", ryd04);
|
||||
Query.AddParam(cmd, "RYD05", ryd05);
|
||||
Query.AddParam(cmd, "RYD06", ryd06);
|
||||
Query.AddParam(cmd, "RYD07", ryd07);
|
||||
Query.AddParam(cmd, "RYD08", ryd08);
|
||||
Query.AddParam(cmd, "RYD09", ryd09);
|
||||
Query.AddParam(cmd, "RYD10", ryd10);
|
||||
Query.AddParam(cmd, "RYD11", ryd11);
|
||||
Query.AddParam(cmd, "RYD12", ryd12);
|
||||
Query.AddParam(cmd, "RYSLY", rysly);
|
||||
Query.AddParam(cmd, "RYNXT", rynxt);
|
||||
Query.AddParam(cmd, "RYRMK", ryrmk);
|
||||
Query.AddParam(cmd, "OLD_RYENO", old_ryeno);
|
||||
Query.AddParam(cmd, "OLD_RYYER", old_ryyer);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
[DataObjectMethod(DataObjectMethodType.Delete)]
|
||||
public void DeleteOne(string OLD_RYENO, int OLD_RYYER)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
cmd.CommandText =
|
||||
@"UPDATE FROM RYER
|
||||
WHERE RYENO = @RYENO
|
||||
AND RYYER = @RYYER";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RYENO", OLD_RYENO);
|
||||
Query.AddParam(cmd, "RYYER", OLD_RYYER);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
public bool CheckExists(string RYENO, int RYYER)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
cmd.CommandText =
|
||||
@"SELECT COUNT(1) FROM RYER
|
||||
WHERE RYENO = @RYENO
|
||||
AND RYYER = @RYYER";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RYENO", RYENO);
|
||||
Query.AddParam(cmd, "RYYER", RYYER);
|
||||
return GetInt32Value(Query.ExecuteScalar(cmd)) > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 沖特休
|
||||
/// </summary>
|
||||
/// <param name="RYENO">員工編號</param>
|
||||
/// <param name="RYYER">年</param>
|
||||
/// <param name="特休">特休分鐘數</param>
|
||||
/// <param name="tran"></param>
|
||||
public void 沖特休(string RYENO, int RYYER, int 特休, DbTransaction tran)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText =
|
||||
@"UPDATE RYER
|
||||
SET RYUST = ISNULL(RYUST, 0) + @RYUST
|
||||
WHERE RYENO=@RYENO AND RYYER=@RYYER";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RYENO", RYENO);
|
||||
Query.AddParam(cmd, "RYYER", RYYER);
|
||||
Query.AddParam(cmd, "RYUST", 特休);
|
||||
|
||||
if (tran != null)
|
||||
{
|
||||
cmd.Connection = tran.Connection;
|
||||
cmd.Transaction = tran;
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
else
|
||||
{
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
public void 取消沖特休(DbTransaction tran, string _RPREN)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
cmd.CommandText = @"SELECT RPNUM, RPRDT, RPTCT FROM RPAR WHERE RPREN=@RPREN";
|
||||
Query.AddParam(cmd, "RPREN", _RPREN);
|
||||
DataTable t = Query.Select(cmd, tran);
|
||||
|
||||
if (t.Rows.Count > 0)
|
||||
{
|
||||
string 舊User = WDAC.GetStringValue(t.Rows[0]["RPNUM"]);
|
||||
DateTime 舊日期 = WDAC.GetDateTimeValue(t.Rows[0]["RPRDT"]);
|
||||
int 舊時數 = WDAC.GetInt32Value(t.Rows[0]["RPTCT"]);
|
||||
|
||||
沖特休(舊User, 舊日期.Year, -舊時數, tran);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 結算特休
|
||||
/// </summary>
|
||||
/// <param name="ryeno">員工編號</param>
|
||||
/// <param name="ryyer">年度</param>
|
||||
/// <param name="trusr">操作人員</param>
|
||||
public string Final(
|
||||
string ryeno
|
||||
, int ryyer
|
||||
, string trusr
|
||||
)
|
||||
{
|
||||
var rasnDao = new RasnDAC(Query);
|
||||
var rsajDao = new RsajDAC(Query);
|
||||
var bpaaDao = new BpaaDAC(Query);
|
||||
MWEB unmweb = new MWEB();
|
||||
DbCommand cmd = Query.NewCommand();
|
||||
|
||||
// 取出今年
|
||||
cmd.CommandText = @"select * from RYER where RYENO=@RYENO AND RYYER=@RYYER";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "RYENO", ryeno);
|
||||
Query.AddParam(cmd, "RYYER", ryyer);
|
||||
var thisYear = Query.Select(cmd);
|
||||
|
||||
if (thisYear.Rows.Count <= 0)
|
||||
{
|
||||
throw new Exception("找不到可結算的資料");
|
||||
}
|
||||
|
||||
var thisRecord = thisYear.Rows[0];
|
||||
if (GetInt32Value(thisRecord["RYNXT"]) + GetInt32Value(thisRecord["RYSLY"]) != Get可用特休(ryeno, ryyer, 12, 31))
|
||||
{
|
||||
throw new Exception("折算薪資時數 + 遞延下年時數 應等於 本年未休時數");
|
||||
}
|
||||
|
||||
// 計算下年時數
|
||||
|
||||
// 取得派駐專案
|
||||
var project = rasnDao.SelectRecentByDate(ryeno, new DateTime(ryyer, 12, 01));
|
||||
var rapyn = GetStringValue(project.Rows[0]["RAPYN"]);
|
||||
// 取得派駐專案的年初特休計算方式
|
||||
var alt = bpaaDao.GetYearBeginAnnualLeaveType(rapyn);
|
||||
|
||||
// 年初時數
|
||||
var ryyst = 0;
|
||||
if (alt == "S")
|
||||
{
|
||||
ryyst = GetInt32Value(thisRecord["RYYST"]);
|
||||
for (int m = 1; m <= 12; m++)
|
||||
{
|
||||
var ryhmm = GetInt32Value(thisRecord[string.Format("RYH{0:D2}", m)]);
|
||||
ryyst += ryhmm > 0 ? ryhmm : 0;
|
||||
}
|
||||
}
|
||||
|
||||
var ryyxt = GetInt32Value(thisRecord["RYNXT"]); // 遞延下年時數
|
||||
var rysly = GetInt32Value(thisRecord["RYSLY"]); // 結算薪資時數
|
||||
|
||||
// 若未輸入離職日期
|
||||
var bpsnDao = new BpsnDAC(Query);
|
||||
var bpedy = bpsnDao.GetBPEDY(ryeno);
|
||||
if (bpedy.Ticks == 0)
|
||||
{
|
||||
if (!CheckExists(ryeno, ryyer + 1))
|
||||
{
|
||||
cmd.CommandText =
|
||||
@"INSERT INTO RYER
|
||||
(TRDAT, TRMOD, TRUSR, RYENO, RYYER, RYTOT, RYUST, RYYST,
|
||||
RYH01, RYH02, RYH03, RYH04, RYH05, RYH06, RYH07, RYH08, RYH09, RYH10, RYH11, RYH12,
|
||||
RYD01, RYD02, RYD03, RYD04, RYD05, RYD06, RYD07, RYD08, RYD09, RYD10, RYD11, RYD12,
|
||||
RYSLY, RYNXT, RYRMK, RYYXT
|
||||
)
|
||||
VALUES
|
||||
(GETDATE(), 'INSERT', @TRUSR, @RYENO, @RYYER, @RYTOT, 0, @RYYST,
|
||||
@RYH01, @RYH02, @RYH03, @RYH04, @RYH05, @RYH06, @RYH07, @RYH08, @RYH09, @RYH10, @RYH11, @RYH12,
|
||||
@RYD01, @RYD02, @RYD03, @RYD04, @RYD05, @RYD06, @RYD07, @RYD08, @RYD09, @RYD10, @RYD11, @RYD12,
|
||||
@RYSLY, @RYNXT, @RYRMK, @RYYXT
|
||||
)";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "TRUSR", trusr);
|
||||
Query.AddParam(cmd, "RYENO", ryeno);
|
||||
Query.AddParam(cmd, "RYYER", ryyer + 1);
|
||||
Query.AddParam(cmd, "RYTOT", ryyst);
|
||||
Query.AddParam(cmd, "RYYST", ryyst);
|
||||
Query.AddParam(cmd, "RYH01", 0);
|
||||
Query.AddParam(cmd, "RYH02", 0);
|
||||
Query.AddParam(cmd, "RYH03", 0);
|
||||
Query.AddParam(cmd, "RYH04", 0);
|
||||
Query.AddParam(cmd, "RYH05", 0);
|
||||
Query.AddParam(cmd, "RYH06", 0);
|
||||
Query.AddParam(cmd, "RYH07", 0);
|
||||
Query.AddParam(cmd, "RYH08", 0);
|
||||
Query.AddParam(cmd, "RYH09", 0);
|
||||
Query.AddParam(cmd, "RYH10", 0);
|
||||
Query.AddParam(cmd, "RYH11", 0);
|
||||
Query.AddParam(cmd, "RYH12", 0);
|
||||
Query.AddParam(cmd, "RYD01", 1);
|
||||
Query.AddParam(cmd, "RYD02", 1);
|
||||
Query.AddParam(cmd, "RYD03", 1);
|
||||
Query.AddParam(cmd, "RYD04", 1);
|
||||
Query.AddParam(cmd, "RYD05", 1);
|
||||
Query.AddParam(cmd, "RYD06", 1);
|
||||
Query.AddParam(cmd, "RYD07", 1);
|
||||
Query.AddParam(cmd, "RYD08", 1);
|
||||
Query.AddParam(cmd, "RYD09", 1);
|
||||
Query.AddParam(cmd, "RYD10", 1);
|
||||
Query.AddParam(cmd, "RYD11", 1);
|
||||
Query.AddParam(cmd, "RYD12", 1);
|
||||
Query.AddParam(cmd, "RYSLY", 0);
|
||||
Query.AddParam(cmd, "RYNXT", 0);
|
||||
Query.AddParam(cmd, "RYRMK", "");
|
||||
Query.AddParam(cmd, "RYYXT", ryyxt);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd.CommandText =
|
||||
@"UPDATE RYER
|
||||
SET TRDAT = GETDATE() ,
|
||||
TRMOD = 'UPDATE' ,
|
||||
TRUSR = @TRUSR ,
|
||||
RYTOT = @RYTOT ,
|
||||
RYYST = @RYYST ,
|
||||
RYSLY = @RYSLY ,
|
||||
RYNXT = @RYNXT ,
|
||||
RYYXT = @RYYXT
|
||||
WHERE RYENO = @OLD_RYENO
|
||||
AND RYYER = @OLD_RYYER";
|
||||
cmd.Parameters.Clear();
|
||||
Query.AddParam(cmd, "TRUSR", trusr);
|
||||
Query.AddParam(cmd, "RYTOT", ryyst);
|
||||
Query.AddParam(cmd, "RYYST", ryyst);
|
||||
Query.AddParam(cmd, "RYSLY", 0);
|
||||
Query.AddParam(cmd, "RYNXT", 0);
|
||||
Query.AddParam(cmd, "RYYXT", ryyxt);
|
||||
Query.AddParam(cmd, "OLD_RYENO", ryeno);
|
||||
Query.AddParam(cmd, "OLD_RYYER", ryyer + 1);
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
var finalDate = new DateTime(ryyer, 12, 01);
|
||||
|
||||
// 取得派駐專案
|
||||
project = rasnDao.SelectRecentByDate(ryeno, finalDate);
|
||||
if (project.Rows.Count == 0)
|
||||
{
|
||||
throw new Exception("人員無派遣紀錄,無法結算");
|
||||
}
|
||||
rapyn = GetStringValue(project.Rows[0]["RAPYN"]);
|
||||
// 取得結算單號
|
||||
var finalREN = rsajDao.GetAnnualLeaveSalaryREN(finalDate, ryeno, rapyn);
|
||||
// 若結算單號已存在,需要有權限的人員才可以執行
|
||||
if (!string.IsNullOrEmpty(finalREN) && !unmweb.CheckRight("RYER_FINAL", WRightName.Execute, UserId))
|
||||
{
|
||||
throw new Exception("已經結算過,你沒有權限再次結算");
|
||||
}
|
||||
|
||||
WriteAnnualLeaveSalary(ryeno, finalDate, rysly, false);
|
||||
return "年度結算";
|
||||
}
|
||||
// 離職日期是今年才要結算
|
||||
else if (bpedy.Year == ryyer)
|
||||
{
|
||||
var finalDate = new DateTime(bpedy.Year, bpedy.Month, 01);
|
||||
|
||||
// 取得派駐專案
|
||||
project = rasnDao.SelectRecentByDate(ryeno, finalDate);
|
||||
if (project.Rows.Count == 0)
|
||||
{
|
||||
throw new Exception("人員無派遣紀錄,無法結算");
|
||||
}
|
||||
rapyn = GetStringValue(project.Rows[0]["RAPYN"]);
|
||||
// 取得結算單號
|
||||
var finalREN = rsajDao.GetAnnualLeaveSalaryREN(finalDate, ryeno, rapyn);
|
||||
// 若結算單號已存在,需要有權限的人員才可以執行
|
||||
if (!string.IsNullOrEmpty(finalREN) && !unmweb.CheckRight("RYER_FINAL", WRightName.Execute, UserId))
|
||||
{
|
||||
throw new Exception("已經結算過,你沒有權限再次結算");
|
||||
}
|
||||
|
||||
WriteAnnualLeaveSalary(ryeno, finalDate, rysly, true);
|
||||
return "離職結算";
|
||||
}
|
||||
//
|
||||
throw new Exception("離職日期年度不是本年,不予結算");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 寫入特休薪資結算
|
||||
/// </summary>
|
||||
/// <param name="ryeno">人員編號</param>
|
||||
/// <param name="date">結算日期</param>
|
||||
/// <param name="rysly">結算時數</param>
|
||||
/// <param name="isQuit">是否離職</param>
|
||||
internal void WriteAnnualLeaveSalary(string ryeno, DateTime date, int rysly, bool isQuit)
|
||||
{
|
||||
var rasnDao = new RasnDAC(Query);
|
||||
var rsajDao = new RsajDAC(Query);
|
||||
GetData getData = new GetData();
|
||||
Calculate calc = new Calculate();
|
||||
getData.Query = Query;
|
||||
|
||||
// 取得派駐專案
|
||||
var project = rasnDao.SelectRecentByDate(ryeno, date);
|
||||
if (project.Rows.Count == 0)
|
||||
{
|
||||
throw new Exception("人員無派遣紀錄,無法結算");
|
||||
}
|
||||
var rapyn = GetStringValue(project.Rows[0]["RAPYN"]);
|
||||
|
||||
// 取得月薪
|
||||
// 取得計算公式
|
||||
int bpsrm; // 月薪
|
||||
int bpp02; // 伙食津貼
|
||||
double dumm1; // 前二加班比率
|
||||
double dumm2; // 後二加班比率
|
||||
double dumm3; // 假日加班比率
|
||||
string bpovr; // 加班費公式
|
||||
string dumm4; // 請假扣款公式
|
||||
string dumm5; // 加班費計算方式
|
||||
// 取得月薪、伙食津貼、前二加班比率、後二加班比率、假日加班比率、加班費公式、請假扣款公式
|
||||
getData.GetRASN_Date_Bppyn_Bpeno_Overwork_Rate(
|
||||
date, rapyn, ryeno, out bpsrm, out bpp02, out dumm1, out dumm2, out dumm3, out bpovr, out dumm4, out dumm5);
|
||||
|
||||
// 計算特休薪資
|
||||
var rsamt = GetInt32Value(Math.Truncate(calc.CalcOverTime(bpsrm, bpp02, rysly, 1.0, 1.0, bpovr)));
|
||||
|
||||
// 寫入離職當月薪資加減項
|
||||
var rsdoc = isQuit
|
||||
? string.Format("{0}離職特休結算{1}小時", date.ToString("yyyyMMdd", WGuard1.TaiwanCulture), (int)(rysly / 60))
|
||||
: string.Format("{0}年度特休結算{1}小時", date.ToString("yyyy", WGuard1.TaiwanCulture), (int)(rysly / 60));
|
||||
var rsajRen = rsajDao.WriteAnnualLeaveSalary(date, ryeno, rapyn, rsamt, rsdoc);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class RyerSaveItem
|
||||
{
|
||||
public int result;
|
||||
public string message;
|
||||
public string userid;
|
||||
public string ryeno;
|
||||
public int ryyer;
|
||||
public int? ryyst;
|
||||
public int? ryyst_h;
|
||||
public int? ryyst_m;
|
||||
public int ryyxt;
|
||||
public string ryyxt_d;
|
||||
public int ryh01;
|
||||
public int ryh02;
|
||||
public int ryh03;
|
||||
public int ryh04;
|
||||
public int ryh05;
|
||||
public int ryh06;
|
||||
public int ryh07;
|
||||
public int ryh08;
|
||||
public int ryh09;
|
||||
public int ryh10;
|
||||
public int ryh11;
|
||||
public int ryh12;
|
||||
public int ryd01;
|
||||
public int ryd02;
|
||||
public int ryd03;
|
||||
public int ryd04;
|
||||
public int ryd05;
|
||||
public int ryd06;
|
||||
public int ryd07;
|
||||
public int ryd08;
|
||||
public int ryd09;
|
||||
public int ryd10;
|
||||
public int ryd11;
|
||||
public int ryd12;
|
||||
public int? rysly;
|
||||
public int? rysly_h;
|
||||
public int? rysly_m;
|
||||
public int? rynxt;
|
||||
public int? rynxt_h;
|
||||
public int? rynxt_m;
|
||||
public string ryrmk;
|
||||
public string ryvld;
|
||||
public string ryust;
|
||||
public string rylft;
|
||||
public string ryeny;
|
||||
public int rymmy;
|
||||
public int ryslq;
|
||||
public string ryenq;
|
||||
public int rymmq;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user