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; /// /// 人員差勤簽核檔 /// [DataObject(true)] 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); } /// /// 送簽 /// /// 單號 /// 簽核人員 public void 送簽(DbTransaction tran, string RPREN, string RPAPN, string RPANO, string RPENO, string TRUSR) { InsertOne(tran, RPREN, RPAPN, RPANO, RPENO, TRUSR); } /// /// 抽單 /// /// 單號 /// 簽核人員 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 ""; } } /// /// 核准 /// /// 單號 /// 關卡 /// 簽核日期 /// 簽核備註 public void 核准(DbTransaction tran, string RPREN, string RPANO, DateTime RPDAT, string RPDOC, string TRUSR) { UpdateOne(tran, RPREN, RPANO, RPDAT, "Y", RPDOC, TRUSR); } /// /// 駁回 /// /// 單號 /// 簽核人員 /// 簽核日期 /// 簽核備註 public void 不核准(DbTransaction tran, string RPREN, string RPANO, DateTime RPDAT, string RPDOC, string TRUSR) { UpdateOne(tran, RPREN, RPANO, RPDAT, "N", RPDOC, TRUSR); } /// /// 取消本關簽核 /// public void 取消本關(DbTransaction tran, string RPREN, string 本關, string TRUSR) { UpdateOne(tran, RPREN, 本關, DBNull.Value, DBNull.Value, DBNull.Value, TRUSR); } /// /// 取消本關簽核,並退回上一關 /// 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 ""; } } /// /// 刪除某張單據的簽核資料 /// /// 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); } /// /// 取得簽核關卡明細 (已簽核) /// [DataObjectMethod(DataObjectMethodType.Select)] public DataTable SelectRPAB(string RPREN) { DbCommand cmd = Query.NewCommand( @"SELECT RPANO, RPAPN, RPENO, RPDAT, RPAPP, RPDOC FROM RPAB WHERE RPREN = @RPREN AND RPDAT IS NOT NULL"); cmd.Parameters.Add(Query.NewParameter("RPREN", RPREN)); return Query.Select(cmd); } /// /// 取得簽核關卡明細 (全部) /// [DataObjectMethod(DataObjectMethodType.Select)] public DataTable SelectRPABByRPREN(string RPREN) { DbCommand cmd = Query.NewCommand( @"SELECT RPANO, RPAPN, RPENO, RPDAT, RPAPP, RPDOC FROM RPAB WHERE RPREN = @RPREN"); cmd.Parameters.Add(Query.NewParameter("RPREN", RPREN)); return Query.Select(cmd); } }