chore: 首次簽入 Thinkyu ASP.NET 專案

- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
2026-09-10 09:42:37 +08:00
commit 577060bc78
2496 changed files with 501389 additions and 0 deletions
+260
View File
@@ -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'
}
+328
View File
@@ -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));
}
}
+126
View File
@@ -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));
}
}
+31
View File
@@ -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;
}
}
+66
View File
@@ -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);
}
}
+131
View File
@@ -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);
}
}
+531
View File
@@ -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);
}
}
+298
View File
@@ -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"));
}
}
+219
View File
@@ -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);
}
}
+129
View File
@@ -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; }
}
+93
View File
@@ -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
+143
View File
@@ -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;
}
}
+150
View File
@@ -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;
}
}
}
+58
View File
@@ -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; }
}
+595
View File
@@ -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; }
}
+280
View File
@@ -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);
}
}
}
+290
View File
@@ -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;
}
}
+55
View File
@@ -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);
}
}
+292
View File
@@ -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);
}
}
+179
View File
@@ -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
+439
View File
@@ -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.調; } }
}
+130
View File
@@ -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));
}
}
+166
View File
@@ -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; }
}
+788
View File
@@ -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