private bool nextFlowBtn(Punch_Confirm_Remedy_Bean Bean, out string flowCode, out string flowSN, ref string btnName, out Dictionary <string, string> toUserData, out string msg) { flowCode = ""; flowSN = ""; msg = ""; toUserData = new Dictionary <string, string>(); string OTEmpID = Bean.EmpID, AssignTo = Bean.ValidID, CompID = Bean.CompID, PunchDate = Bean.PunchDate, FlowCaseID = Bean.FlowCaseID; bool IsUpValidRankID = true; bool IsUpEmpRankID = false; bool isLastFlow, nextIsLastFlow; string signLineDefine = "", meassge = ""; string SignOrganID = "", SignID = "", SignIDComp = ""; string FlowStepID = ""; DbHelper db = new DbHelper(Aattendant._AattendantDBName); CommandHelper sb = db.CreateCommandHelper(); sb.Reset(); sb.Append("SELECT FlowStepID from " + FlowCustDB + "FlowOpenLog "); sb.Append(" where FlowCaseID=").AppendParameter("FlowCaseID", FlowCaseID); try { FlowStepID = db.ExecuteScalar(sb.BuildCommand()).ToString(); } catch (Exception) { FlowStepID = ""; msg = "永豐流程查無資料"; return(false); } //讀取現在關卡與下一關相關資料,因為不論回傳是否,我還是要資料,所以沒檢核return與meassge OBFlowUtility.QueryFlowDataAndToUserData(CompID, AssignTo, PunchDate, FlowCaseID, "P", out toUserData, out flowCode, out flowSN, out signLineDefine, out isLastFlow, out nextIsLastFlow, out meassge, "PO"); //如果QueryFlowDataAndToUserData出錯(HR關與改派容易出現沒有下一關卻無法判定現在是最後一關的狀況),會找不到現在是否為最後一關,這裡單獨再找一次 isLastFlow = isLastFlowNow(Bean.CompID, FlowCaseID, "P", "PO"); //如果沒有下一關資料,則用現在關卡資料取代(對應上述QueryFlowDataAndToUserData問題 ) if (toUserData.Count == 0) { //取[最近的行政or功能]資料 取代 [現在關卡]資料 DataTable dtHROtherFlowLog_toUD = PunchUpdate.HROtherFlowLog(FlowCaseID, true); toUserData.Add("SignLine", dtHROtherFlowLog_toUD.Rows[0]["SignLine"].ToString()); toUserData.Add("SignIDComp", dtHROtherFlowLog_toUD.Rows[0]["SignIDComp"].ToString()); toUserData.Add("SignID", AssignTo); toUserData.Add("SignOrganID", dtHROtherFlowLog_toUD.Rows[0]["SignOrganID"].ToString()); toUserData.Add("SignFlowOrganID", dtHROtherFlowLog_toUD.Rows[0]["SignFlowOrganID"].ToString()); } //如果下一關主管與現在主管相同,則再往上階找下一關主管資料 if (toUserData["SignID"] == AssignTo && signLineDefine != "3") { switch (toUserData["SignLine"]) { //HR線 或 行政線 case "4": case "1": if (EmpInfo.QueryOrganData(Bean.CompID, toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp)) { toUserData["SignID"] = SignID; toUserData["SignIDComp"] = SignIDComp; toUserData["SignOrganID"] = SignOrganID; toUserData["SignFlowOrganID"] = ""; } break; //功能線 case "2": if (EmpInfo.QueryFlowOrganData(toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp)) { toUserData["SignID"] = SignID; toUserData["SignIDComp"] = SignIDComp; toUserData["SignOrganID"] = ""; toUserData["SignFlowOrganID"] = SignOrganID; } break; //原本switch的是signLineDefine,現在改成toUserData["SignLine"]後, //case "3"裏頭的if基本只會用到else[非功能線一律走行政線],以防萬一先保留。 //改派 case "3": if (toUserData["SignLine"] == "2") { if (EmpInfo.QueryFlowOrganData(toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp)) { toUserData["SignID"] = SignID; toUserData["SignIDComp"] = SignIDComp; toUserData["SignOrganID"] = ""; toUserData["SignFlowOrganID"] = SignOrganID; } } else { if (EmpInfo.QueryOrganData(Bean.CompID, toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp)) { toUserData["SignID"] = SignID; toUserData["SignIDComp"] = SignIDComp; toUserData["SignOrganID"] = SignOrganID; toUserData["SignFlowOrganID"] = ""; } } break; } } RankIDCheck(CompID, FlowCaseID, out IsUpValidRankID, out IsUpEmpRankID); if (signLineDefine == "4") //HR特別關(後台沒有送簽功能的話,這裡不會用到) { if (IsUpValidRankID) //大於Rank16 { Session["btnVisible"] = "2"; //給永豐流程按鈕隱藏判斷 btnName = "btnClose"; //回傳按鈕名稱,給多筆審核組進DataTable傳給審核畫面 } else { if (FlowStepID == "A10") //預防HR送錯關,本來資料上HR關是只有A20或A40等最後一關 { Session["btnVisible"] = "0"; btnName = "btnApprove"; } else { Session["btnVisible"] = "1"; btnName = "btnReApprove"; } } } else if (!isLastFlowNow(CompID, FlowCaseID, "P", "PO")) //非最後一關 { if (IsUpEmpRankID) //大於Rank19 { Session["btnVisible"] = "2"; btnName = "btnClose"; } else { if (nextIsLastFlow) //下一關是否進入A40最後一關 { Session["btnVisible"] = "0"; btnName = "btnApprove"; } else { Session["btnVisible"] = "1"; btnName = "btnReApprove"; } } } else//最後一關 { if (OTEmpID.Trim().Equals(UserInfo.getUserInfo().UserID.Trim()))//當加班人是自己主管的代理人並審自己的加班單 { if (IsUpEmpRankID)//加班人RankID>19 { Session["btnVisible"] = "2"; btnName = "btnClose"; } else { Session["btnVisible"] = "1"; btnName = "btnReApprove"; } } else if (IsUpValidRankID)//大於Rank16 { Session["btnVisible"] = "2"; btnName = "btnClose"; } else { Session["btnVisible"] = "1"; btnName = "btnReApprove"; } } //如果找不到下一關主管資料,彈跳視窗並且return false if (toUserData["SignID"] == "") { toUserData["SignIDComp"] = UserInfo.getUserInfo().CompID.Trim(); toUserData["SignID"] = UserInfo.getUserInfo().UserID.Trim(); //Util.MsgBox("查無下一關主管資料"); if (isLastFlow) //最後一關不用找下一關主管 { return(true); } else { msg = "查無下一關主管資料"; return(false); } } return(true); }
/// <summary> /// 檢核所有東西,並將下一關相關資訊回傳 /// </summary> public static bool nextAssignTo(Punch_Confirm_Remedy_Bean Bean, out Dictionary <string, string> toUserData) { string CompID = Bean.CompID, AssignTo = Bean.ValidID, OTStartDate = Bean.PunchDate, FlowCaseID = Bean.FlowCaseID; bool isLastFlow, nextIsLastFlow; string flowCode = "", flowSN = "", signLineDefine = "", meassge = ""; string SignOrganID = "", SignID = "", SignIDComp = ""; //讀取現在關卡與下一關相關資料,因為不論回傳是否,我還是要資料,所以沒檢核回傳值與錯誤訊息 OBFlowUtility.QueryFlowDataAndToUserData(CompID, AssignTo, OTStartDate, FlowCaseID, "P", out toUserData, out flowCode, out flowSN, out signLineDefine, out isLastFlow, out nextIsLastFlow, out meassge, "PO"); //若是後台HR送簽依照填單人公司,否則用加班人公司 //string HRLogCompID = signLineDefine == "4" || flowCode.Trim() == "" ?Bean.CompID :Bean.CompID; string HRLogCompID = Bean.CompID; //如果沒有下一關資料,則用現在關卡資料取代 if (toUserData.Count == 0) { //取[最近的行政or功能]資料 取代 [現在關卡]資料 DataTable dtHROtherFlowLog_toUD = PunchUpdate.HROtherFlowLog(FlowCaseID, true); toUserData.Add("SignLine", dtHROtherFlowLog_toUD.Rows[0]["SignLine"].ToString()); toUserData.Add("SignIDComp", dtHROtherFlowLog_toUD.Rows[0]["SignIDComp"].ToString()); toUserData.Add("SignID", AssignTo); toUserData.Add("SignOrganID", dtHROtherFlowLog_toUD.Rows[0]["SignOrganID"].ToString()); toUserData.Add("SignFlowOrganID", dtHROtherFlowLog_toUD.Rows[0]["SignFlowOrganID"].ToString()); } //如果下一關主管與現在主管相同,則再往上階找下一關主管資料 if (toUserData["SignID"] == AssignTo && signLineDefine != "3") { switch (toUserData["SignLine"]) { //HR線 或 行政線 case "4": case "1": if (EmpInfo.QueryOrganData(HRLogCompID, toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp)) { toUserData["SignID"] = SignID; toUserData["SignIDComp"] = SignIDComp; toUserData["SignOrganID"] = SignOrganID; toUserData["SignFlowOrganID"] = ""; } break; //功能線 case "2": if (EmpInfo.QueryFlowOrganData(toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp)) { toUserData["SignID"] = SignID; toUserData["SignIDComp"] = SignIDComp; toUserData["SignOrganID"] = ""; toUserData["SignFlowOrganID"] = SignOrganID; } break; //原本switch的是signLineDefine,現在改成toUserData["SignLine"]後, //case "3"裏頭的if基本只會用到else[非功能線一律走行政線],以防萬一先保留。 //改派 case "3": if (toUserData["SignLine"] == "2") { if (EmpInfo.QueryFlowOrganData(toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp)) { toUserData["SignID"] = SignID; toUserData["SignIDComp"] = SignIDComp; toUserData["SignOrganID"] = ""; toUserData["SignFlowOrganID"] = SignOrganID; } } else { if (EmpInfo.QueryOrganData(HRLogCompID, toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp)) { toUserData["SignID"] = SignID; toUserData["SignIDComp"] = SignIDComp; toUserData["SignOrganID"] = SignOrganID; toUserData["SignFlowOrganID"] = ""; } } break; } } //如果找不到下一關主管資料,彈跳視窗並且return false if (toUserData["SignID"] == "") { toUserData["SignIDComp"] = UserInfo.getUserInfo().CompID.Trim(); toUserData["SignID"] = UserInfo.getUserInfo().UserID.Trim(); //Util.MsgBox("查無下一關主管資料"); if (isLastFlow) //最後一關不用找下一關主管 { return(true); } else { return(false); } } return(true); }