chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -0,0 +1,523 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using WebLib;
|
||||
|
||||
namespace Education.Forms.簽核
|
||||
{
|
||||
[DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
|
||||
[DefaultBindingProperty("表單ID")]
|
||||
public partial class 送簽 : System.Web.UI.UserControl
|
||||
{
|
||||
private FormBase parent;
|
||||
private DAC_表單簽核主檔 Dao表單簽核;
|
||||
private DAC_表單簽核明細 Dao表單簽核明細;
|
||||
private DAC_組織人員 Dao組織人員;
|
||||
private DAC_組織圖 Dao組織圖;
|
||||
private DAC_職務 Dao職務;
|
||||
|
||||
protected void Page_Init(object sender, EventArgs e)
|
||||
{
|
||||
parent = (Page as FormBase);
|
||||
|
||||
Dao表單簽核 = new DAC_表單簽核主檔(parent.conn);
|
||||
Dao表單簽核明細 = new DAC_表單簽核明細(parent.conn);
|
||||
Dao組織人員 = new DAC_組織人員(parent.conn);
|
||||
Dao組織圖 = new DAC_組織圖(parent.conn);
|
||||
Dao職務 = new DAC_職務(parent.conn);
|
||||
}
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!parent.IsPostBack)
|
||||
Refresh();
|
||||
}
|
||||
|
||||
/* ===== 舊 Refresh 保留 =====
|
||||
public void Refresh()
|
||||
{
|
||||
NameValueList 簽核人員List = new NameValueList();
|
||||
NameValueList 抽單簽核人員List = new NameValueList();
|
||||
組織人員List 組織List = null;
|
||||
|
||||
// 取得表單簽核狀態
|
||||
表單簽核主檔 status = Dao表單簽核.GetLastStatus(表單類別, 表單ID);
|
||||
if (status != null)
|
||||
組織List = Dao組織人員.Select人員所屬的組織(status.送簽人員);
|
||||
else
|
||||
組織List = Dao組織人員.Select人員所屬的組織(parent.UserId);
|
||||
|
||||
string 目前關卡 = "0";
|
||||
if (status != null)
|
||||
{
|
||||
表單簽核明細 detail = Dao表單簽核明細.GetLast(status.簽核ID);
|
||||
目前關卡 = detail.關ID;
|
||||
|
||||
// 若抽單且已簽核,視同未送簽
|
||||
if (status.應簽關數 == "D" && status.已簽關數 == "D")
|
||||
目前關卡 = "0";
|
||||
|
||||
// 若不核准,視同未送簽
|
||||
if (status.最終結果 == "N")
|
||||
目前關卡 = "0";
|
||||
}
|
||||
|
||||
if (目前關卡 == "0" && status == null)
|
||||
lbStatus.Text = "尚未送簽";
|
||||
if (目前關卡 == "0" && status != null && status.最終結果 == "N")
|
||||
lbStatus.Text = "先前送簽不核准";
|
||||
if (目前關卡 == "0" && status != null && status.應簽關數 == "D" && status.已簽關數 == "D")
|
||||
lbStatus.Text = "先前已抽單";
|
||||
if (目前關卡 == "1" && status.已簽關數 == "0")
|
||||
lbStatus.Text = "已送簽,等待第一關簽核";
|
||||
if (目前關卡 == "2" && status.已簽關數 == "1")
|
||||
lbStatus.Text = "第一關已簽核,等待第二關簽核";
|
||||
if (目前關卡 == "3" && status.已簽關數 == "2")
|
||||
lbStatus.Text = "第二關已簽核,等待第三關簽核";
|
||||
if (目前關卡 == "1" && status.已簽關數 == "1" && status.應簽關數 == "1")
|
||||
lbStatus.Text = "已簽核完畢";
|
||||
if (目前關卡 == "2" && status.已簽關數 == "2" && status.應簽關數 == "2")
|
||||
lbStatus.Text = "已簽核完畢";
|
||||
if (目前關卡 == "3" && status.已簽關數 == "3" && status.應簽關數 == "3")
|
||||
lbStatus.Text = "已簽核完畢";
|
||||
if (目前關卡 == "D")
|
||||
lbStatus.Text = "已抽單,等待簽核";
|
||||
|
||||
// 改 UI 的可視與否
|
||||
btnApprove.Visible = Dao表單簽核.可簽核(表單類別, 表單ID, parent.UserId);
|
||||
btnCancel.Visible = Dao表單簽核.可取消(表單類別, 表單ID, parent.UserId);
|
||||
btnSend.Visible = 可送簽 && Dao表單簽核.可送簽(表單類別, 表單ID);
|
||||
btnWithDraw.Visible = 可送簽 && Dao表單簽核.可撤簽(表單類別, 表單ID, parent.UserId);
|
||||
|
||||
pnlApprove.Visible = btnApprove.Visible;
|
||||
// pnlNext.Visible = (btnSend.Visible || btnApprove.Visible) && (目前關卡 == "0" || 目前關卡 == "1" || 目前關卡 == "2");
|
||||
pnlNext.Visible = (btnSend.Visible || btnApprove.Visible) && (目前關卡 == "0" || 目前關卡 == "1");
|
||||
|
||||
pnlWithdraw.Visible = btnWithDraw.Visible;
|
||||
|
||||
if (pnlApprove.Visible || pnlNext.Visible || pnlWithdraw.Visible)
|
||||
this.Attributes.CssStyle["display"] = "block";
|
||||
else
|
||||
this.Attributes.CssStyle["display"] = "none";
|
||||
|
||||
if (pnlNext.Visible)
|
||||
{
|
||||
switch (目前關卡)
|
||||
{
|
||||
case "0": // 第一關是主管 2022-03-15 修改
|
||||
// Get部門簽核人員(PublicVariable.人資部ID, 簽核人員List);
|
||||
if (status != null)
|
||||
{
|
||||
Get直接主管(status.送簽人員, 簽核人員List, 組織List);
|
||||
}
|
||||
else
|
||||
{
|
||||
Get直接主管(parent.UserId, 簽核人員List, 組織List);
|
||||
}
|
||||
break;
|
||||
case "1": // 下一關是總管理處 2022-03-15 修改
|
||||
// 取出這個人員的直接主管,以及所屬組織的主管
|
||||
// Get直接主管(status.送簽人員, 簽核人員List, 組織List);
|
||||
Get部門簽核人員(PublicVariable.總管理處ID, 簽核人員List);
|
||||
break;
|
||||
case "2": // 下一關沒有了 2022-03-15 修改
|
||||
// Get部門簽核人員(PublicVariable.總管理處ID, 簽核人員List);
|
||||
//DataTable 人員dt = Dao組織人員.Select組織人員(PublicVariable.總管理處ID);
|
||||
break;
|
||||
case "3": // 總管理處
|
||||
break;
|
||||
case "D": // 抽單
|
||||
break;
|
||||
}
|
||||
|
||||
ddlApprover.DataSource = 簽核人員List;
|
||||
ddlApprover.DataTextField = "Name";
|
||||
ddlApprover.DataValueField = "Value";
|
||||
ddlApprover.DataBind();
|
||||
}
|
||||
|
||||
if (status != null)
|
||||
{
|
||||
if (pnlWithdraw.Visible)
|
||||
{
|
||||
Get直接主管(status.送簽人員, 抽單簽核人員List, 組織List);
|
||||
ddlWithdrawApprover.DataSource = 抽單簽核人員List;
|
||||
ddlWithdrawApprover.DataTextField = "Name";
|
||||
ddlWithdrawApprover.DataValueField = "Value";
|
||||
ddlWithdrawApprover.DataBind();
|
||||
}
|
||||
|
||||
ds簽核歷程.SelectParameters["簽核ID"].DefaultValue = status.簽核ID.ToString();
|
||||
gv簽核歷程.DataBind();
|
||||
gv簽核歷程.Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
gv簽核歷程.Visible = false;
|
||||
}
|
||||
}
|
||||
===== 舊 Refresh 結束 ===== */
|
||||
|
||||
/// <summary>
|
||||
/// 新 Refresh:固定簽核人員清單,不從資料庫動態查詢
|
||||
/// </summary>
|
||||
public void Refresh()
|
||||
{
|
||||
表單簽核主檔 status = Dao表單簽核.GetLastStatus(表單類別, 表單ID);
|
||||
|
||||
string 目前關卡 = "0";
|
||||
if (status != null)
|
||||
{
|
||||
表單簽核明細 detail = Dao表單簽核明細.GetLast(status.簽核ID);
|
||||
目前關卡 = detail.關ID;
|
||||
|
||||
if (status.應簽關數 == "D" && status.已簽關數 == "D")
|
||||
目前關卡 = "0";
|
||||
|
||||
if (status.最終結果 == "N")
|
||||
目前關卡 = "0";
|
||||
}
|
||||
|
||||
if (目前關卡 == "0" && status == null)
|
||||
lbStatus.Text = "尚未送簽";
|
||||
if (目前關卡 == "0" && status != null && status.最終結果 == "N")
|
||||
lbStatus.Text = "先前送簽不核准";
|
||||
if (目前關卡 == "0" && status != null && status.應簽關數 == "D" && status.已簽關數 == "D")
|
||||
lbStatus.Text = "先前已抽單";
|
||||
if (目前關卡 == "1" && status.已簽關數 == "0")
|
||||
lbStatus.Text = "已送簽,等待第一關簽核";
|
||||
if (目前關卡 == "2" && status.已簽關數 == "1")
|
||||
lbStatus.Text = "第一關已簽核,等待第二關簽核";
|
||||
if (目前關卡 == "3" && status.已簽關數 == "2")
|
||||
lbStatus.Text = "第二關已簽核,等待第三關簽核";
|
||||
if (目前關卡 == "1" && status.已簽關數 == "1" && status.應簽關數 == "1")
|
||||
lbStatus.Text = "已簽核完畢";
|
||||
if (目前關卡 == "2" && status.已簽關數 == "2" && status.應簽關數 == "2")
|
||||
lbStatus.Text = "已簽核完畢";
|
||||
if (目前關卡 == "3" && status.已簽關數 == "3" && status.應簽關數 == "3")
|
||||
lbStatus.Text = "已簽核完畢";
|
||||
if (目前關卡 == "D")
|
||||
lbStatus.Text = "已抽單,等待簽核";
|
||||
|
||||
btnApprove.Visible = Dao表單簽核.可簽核(表單類別, 表單ID, parent.UserId);
|
||||
btnCancel.Visible = Dao表單簽核.可取消(表單類別, 表單ID, parent.UserId);
|
||||
btnSend.Visible = 可送簽 && Dao表單簽核.可送簽(表單類別, 表單ID);
|
||||
btnWithDraw.Visible = 可送簽 && Dao表單簽核.可撤簽(表單類別, 表單ID, parent.UserId);
|
||||
|
||||
pnlApprove.Visible = btnApprove.Visible;
|
||||
pnlNext.Visible = (btnSend.Visible || btnApprove.Visible) && (目前關卡 == "0" || 目前關卡 == "1");
|
||||
pnlWithdraw.Visible = btnWithDraw.Visible;
|
||||
|
||||
if (pnlApprove.Visible || pnlNext.Visible || pnlWithdraw.Visible)
|
||||
this.Attributes.CssStyle["display"] = "block";
|
||||
else
|
||||
this.Attributes.CssStyle["display"] = "none";
|
||||
|
||||
if (pnlNext.Visible)
|
||||
{
|
||||
NameValueList 簽核人員List = new NameValueList();
|
||||
switch (目前關卡)
|
||||
{
|
||||
case "0":
|
||||
Label1.Text = "第一關簽核人員:";
|
||||
簽核人員List.Add(new NameValueItem("陳琬婷", "02070"));
|
||||
break;
|
||||
case "1":
|
||||
Label1.Text = "第二關簽核人員:";
|
||||
簽核人員List.Add(new NameValueItem("黃佳萍", "00002"));
|
||||
簽核人員List.Add(new NameValueItem("吳惠如", "00003"));
|
||||
break;
|
||||
}
|
||||
|
||||
ddlApprover.DataSource = 簽核人員List;
|
||||
ddlApprover.DataTextField = "Name";
|
||||
ddlApprover.DataValueField = "Value";
|
||||
ddlApprover.DataBind();
|
||||
}
|
||||
|
||||
if (status != null)
|
||||
{
|
||||
if (pnlWithdraw.Visible)
|
||||
{
|
||||
NameValueList 抽單簽核人員List = new NameValueList();
|
||||
抽單簽核人員List.Add(new NameValueItem("陳琬婷", "02070"));
|
||||
|
||||
ddlWithdrawApprover.DataSource = 抽單簽核人員List;
|
||||
ddlWithdrawApprover.DataTextField = "Name";
|
||||
ddlWithdrawApprover.DataValueField = "Value";
|
||||
ddlWithdrawApprover.DataBind();
|
||||
}
|
||||
|
||||
ds簽核歷程.SelectParameters["簽核ID"].DefaultValue = status.簽核ID.ToString();
|
||||
gv簽核歷程.DataBind();
|
||||
gv簽核歷程.Visible = true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
gv簽核歷程.Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 從部門取得人員,不包括本人
|
||||
/// </summary>
|
||||
/// <param name="部門ID"></param>
|
||||
/// <param name="簽核人員List"></param>
|
||||
private void Get部門簽核人員(int 部門ID, NameValueList 簽核人員List)
|
||||
{
|
||||
簽核人員List.Clear();
|
||||
DataTable 人員dt = Dao組織人員.Select組織人員(部門ID);
|
||||
foreach (DataRow r in 人員dt.Rows)
|
||||
{
|
||||
string 人員ID = DAC.GetString(r["人員ID"]);
|
||||
string 人員姓名 = DAC.GetString(r["人員姓名"]);
|
||||
|
||||
//if (人員ID.Length > 0 && 人員ID.CompareTo(parent.UserId) != 0 &&
|
||||
// !簽核人員List.ValueExists(人員ID))
|
||||
if (人員ID.Length > 0 && !簽核人員List.ValueExists(人員ID))
|
||||
{
|
||||
簽核人員List.Add(人員姓名, 人員ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得本人的直屬主管、部門主管以及以上各部門主管
|
||||
/// </summary>
|
||||
/// <param name="部門ID"></param>
|
||||
/// <param name="簽核人員List"></param>
|
||||
private void Get直接主管(string 員工編號, NameValueList 簽核人員List, 組織人員List 組織List)
|
||||
{
|
||||
foreach (組織人員 item in 組織List)
|
||||
{
|
||||
// 直接主管
|
||||
if (item.直接主管ID.Length > 0 &&
|
||||
item.直接主管ID.CompareTo(員工編號) != 0 &&
|
||||
!簽核人員List.ValueExists(item.直接主管ID))
|
||||
{
|
||||
簽核人員List.Add(String.Format("{0} {1}", item.直接主管ID, parent.Get員工姓名(item.直接主管ID)), item.直接主管ID);
|
||||
}
|
||||
|
||||
// 所屬組織主管
|
||||
組織圖List 組織data = Dao組織圖.SelectOne(item.組織ID);
|
||||
if (組織data.Count > 0)
|
||||
{
|
||||
string 主管ID = 組織data[0].部門主管;
|
||||
|
||||
if (主管ID.Length > 0 &&
|
||||
主管ID.CompareTo(員工編號) != 0 &&
|
||||
!簽核人員List.ValueExists(主管ID))
|
||||
{
|
||||
簽核人員List.Add(String.Format("{0} {1}", 主管ID, parent.Get員工姓名(主管ID)), 主管ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string 表單類別
|
||||
{
|
||||
get { return DAC.GetString(ViewState["表單類別"]); }
|
||||
set { ViewState["表單類別"] = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 顯示在送簽區塊左上角的標題,說明此送簽區塊的性質
|
||||
/// </summary>
|
||||
public string Title
|
||||
{
|
||||
get { return lbTitle.Text; }
|
||||
set
|
||||
{
|
||||
lbTitle.Text = value;
|
||||
divTitle.Visible = !String.IsNullOrEmpty(value);
|
||||
}
|
||||
}
|
||||
|
||||
[Bindable(true)]
|
||||
public string 表單ID
|
||||
{
|
||||
get { return DAC.GetString(ViewState["表單ID"]); }
|
||||
set { ViewState["表單ID"] = value; }
|
||||
}
|
||||
|
||||
[Bindable(true)]
|
||||
public string 表單ID格式
|
||||
{
|
||||
get { return DAC.GetString(ViewState["表單ID格式"]); }
|
||||
set { ViewState["表單ID格式"] = value; }
|
||||
}
|
||||
|
||||
[Bindable(true)]
|
||||
public bool 可送簽
|
||||
{
|
||||
get { return DAC.GetBoolean(ViewState["可送簽"]); }
|
||||
set { ViewState["可送簽"] = value; }
|
||||
}
|
||||
|
||||
[Bindable(true)]
|
||||
public int 訓練課程企劃編號
|
||||
{
|
||||
get { return DAC.GetInt32(ViewState["訓練課程企劃編號"]); }
|
||||
set { ViewState["訓練課程企劃編號"] = value; }
|
||||
}
|
||||
|
||||
[Bindable(true)]
|
||||
public int 編號2
|
||||
{
|
||||
get { return DAC.GetInt32(ViewState["編號2"]); }
|
||||
set { ViewState["編號2"] = value; }
|
||||
}
|
||||
|
||||
public string 提示文字
|
||||
{
|
||||
get { return lbHint.Text; }
|
||||
set { lbHint.Text = value; }
|
||||
}
|
||||
|
||||
public event EventHandler Approved;
|
||||
public event EventHandler Rejected;
|
||||
public event EventHandler Canceled;
|
||||
public event EventHandler Withdrawn;
|
||||
|
||||
protected void btnApprove_Click(object sender, EventArgs e)
|
||||
{
|
||||
表單簽核主檔 status = Dao表單簽核.GetLastStatus(表單類別, 表單ID);
|
||||
if (status == null)
|
||||
return;
|
||||
|
||||
// 一般的簽核
|
||||
if (status.應簽關數.CompareTo("D") != 0)
|
||||
{
|
||||
// 核准
|
||||
if (rblApprove.SelectedValue == "Y")
|
||||
{
|
||||
bool 有下關 = Dao表單簽核.核准(status.簽核ID, parent.UserId, txtApproveText.Text, ddlApprover.SelectedValue);
|
||||
|
||||
if (有下關)
|
||||
{
|
||||
// 發送送簽郵件
|
||||
string 電子郵件 = parent.Dao員工.Get電子郵件(ddlApprover.SelectedValue);
|
||||
string 員工姓名 = parent.Dao員工.Get員工姓名(ddlApprover.SelectedValue);
|
||||
發送郵件 發送郵件 = new 發送郵件();
|
||||
發送郵件.Context = Context;
|
||||
發送郵件.發送簽核郵件(status.簽核ID, 員工姓名, 電子郵件);
|
||||
}
|
||||
|
||||
if (Approved != null)
|
||||
Approved(sender, e);
|
||||
}
|
||||
// 不核准
|
||||
if (rblApprove.SelectedValue == "N")
|
||||
{
|
||||
Dao表單簽核.不核准(status.簽核ID, parent.UserId, txtApproveText.Text);
|
||||
if (Rejected != null)
|
||||
Rejected(sender, e);
|
||||
}
|
||||
}
|
||||
// 撤簽的簽核
|
||||
else
|
||||
{
|
||||
// 核准
|
||||
if (rblApprove.SelectedValue == "Y")
|
||||
{
|
||||
Dao表單簽核.撤簽核准(status.簽核ID, parent.UserId, txtApproveText.Text);
|
||||
if (Approved != null)
|
||||
Approved(sender, e);
|
||||
}
|
||||
// 不核准
|
||||
if (rblApprove.SelectedValue == "N")
|
||||
{
|
||||
Dao表單簽核.撤簽不核准(status.簽核ID, parent.UserId, txtApproveText.Text);
|
||||
if (Rejected != null)
|
||||
Rejected(sender, e);
|
||||
}
|
||||
}
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
protected void btnCancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
表單簽核主檔 status = Dao表單簽核.GetLastStatus(表單類別, 表單ID);
|
||||
if (status == null)
|
||||
return;
|
||||
|
||||
Dao表單簽核.取消簽核(status.簽核ID);
|
||||
if (Canceled != null)
|
||||
Canceled(sender, e);
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
public event SendEventHandler Send;
|
||||
public event SendingEventHandler Sending;
|
||||
|
||||
protected void btnSend_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Sending != null)
|
||||
{
|
||||
SendingEventArgs e1 = new SendingEventArgs() { 允許送簽 = true };
|
||||
Sending(sender, e1);
|
||||
if (!e1.允許送簽)
|
||||
return;
|
||||
}
|
||||
|
||||
// 送簽
|
||||
int 簽核ID = Dao表單簽核.送簽(表單類別, 表單ID, parent.UserId, ddlApprover.SelectedValue, 表單ID格式,
|
||||
訓練課程企劃編號, 編號2);
|
||||
|
||||
// 發送送簽郵件
|
||||
string 電子郵件 = parent.Dao員工.Get電子郵件(ddlApprover.SelectedValue);
|
||||
string 員工姓名 = parent.Dao員工.Get員工姓名(ddlApprover.SelectedValue);
|
||||
發送郵件 發送郵件 = new 發送郵件();
|
||||
發送郵件.Context = Context;
|
||||
發送郵件.發送簽核郵件(簽核ID, 員工姓名, 電子郵件);
|
||||
|
||||
if (Send != null)
|
||||
Send(sender, new SendEventArgs() { 簽核ID = 簽核ID });
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
protected void btnWithDraw_Click(object sender, EventArgs e)
|
||||
{
|
||||
// 抽單
|
||||
表單簽核主檔 status = Dao表單簽核.GetLastStatus(表單類別, 表單ID);
|
||||
if (status == null)
|
||||
return;
|
||||
|
||||
// 發送撤簽郵件
|
||||
string 電子郵件 = parent.Dao員工.Get電子郵件(ddlWithdrawApprover.SelectedValue);
|
||||
string 員工姓名 = parent.Dao員工.Get員工姓名(ddlWithdrawApprover.SelectedValue);
|
||||
|
||||
發送郵件 發送郵件 = new 發送郵件();
|
||||
發送郵件.Context = Context;
|
||||
發送郵件.發送撤簽郵件(status.簽核ID, 員工姓名, 電子郵件);
|
||||
|
||||
Dao表單簽核.撤簽(status.簽核ID, ddlWithdrawApprover.SelectedValue);
|
||||
|
||||
if (Withdrawn != null)
|
||||
Withdrawn(sender, e);
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
protected string Get員工姓名(string 員工編號)
|
||||
{
|
||||
return parent.Get員工姓名(員工編號);
|
||||
}
|
||||
|
||||
protected void ds簽核歷程_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
|
||||
{
|
||||
e.ObjectInstance = Dao表單簽核明細;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user