- RsajDAC 新增 SelectPage/SelectCount - dsRSAJGrid 改 ObjectDataSource;Search/Selected 調整
191 lines
7.0 KiB
C#
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 + "%"));
|
|
}
|
|
}
|
|
} |