Files
thinkyu/Web/App_Code/DAC/RpabDAC.cs
T
sryang f1cf00d06c feat: fmRparWorker GridView 改用 ObjectDataSource
- RparDAC 新增 SelectWorkerPage/SelectWorkerCount

- RpabDAC 新增 SelectRPABByRPREN

- dsRPARGrid/dsRPAB 改 ObjectDataSource;Search/Selected 調整
2026-09-10 10:57:21 +08:00

321 lines
10 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);
}
/// <summary>
/// 取得簽核關卡明細 (全部)
/// </summary>
[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);
}
}