using System; using System.Data; using System.Data.Common; using System.ComponentModel; using System.Text; using Wellan.Data; using Wellan.Common; /// /// 薪資加減項資料處理類別 /// [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; } /// /// 取得某年月、某人員薪資加減項紀錄 /// /// 年月 /// 人員編號 /// 專案年度編號 /// 要加入的交易 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; } /// /// 寫特休結算薪資加減項 /// /// /// /// /// /// 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)); } /// /// 薪資加減項 Grid 分頁查詢 /// [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); } /// /// 薪資加減項 Grid 查詢筆數 /// [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)); } /// /// 組出薪資加減項 Grid 的查詢條件 (與舊 AddSearch 行為一致) /// 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 + "%")); } } }