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;
///
/// 人員差勤簽核檔
///
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);
}
}