private bool isLastFlowNow(string CompID, string flowCaseID, string Model, string insystemID) { DataRow retrunRow; string message = ""; try { if (!OBFlowUtility.QueryHRFlowEngineDatas_Now(CompID, flowCaseID, Model, out retrunRow, out message, insystemID)) { return(false); } else if (retrunRow.Table.Rows.Count > 0) { string FlowEndFlag = retrunRow["FlowEndFlag"].ToString(); return(FlowEndFlag == "1" ? true : false); } else { return(true); } } catch (Exception) { return(true); } }
/// <summary> /// Insert_UpdateVisitFormSign /// 公出申請、公出修改 /// 申請後送簽流程 /// </summary> /// <param name="model">畫面model</param> /// <param name="datas">回傳資料</param> /// <param name="msg">回傳訊息</param> /// <returns>bool</returns> public static bool Insert_UpdateVisitFormSign(OnBizPublicOutModel model, string regStr, out long seccessCount, out string msg) { bool result = false; seccessCount = 0; msg = ""; try { Dictionary <string, string> ValidUserData = new Dictionary <string, string>(); FlowExpress flow = new FlowExpress(Util.getAppSetting("app://AattendantDB_OnBiz/")); string KeyValue = "";//字串 string[] strarray = null; string strFlowCaseID = ""; Dictionary <string, string> empData = new Dictionary <string, string>(); Dictionary <string, string> toUserData = new Dictionary <string, string>(); string flowCode = ""; string flowSN = ""; bool nextIsLastFlow = false; string meassge = ""; DbHelper db = new DbHelper(_attendantDBName); CommandHelper sb = db.CreateCommandHelper(); DbConnection cn = db.OpenConnection(); OnBizPublicOutBean dataBean = new OnBizPublicOutBean() { CompID = model.CompID, oldCompID = model.oldCompID, EmpID = model.EmpID, oldEmpID = model.oldEmpID, EmpNameN = model.EmpNameN, WriteDate = model.OBWriteDate, WriteTime = model.OBWriteTime, WriterID = model.OBWriterID, oldWriteDate = model.oldOBWriteDate, WriterName = model.OBWriterName, FormSeq = model.OBFormSeq, oldFormSeq = model.oldOBFormSeq, FlowCaseID = "", TransactionSeq = "", OBFormStatus = "2", ValidDate = "", ValidID = "", ValidName = "", RejectReasonID = "", RejectReasonCN = "", DeptID = model.OBDeptID, DeptName = model.OBDeptName, OrganID = model.OBOrganID, OrganName = model.OBOrganName, WorkTypeID = model.OBWorkTypeID, WorkType = model.OBWorkType, FlowOrganID = model.OBFlowOrganID, FlowOrganName = model.OBFlowOrganName, TitleID = model.OBTitleID, TitleName = model.OBTitleName, PositionID = model.OBPositionID, Position = model.OBPosition, Tel_1 = model.OBTel_1, Tel_2 = model.OBTel_2, VisitBeginDate = model.OBVisitBeginDate, BeginTime = model.OBBeginTime, VisitEndDate = model.OBVisitEndDate, EndTime = model.OBEndTime, DeputyID = model.OBDeputyID, DeputyName = model.OBDeputyName, LocationType = model.OBLocationType, InterLocationID = model.OBInterLocationID, InterLocationName = model.OBInterLocationName, ExterLocationName = model.OBExterLocationName, VisiterName = model.OBVisiterName, VisiterTel = model.OBVisiterTel, VisitReasonID = model.OBVisitReasonID, VisitReasonCN = model.OBVisitReasonCN, VisitReasonDesc = model.OBVisitReasonDesc, LastChgComp = model.OBLastChgComp, LastChgID = model.OBLastChgID, }; OBFlowUtility.QueryFlowDataAndToUserData_First(dataBean.CompID, dataBean.OrganID, dataBean.FlowOrganID, dataBean.EmpID, dataBean.WriterID, dataBean.VisitBeginDate, out empData, out toUserData, out flowCode, out flowSN, out nextIsLastFlow, out meassge); dataBean.ValidID = toUserData["SignID"].ToString(); dataBean.ValidName = SelectSupervisor(toUserData["SignIDComp"], toUserData["SignID"]); KeyValue = dataBean.CompID + "," + dataBean.EmpID + "," + dataBean.WriteDate + "," + dataBean.FormSeq; strarray = (dataBean.EmpID + "," + dataBean.EmpNameN + "," + dataBean.VisitBeginDate + "," + dataBean.BeginTime + "," + dataBean.EndTime).Split(","); ValidUserData = CustVerify.getEmpID_Name_Dictionary(toUserData["SignID"], toUserData["SignIDComp"]); if (FlowExpress.IsFlowInsVerify(flow.FlowID, KeyValue.Split(","), strarray, "btnBefore", ValidUserData, "")) { strFlowCaseID = FlowExpress.getFlowCaseID(flow.FlowID, KeyValue); dataBean.FlowCaseID = strFlowCaseID; switch (regStr) { case "Addes": { SqlCommand.InesrtVisitFormSendSql(dataBean, ref sb); break; } case "Modify": { SqlCommand.UpdateVisitFormSend(dataBean, ref sb); break; } } OBFlowUtility.InsertHROtherFlowLogCommand(strFlowCaseID, "1", strFlowCaseID + "1".PadLeft(5, '0'), "B", dataBean.EmpID, dataBean.OrganID, dataBean.FlowOrganID, dataBean.WriterID, flowCode, flowSN, "1", "1", toUserData["SignIDComp"], toUserData["SignID"], toUserData["SignOrganID"], toUserData["SignFlowOrganID"], "1", false, ref sb); sendEMail(dataBean, ref sb); } try { using (var trans = cn.BeginTransaction()) { try { seccessCount = db.ExecuteNonQuery(sb.BuildCommand(), trans); //執行新增,成功筆數回傳,並做Transaction機制 trans.Commit(); //成功Transaction直接Commit } catch (Exception) { trans.Rollback(); //失敗Transaction Rollback FlowExpress.IsFlowRollBack(flow.FlowID, dataBean.FlowCaseID); throw; } } } catch (Exception) { throw; } result = true; } catch (Exception ex) { msg = ex.Message; } return(result); }
/// <summary> /// CancelVisitForm /// 公出查詢 /// 送簽後取消流程 /// </summary> /// <param name="model">畫面model</param> /// <param name="datas">回傳資料</param> /// <param name="msg">回傳訊息</param> /// <returns>bool</returns> public static bool CancelVisitForm(List <OnBizPublicOutModel> model, out long seccessCount, out string msg) { bool result = false; seccessCount = 0; msg = ""; try { Dictionary <string, string> ValidUserData = new Dictionary <string, string>(); FlowExpress flow = new FlowExpress(Util.getAppSetting("app://AattendantDB_OnBiz/")); DbHelper db = new DbHelper(_attendantDBName); CommandHelper sb = db.CreateCommandHelper(); DbConnection cn = db.OpenConnection(); string flowCaseIDForRollBack = ""; try { using (var trans = cn.BeginTransaction()) { try { foreach (OnBizPublicOutModel item in model) { OnBizPublicOutBean dataBean = new OnBizPublicOutBean() { CompID = item.CompID, EmpID = item.EmpID, WriteDate = item.OBWriteDate, FormSeq = item.OBFormSeq, FlowCaseID = item.FlowCaseID, FlowLogID = item.FlowLogID, ValidID = item.ValidID, LastChgComp = item.OBLastChgComp, LastChgID = item.OBLastChgID, LastChgDate = item.OBLastChgDate }; ValidUserData = CustVerify.getEmpID_Name_Dictionary(dataBean.ValidID, dataBean.CompID); if (FlowExpress.IsFlowVerify(flow.FlowID, dataBean.FlowLogID, "btnCancel", ValidUserData, "取消")) { sb.Reset(); flowCaseIDForRollBack += dataBean.FlowCaseID + ","; OBFlowUtility.ChangeFlowFlag(dataBean.FlowCaseID, "OB01", "0001", dataBean.CompID, dataBean.ValidID, "0", ref sb); SqlCommand.CancelVisitFormSql(dataBean, ref sb); SqlCommand.UpdateHROtherFlowLogSql(dataBean, ref sb); } } seccessCount = db.ExecuteNonQuery(sb.BuildCommand(), trans); //執行新增,成功筆數回傳,並做Transaction機制 trans.Commit(); //成功Transaction直接Commit } catch (Exception) { trans.Rollback(); //失敗Transaction Rollback string[] flowCaseIDAry = flowCaseIDForRollBack.Split(","); for (int i = 0; i < flowCaseIDAry.Length - 1; i++) { FlowExpress.IsFlowRollBack(flow.FlowID, flowCaseIDAry[i]); } throw; } } } catch (Exception) { throw; } result = true; } catch (Exception ex) { msg = ex.Message; } return(result); }
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); }
public static bool PunchAppdOperation_SaveData(Punch_Confirm_Remedy_Bean model, Dictionary <string, string> oAssDic, string btnName, string FlowStepOpinion, out long seccessCount, out string msg, string flowCode = "", string flowSN = "", string flowSeq = "", string FlowLogBatNo = "", string FlowLogID = "", Dictionary <string, string> toUserData = null) { seccessCount = 0; msg = ""; Punch_Confirm_Remedy_Bean datas = new Punch_Confirm_Remedy_Bean(); try { FlowExpress flow = new FlowExpress(Util.getAppSetting("app://AattendantDB_PunchUpdate/"), model.FlowCaseID, false); string strFlowLogID = flow.FlowCurrLastLogID; //string strFlowLogID=PunchUpdate.getFlowLogID(Util.getAppSetting("app://AattendantDB_PunchUpdate/"), model.FlowCaseID); //FlowExpress flow = new FlowExpress(Util.getAppSetting("app://AattendantDB_PunchUpdate/"), model.FlowCaseID); //FlowExpress flow = new FlowExpress(Util.getAppSetting("app://AattendantDB_PunchUpdate/"), strFlowLogID); DbHelper db = new DbHelper(Aattendant._AattendantDBName); CommandHelper sb = db.CreateCommandHelper(); DbConnection cn = db.OpenConnection(); DbTransaction tx = cn.BeginTransaction(); Punch_Confirm_Remedy_Bean dataBean = new Punch_Confirm_Remedy_Bean() { FlowCaseID = model.FlowCaseID, CompID = model.CompID, EmpID = model.EmpID, EmpName = model.EmpName, DutyDate = model.DutyDate, DutyTime = model.DutyTime, PunchDate = model.PunchDate, PunchTime = model.PunchTime, PunchConfirmSeq = model.PunchConfirmSeq, DeptID = model.DeptID, DeptName = model.DeptName, OrganID = model.OrganID, OrganName = model.OrganName, FlowOrganID = model.FlowOrganID, FlowOrganName = model.FlowOrganName, ConfirmStatus = model.ConfirmStatus, PunchRemedySeq = model.PunchRemedySeq, RemedyReasonID = model.RemedyReasonID, RemedyReasonCN = model.RemedyReasonCN, RemedyPunchTime = model.RemedyPunchTime, AbnormalFlag = model.AbnormalFlag, AbnormalReasonID = model.AbnormalReasonID, AbnormalReasonCN = model.AbnormalReasonCN, AbnormalDesc = model.AbnormalDesc, Remedy_MAFT10_FLAG = model.Remedy_MAFT10_FLAG, Remedy_AbnormalFlag = model.Remedy_AbnormalFlag, Remedy_AbnormalReasonID = model.Remedy_AbnormalReasonID, Remedy_AbnormalReasonCN = model.Remedy_AbnormalReasonCN, Remedy_AbnormalDesc = model.Remedy_AbnormalDesc, LastChgComp = model.LastChgComp, LastChgID = model.LastChgID, LastChgDate = model.LastChgDate, //Remedy RemedyPunchFlag = model.RemedyPunchFlag, BatchFlag = model.BatchFlag, PORemedyStatus = model.PORemedyStatus, RejectReason = model.RejectReason, RejectReasonCN = model.RejectReasonCN, ValidDateTime = model.ValidDateTime, ValidCompID = model.ValidCompID, ValidID = model.ValidID, ValidName = model.ValidName }; try { SqlCommand.PunchAppdOperation_UpdatePunchRemedyLog(dataBean, ref sb); SqlCommand.PunchAppdOperation_UpdatePunchConfirm(dataBean, ref sb); //內部判定結案or駁回 SqlCommand.PunchAppdOperation_UpdateHROtherFlowLog(dataBean.FlowCaseID, dataBean.ConfirmStatus == "4" ? "3" : "2", ref sb); if (dataBean.PORemedyStatus == "2")//沒結案(送簽中) { OBFlowUtility.InsertHROtherFlowLogCommand(dataBean.FlowCaseID, CustVerify.addone(FlowLogBatNo), CustVerify.FlowLogIDadd(FlowLogID), "P", dataBean.EmpID, dataBean.OrganID, dataBean.FlowOrganID, UserInfo.getUserInfo().UserID, flowCode, flowSN, CustVerify.addone(flowSeq), toUserData["SignLine"], toUserData["SignIDComp"], toUserData["SignID"], toUserData["SignOrganID"], toUserData["SignFlowOrganID"], "1", false, ref sb); } else if (dataBean.PORemedyStatus == "3" || dataBean.PORemedyStatus == "4")//結案 { FlowUtility.ChangeFlowFlag(dataBean.FlowCaseID, flowCode, flowSN, UserInfo.getUserInfo().CompID, UserInfo.getUserInfo().UserID, "0", ref sb); } //======(test錯誤的存在)======= //sb.Append("test錯誤的存在"); msg = "注定失敗"; return(false); //======(test錯誤的存在)======= seccessCount = db.ExecuteNonQuery(sb.BuildCommand(), tx); //執行新增,成功筆數回傳,並做Transaction機制 if (seccessCount > 0) { if (FlowExpress.IsFlowVerify(flow.FlowID, flow.FlowCurrLastLogID, btnName, oAssDic, FlowStepOpinion)) { tx.Commit(); //成功Transaction直接Commit } else { tx.Rollback(); //失敗Transaction Rollback msg = "永豐流程寫入失敗"; } } else { tx.Rollback(); //失敗Transaction Rollback msg = "審核失敗,更新0筆資料"; } } catch (Exception ex) { tx.Rollback(); //失敗Transaction Rollback msg = ex.Message; throw ex; } } catch (Exception ex) { //tx.Rollback(); //失敗Transaction Rollback msg = ex.Message; return(false); } return(true); }
/// <summary> /// 申請後送簽流程 /// </summary> /// <param name="model">畫面model</param> /// <param name="datas">回傳資料</param> /// <param name="msg">回傳訊息</param> /// <returns>bool</returns> public static bool PunchUpdateModify_SaveData(Punch_Confirm_Remedy_Bean model, out long seccessCount, out string msg) { bool result = false; seccessCount = 0; msg = ""; bool validResult = false; Punch_Confirm_Remedy_Bean datas = new Punch_Confirm_Remedy_Bean(); string validMsg = ""; try { Dictionary <string, string> empData = new Dictionary <string, string>(); Dictionary <string, string> toUserData = new Dictionary <string, string>(); Dictionary <string, string> ValidUserData = new Dictionary <string, string>(); string flowCode = ""; string flowSN = ""; bool nextIsLastFlow = false; string meassge = ""; FlowExpress flow = new FlowExpress(Util.getAppSetting("app://AattendantDB_PunchUpdate/")); string KeyValue = "";//字串 string ShowValue = ""; string strFlowCaseID = ""; DbHelper db = new DbHelper(Aattendant._AattendantDBName); CommandHelper sb = db.CreateCommandHelper(); DbConnection cn = db.OpenConnection(); DbTransaction tx = cn.BeginTransaction(); Punch_Confirm_Remedy_Bean dataBean = new Punch_Confirm_Remedy_Bean() { FlowCaseID = model.FlowCaseID, CompID = model.CompID, EmpID = model.EmpID, EmpName = model.EmpName, DutyDate = model.DutyDate, DutyTime = model.DutyTime, PunchDate = model.PunchDate, PunchTime = model.PunchTime, PunchConfirmSeq = model.PunchConfirmSeq, DeptID = model.DeptID, DeptName = model.DeptName, OrganID = model.OrganID, OrganName = model.OrganName, FlowOrganID = model.FlowOrganID, FlowOrganName = model.FlowOrganName, MAFT10_FLAG = model.MAFT10_FLAG, ConfirmStatus = model.ConfirmStatus, PunchRemedySeq = model.PunchRemedySeq, RemedyReasonID = model.RemedyReasonID, RemedyReasonCN = model.RemedyReasonCN, RemedyPunchTime = model.RemedyPunchTime, AbnormalFlag = model.AbnormalFlag, AbnormalReasonID = model.AbnormalReasonID, AbnormalReasonCN = model.AbnormalReasonCN, AbnormalDesc = model.AbnormalDesc, Remedy_MAFT10_FLAG = model.Remedy_MAFT10_FLAG, Remedy_AbnormalFlag = model.Remedy_AbnormalFlag, Remedy_AbnormalReasonID = model.Remedy_AbnormalReasonID, Remedy_AbnormalReasonCN = model.Remedy_AbnormalReasonCN, Remedy_AbnormalDesc = model.Remedy_AbnormalReasonID == "99" ? model.Remedy_AbnormalDesc : "", LastChgComp = model.LastChgComp, LastChgID = model.LastChgID, LastChgDate = model.LastChgDate, //Remedy RemedyPunchFlag = model.RemedyPunchFlag, BatchFlag = model.BatchFlag, PORemedyStatus = model.PORemedyStatus, RejectReason = model.RejectReason, RejectReasonCN = model.RejectReasonCN, ValidDateTime = model.ValidDateTime, //ValidTime = model.ValidTime, ValidCompID = model.ValidCompID, ValidID = model.ValidID, ValidName = model.ValidName }; OBFlowUtility.QueryFlowDataAndToUserData_First(dataBean.CompID, dataBean.OrganID, dataBean.FlowOrganID, dataBean.EmpID, dataBean.EmpID, dataBean.PunchDate, out empData, out toUserData, out flowCode, out flowSN, out nextIsLastFlow, out meassge, "PO01", "PO"); Punch_Confirm_Remedy_Model validInfo = new Punch_Confirm_Remedy_Model() { CompID = toUserData["SignIDComp"], EmpID = toUserData["SignID"] }; validResult = GetValidInfo(validInfo, out datas, out validMsg); if (!validResult) { throw new Exception(validMsg); } dataBean.ValidCompID = toUserData["SignIDComp"]; dataBean.ValidID = toUserData["SignID"]; dataBean.ValidName = datas.ValidName; KeyValue = dataBean.CompID + "," + dataBean.EmpID + "," + dataBean.PunchDate + "," + dataBean.PunchRemedySeq; ShowValue = dataBean.CompID + "," + dataBean.EmpID + "," + dataBean.PunchDate + "," + dataBean.PunchTime; ValidUserData = CustVerify.getEmpID_Name_Dictionary(toUserData["SignID"], toUserData["SignIDComp"]); if (FlowExpress.IsFlowInsVerify(flow.FlowID, KeyValue.Split(","), ShowValue.Split(","), nextIsLastFlow ? "btnSendLast" : "btnSend", ValidUserData, "")) { strFlowCaseID = FlowExpress.getFlowCaseID(flow.FlowID, KeyValue); dataBean.FlowCaseID = strFlowCaseID; SqlCommand.PunchUpdateModify_InsertPunchRemedyLog(dataBean, ref sb); OBFlowUtility.ChangeFlowFlag(strFlowCaseID, flowCode, flowSN, dataBean.ValidCompID, dataBean.ValidID, "1", ref sb); OBFlowUtility.InsertHROtherFlowLogCommand(strFlowCaseID, "1", strFlowCaseID + "." + "1".PadLeft(5, '0'), "P", dataBean.EmpID, dataBean.OrganID, dataBean.FlowOrganID, dataBean.ValidID, flowCode, flowSN, "1", "1", toUserData["SignIDComp"], toUserData["SignID"], toUserData["SignOrganID"], toUserData["SignFlowOrganID"], "1", false, ref sb); try { //================ //sb.Append("錯誤製造"); //================= seccessCount = db.ExecuteNonQuery(sb.BuildCommand(), tx); //執行新增,成功筆數回傳,並做Transaction機制 tx.Commit(); //成功Transaction直接Commit } catch (Exception) { FlowExpress.IsFlowCaseDeleted(flow.FlowID, strFlowCaseID, true); //送簽用IsFlowCaseDeleted //審核用IsFlowRollBack tx.Rollback(); //失敗Transaction Rollback throw; } result = true; } } catch (Exception ex) { msg = ex.Message; } return(result); }
/// <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); }