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);
    }
Ejemplo n.º 2
0
    /// <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);
    }