- RpabDAC 新增 SelectRPAB - dsRPAB2/dsRPAB 改 ObjectDataSource;dsRPAB2_Selecting 改 ODS 事件
307 lines
9.6 KiB
C#
307 lines
9.6 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// 人員差勤簽核檔
|
|
/// </summary>
|
|
[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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 送簽
|
|
/// </summary>
|
|
/// <param name="RPREN">單號</param>
|
|
/// <param name="RPENO">簽核人員</param>
|
|
public void 送簽(DbTransaction tran, string RPREN, string RPAPN, string RPANO, string RPENO, string TRUSR)
|
|
{
|
|
InsertOne(tran, RPREN, RPAPN, RPANO, RPENO, TRUSR);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 抽單
|
|
/// </summary>
|
|
/// <param name="RPREN">單號</param>
|
|
/// <param name="RPENO">簽核人員</param>
|
|
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 "";
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 核准
|
|
/// </summary>
|
|
/// <param name="RPREN">單號</param>
|
|
/// <param name="RPANO">關卡</param>
|
|
/// <param name="RPDAT">簽核日期</param>
|
|
/// <param name="RPDOC">簽核備註</param>
|
|
public void 核准(DbTransaction tran, string RPREN, string RPANO,
|
|
DateTime RPDAT, string RPDOC, string TRUSR)
|
|
{
|
|
UpdateOne(tran, RPREN, RPANO, RPDAT, "Y", RPDOC, TRUSR);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 駁回
|
|
/// </summary>
|
|
/// <param name="RPREN">單號</param>
|
|
/// <param name="RPENO">簽核人員</param>
|
|
/// <param name="RPDAT">簽核日期</param>
|
|
/// <param name="RPDOC">簽核備註</param>
|
|
public void 不核准(DbTransaction tran, string RPREN, string RPANO,
|
|
DateTime RPDAT, string RPDOC, string TRUSR)
|
|
{
|
|
UpdateOne(tran, RPREN, RPANO, RPDAT, "N", RPDOC, TRUSR);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取消本關簽核
|
|
/// </summary>
|
|
public void 取消本關(DbTransaction tran, string RPREN, string 本關, string TRUSR)
|
|
{
|
|
UpdateOne(tran, RPREN, 本關, DBNull.Value, DBNull.Value, DBNull.Value, TRUSR);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取消本關簽核,並退回上一關
|
|
/// </summary>
|
|
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 "";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 刪除某張單據的簽核資料
|
|
/// </summary>
|
|
/// <param name="RPREN"></param>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取得簽核關卡明細 (已簽核)
|
|
/// </summary>
|
|
[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);
|
|
}
|
|
} |