Files
thinkyu/Web/App_Code/DAC/RsajDAC.cs
T
sryang b66279e5fa feat: fmRsaj GridView 改用 ObjectDataSource
- RsajDAC 新增 SelectPage/SelectCount

- dsRSAJGrid 改 ObjectDataSource;Search/Selected 調整
2026-09-10 11:00:06 +08:00

191 lines
7.0 KiB
C#

using System;
using System.Data;
using System.Data.Common;
using System.ComponentModel;
using System.Text;
using Wellan.Data;
using Wellan.Common;
/// <summary>
/// 薪資加減項資料處理類別
/// </summary>
[DataObject(true)]
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));
}
/// <summary>
/// 薪資加減項 Grid 分頁查詢
/// </summary>
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable SelectPage(int startRowIndex, int maximumRows, string RSENO, string RSPYN)
{
DbCommand cmd = Query.NewCommand();
StringBuilder filter = new StringBuilder();
BuildFilter(filter, cmd, RSENO, RSPYN);
cmd.CommandText = String.Format(
@"SELECT * FROM
(
SELECT *, ROW_NUMBER() OVER (ORDER BY RSYMM DESC, RSREN DESC) AS ROWID
FROM RSAJ WHERE 1=1 {0}
) AS TMP
WHERE ROWID BETWEEN @STARTROWINDEX + 1 AND @STARTROWINDEX + @MAXIMUMROWS
ORDER BY ROWID",
filter.ToString());
cmd.Parameters.Add(Query.NewParameter("STARTROWINDEX", startRowIndex));
cmd.Parameters.Add(Query.NewParameter("MAXIMUMROWS", maximumRows));
return Query.Select(cmd);
}
/// <summary>
/// 薪資加減項 Grid 查詢筆數
/// </summary>
[DataObjectMethod(DataObjectMethodType.Select)]
public int SelectCount(string RSENO, string RSPYN)
{
DbCommand cmd = Query.NewCommand();
StringBuilder filter = new StringBuilder();
BuildFilter(filter, cmd, RSENO, RSPYN);
cmd.CommandText = String.Format("SELECT COUNT(*) FROM RSAJ WHERE 1=1 {0}", filter.ToString());
return WDAC.GetInt32Value(Query.ExecuteScalar(cmd));
}
/// <summary>
/// 組出薪資加減項 Grid 的查詢條件 (與舊 AddSearch 行為一致)
/// </summary>
private void BuildFilter(StringBuilder sb, DbCommand cmd, string RSENO, string RSPYN)
{
if (!string.IsNullOrEmpty(RSENO))
{
sb.Append(" AND RSENO LIKE @RSENO1 ");
cmd.Parameters.Add(Query.NewParameter("RSENO1", RSENO + "%"));
}
if (!string.IsNullOrEmpty(RSPYN))
{
sb.Append(" AND RSPYN LIKE @RSPYN1 ");
cmd.Parameters.Add(Query.NewParameter("RSPYN1", RSPYN + "%"));
}
}
}