523 lines
21 KiB
C#
523 lines
21 KiB
C#
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表單簽核明細;
|
|
}
|
|
|
|
}
|
|
} |