Esempio n. 1
0
        /// <summary>
        /// BY PLANT獲取DOA簽核人
        /// </summary>
        /// <param name="sLogonId">申請人</param>
        /// <param name="sDOA">DOA資訊</param>
        /// <param name="dtHead">表頭</param>
        /// <param name="dtDetail">表身</param>
        /// <returns>DOA簽核人資訊</returns>
        public Model_DOAHandler GetStepHandler(string applicant, string sDOA, DataTable dtHead, DataTable dtDetail, bool startFormFlag)
        {
            Model_DOAHandler oDOAHandler = new Model_DOAHandler();
            DataRow          dr          = dtHead.Rows[0];

            oDOAHandler._sDOA       = sDOA;
            oDOAHandler._sApplicant = applicant;
            oDOAHandler._sPlant     = dr["WERKS"].ToString();
            oDOAHandler._sDocYear   = dr["MJAHR_A"].ToString();
            oDOAHandler._sDocNo     = dr["MBLNR_A"].ToString();

            IDOA oDOA = GetDOA(oDOAHandler._sPlant);

            if (!startFormFlag)
            {
                oDOAHandler = oDOA.GetStepHandler(oDOAHandler, dtHead, dtDetail);
            }
            else
            {
                oDOAHandler = oDOA.GetStepHandler_StartForm(oDOAHandler, dtHead, dtDetail);
            }

            //檢查當前簽核角色是否多簽核人情形
            if (oDOAHandler._ParallelFlag == false && oDOAHandler._sHandler.IndexOf(",") > 0)
            {
                DBIO.RecordParallelApprovalInfo(oDOAHandler);
            }

            return(oDOAHandler);
        }
        /// <summary>
        /// 簽核人抓取異常郵件通知
        /// </summary>
        /// <param name="dtHead">表頭</param>
        /// <param name="handler">處理人</param>
        /// <param name="errReason">異常原因</param>
        protected void GetHandlerErrAlarm(DataTable dtHead, string errReason)
        {
            DataRow drHead    = dtHead.Rows[0];
            string  sLongonId = drHead["ERNAM"].ToString().Trim().Replace(" ", "");
            string  sCaseno   = drHead["MBLNR_A"].ToString().Trim();
            string  plantCode = drHead["WERKS"].ToString().Trim();

            string sub  = "[" + plantCode + "]GoodsMovement--獲取簽核人錯誤";
            string body = "Dear's \r\n";

            body += "      單號-" + sCaseno + ";申請人-" + sLongonId + "\r\n";
            body += errReason + "\r\n";
            SPMBasic  SPMBasic_class = new SPMBasic();
            string    applicant      = SPMBasic_class.GetEMailByEName(sLongonId);
            SendMail  mail           = new SendMail();
            ArrayList to             = new ArrayList();

            if (applicant.Length > 0)
            {
                to.Add(applicant);
            }
            ArrayList cc = new ArrayList();

            cc.Add(DBIO.GetITWindow(plantCode));
            mail.SendMail_Normal(to, cc, sub, body, false);
        }
Esempio n. 3
0
        /// <summary>
        /// 記錄追溯LOG
        /// </summary>
        /// <param name="log"></param>
        /// <param name="handleType"></param>
        public static void RecordTraceLog(string handleType, string status, Model_DOAHandler oDOAHandler)
        {
            string log = string.Empty;

            switch (handleType)
            {
            case "A":
                if (oDOAHandler._sEndFlag == "Y")
                {
                    log = string.Format("DOA end {0} ", status);
                }
                else
                {
                    log = string.Format("Get Hanlder {0},Role={1},handler={2} ", status, oDOAHandler._sRoleCode, oDOAHandler._sHandler);
                }

                break;

            case "B":
                if (oDOAHandler._sEndFlag == "Y")
                {
                    log = string.Format("Update DOA {0}", status);
                }
                else
                {
                    log = string.Format("Update DOA {0},Role={1},handler={2} ", status, oDOAHandler._sRoleCode, oDOAHandler._sHandler);
                }

                break;

            case "C":
                log = string.Format("Add queue {0} ", status);
                break;

            case "D":
                if (oDOAHandler._sEndFlag == "N")
                {
                    log = string.Format("Prepare RoutingVariable {0}:spm_Jump DOA({1}) ", status, oDOAHandler._sHandler);
                }
                else
                {
                    log = string.Format("Prepare RoutingVariable {0}:spm_Jump End ", status);
                }

                break;

            case "E":
                log = string.Format("DOA Jump ,ErrMsg:{0},DOA string:{1}", status, oDOAHandler._sDOA);
                break;
            }
            DBIO.WriteTraceLog(log, oDOAHandler);
        }
 /// <summary>
 /// 控制關卡向後跳關
 /// </summary>
 /// <param name="jumpFlag"></param>
 protected virtual void DOAJump()
 {
     oDOAHandler._sJump = "Y";//設置跳關標誌
     try
     {
         oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);//DOA XML STR進行跳關處理
     }
     catch (Exception ex)
     {
         DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
         throw new Exception("Server or network is busy now,pls try again");
     }
 }
 //跳關
 private void GoJump()
 {
     oDOAHandler._sJump = "Y";//不用簽,向后跳關
     try
     {
         oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
     }
     catch (Exception ex)
     {
         DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
         throw new Exception("Server or network is busy now,pls try again");
     }
 }
        /// <summary>
        /// 重載標準DOA-特殊規則獲取簽核人(TYPE C)
        /// </summary>
        /// <param name="roleCode"></param>
        /// <param name="dtHead"></param>
        /// <param name="dtDetail"></param>
        protected override void GetDOABySpeicalRule(string roleCode, DataTable dtHead, DataTable dtDetail)
        {
            #region
            bool    jumpFlag     = false;//跳關標示
            string  buyerCode    = string.Empty;
            DataRow drHead       = dtHead.Rows[0];
            string  sAPTYP       = drHead["APTYP"].ToString();
            string  sLOCFrom     = drHead["LOCFM"].ToString();
            string  sLOCTo       = drHead["LOCTO"].ToString();
            string  sCostCenter  = drHead["KOSTL"].ToString().ToUpper().Trim();
            string  sDepartment  = drHead["ABTEI"].ToString().ToUpper().Trim();
            string  materialType = string.Empty;
            switch (roleCode)
            {
            case "2675-PMC01":
                #region
                switch (sAPTYP)
                {
                case "T1":
                    oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                    if (oDOAHandler._sJump == "Y")
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    else
                    {
                        buyerCode = dtDetail.Rows[0]["EKGRP"].ToString();
                        //儲位0010簽MC
                        if (sLOCTo == "0019" && (sLOCFrom == "0030" || sLOCFrom == "0020"))
                        {
                            //非儲位0030/0030 轉0019簽PC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                        }
                        else
                        {
                            //簽MC
                            buyerCode = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                            if (buyerCode.Length > 0)
                            {
                                oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                            }
                            else
                            {
                                GetHandlerErrAlarm(dtHead, "物料BUYER CODE缺失,無法獲取簽核人");
                            }
                            break;
                        }
                    }
                    break;

                case "I1":
                    //material storage location
                    Hashtable dtSLoc = new Hashtable();
                    dtSLoc.Add("0010", "0010");
                    dtSLoc.Add("0013", "0013");
                    dtSLoc.Add("0012", "0012");
                    dtSLoc.Add("0019", "0019");
                    dtSLoc.Add("SHJ1", "SHJ1");
                    //sepcial storage location(include material/fg/ft)
                    Hashtable dtSLoc2 = new Hashtable();
                    dtSLoc2.Add("0024", "0024");
                    dtSLoc2.Add("0028", "0028");

                    if (dtSLoc.Contains(sLOCFrom))
                    {
                        Hashtable ht = new Hashtable();
                        //檢查每顆料的採購,如有多個則進行並簽
                        foreach (DataRow dr in dtDetail.Rows)
                        {
                            buyerCode = dr["EKGRP"].ToString().Trim().ToUpper();
                            string logonId = GetDOAHandlerByBuyerCode(buyerCode);
                            if (ht.Contains(logonId) == false)
                            {
                                ht.Add(logonId, 0);
                                if (oDOAHandler._sHandler.Length > 0)
                                {
                                    oDOAHandler._sHandler += ",";
                                }
                                oDOAHandler._sHandler += logonId;
                                break;
                            }
                        }
                        if (oDOAHandler._sHandler.Length == 0)
                        {
                            GetHandlerErrAlarm(dtHead, "物料對應BuyerCode信息有誤,無法獲取簽核人");
                        }
                    }
                    else if (dtSLoc2.Contains(sLOCFrom))
                    {
                        materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                        //看最後兩碼 FT =成品
                        //RH = 材料
                        //HL = 半品
                        //VP = 包材
                        if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                        {
                            buyerCode = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                            string logonId =
                                oDOAHandler._sJump = "N";
                            //簽MC
                            oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                        }
                        else
                        {
                            oDOAHandler._sJump = "N";
                            //簽PC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                        }
                    }
                    else
                    {
                        //簽PC
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                    }
                    break;

                case "IA":

                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                    {
                        buyerCode = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                        string logonId =
                            oDOAHandler._sJump = "N";
                        //簽MC
                        oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                    }
                    else
                    {
                        oDOAHandler._sJump = "N";
                        //簽PC
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                    }
                    break;
                }
                break;

                #endregion
            case "2675-MFG02":
                #region
                switch (sAPTYP)
                {
                case "T1":
                    oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                    if (oDOAHandler._sJump == "Y")
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    else
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "A");        //抓取簽核人空白 Bug 修復
                    }
                    break;

                default:        //應稽核要求 7302N成本中心 I3,I5單第一關簽核人 單獨指定 2019-05-30
                    if (sCostCenter == "7302N")
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, sCostCenter);
                    }
                    else
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "A");
                    }
                    break;
                }
                break;
                #endregion

            case "2675-PMC02":

                #region
                switch (sAPTYP)
                {
                case "T1":
                    //儲位0010簽MC主管
                    if (sLOCFrom == "0010")
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "MC");
                        break;
                    }
                    else
                    {
                        //非儲位0010簽PC主管
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                    }
                    break;

                case "IS":
                case "I1":
                    //material storage location
                    Hashtable dtSLoc = new Hashtable();
                    dtSLoc.Add("0010", "0010");
                    dtSLoc.Add("0013", "0013");
                    dtSLoc.Add("0019", "0019");
                    dtSLoc.Add("SHJ1", "SHJ1");
                    dtSLoc.Add("0012", "0012");
                    //sepcial storage location(include material/fg/ft)
                    Hashtable dtSLoc2 = new Hashtable();
                    dtSLoc2.Add("0024", "0024");
                    dtSLoc2.Add("0028", "0028");
                    if (dtSLoc.Contains(sLOCFrom))
                    {
                        if (sCostCenter == "7406N" && sDepartment == "MC")
                        {
                            //本部門申請跳過
                            oDOAHandler._sJump = "Y";
                            oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                        }
                        else
                        {
                            oDOAHandler._sJump = "N";
                            //簽MC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "MC");
                        }
                    }
                    else if (dtSLoc2.Contains(sLOCFrom))
                    {
                        materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                        //看最後兩碼 FT =成品
                        //RH = 材料
                        //HL = 半品
                        //VP = 包材
                        if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                        {
                            if (sCostCenter == "7406N" && sDepartment == "MC")
                            {
                                //本部門申請跳過
                                oDOAHandler._sJump = "Y";
                                oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                            }
                            else
                            {
                                oDOAHandler._sJump = "N";
                                //簽MC
                                oDOAHandler._sHandler = GetDOAHandler(roleCode, "MC");
                            }
                        }
                        else
                        {
                            if (sCostCenter == "7406N" && sDepartment == "PC")
                            {
                                //本部門申請跳過
                                oDOAHandler._sJump = "Y";
                                oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                            }
                            else
                            {
                                oDOAHandler._sJump = "N";
                                //簽PC
                                oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                            }
                        }
                    }
                    else
                    {
                        if (sCostCenter == "7406N" && sDepartment == "PC")
                        {
                            //本部門申請跳過
                            oDOAHandler._sJump = "Y";
                            oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                        }
                        else
                        {
                            oDOAHandler._sJump = "N";
                            //簽PC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                        }
                    }
                    break;

                case "I6":
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                    {
                        if (sCostCenter == "7406N" && sDepartment == "MC")
                        {
                            //本部門申請跳過
                            oDOAHandler._sJump = "Y";
                            oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                        }
                        else
                        {
                            oDOAHandler._sJump = "N";
                            //簽MC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "MC");
                        }
                    }
                    else
                    {
                        if (sCostCenter == "7406N" && sDepartment == "PC")
                        {
                            //本部門申請跳過
                            oDOAHandler._sJump = "Y";
                            oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                        }
                        else
                        {
                            oDOAHandler._sJump = "N";
                            //簽PC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                        }
                    }
                    break;

                case "IA":
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                    {
                        buyerCode = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                        string logonId =
                            oDOAHandler._sJump = "N";
                        //簽MC
                        oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                    }
                    else
                    {
                        oDOAHandler._sJump = "N";
                        //簽PC
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                    }

                    break;
                }

                break;

                #endregion
            case "2675-DEPT01":
                #region
                oDOAHandler._sHandler = GetDOAHandler_HIS(roleCode, sCostCenter, sDepartment);
                if (oDOAHandler._sHandler.Length == 0)
                {
                    GetHandlerErrAlarm(dtHead, string.Format("CostCenter:{0},Department:{1} 信息有誤,無法獲取簽核人", sCostCenter, sDepartment));
                }
                break;
                #endregion

            case "2675-DEPT02":
                #region
                oDOAHandler._sHandler = GetDOAHandler(roleCode, sCostCenter);
                if (oDOAHandler._sHandler.Length == 0)
                {
                    oDOAHandler._sJump = "Y";    //PCT不用簽,主管與窗口為同一人向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump = "N";
                }
                break;
                #endregion

            case "2675-APP01":
                #region
                oDOAHandler._sHandler = GetDOAHandler(roleCode, sCostCenter);
                if (oDOAHandler._sHandler.Length == 0)
                {
                    GetHandlerErrAlarm(dtHead, string.Format("CostCenter:{0},Department:{1} 信息有誤,無法獲取簽核人", sCostCenter, sDepartment));
                }
                break;
                #endregion

            case "2675-FIN01":
                #region
                oDOAHandler._sHandler = GetDOAHandler(roleCode);
                break;
                #endregion

            case "2675-CUST01":
                #region
                switch (sAPTYP)
                {
                case "IS":
                    jumpFlag = false;
                    break;

                case "I1":
                    string returnFlag = drHead["RTNIF"].ToString();
                    if (returnFlag == "N")
                    {
                        jumpFlag = false;
                    }
                    else
                    {
                        jumpFlag = true;
                    }
                    break;

                default:
                    jumpFlag = true;
                    break;
                }
                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            default:
                break;

            case "2675-DEPT01-T1":
                #region     //costcenter +dept

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    oDOAHandler._sHandler = GetDOAHandler_HIS(roleCode, sCostCenter, sDepartment);
                }
                break;


                #endregion

            case "2675-DEPT02-T1":
                #region       //costcenter

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, sCostCenter);
                }

                break;
                #endregion


            case "2675-PMC01-T1":
                #region

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                    {
                        buyerCode = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                        if (buyerCode.Length > 0)
                        {
                            oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                        }
                        else
                        {
                            GetHandlerErrAlarm(dtHead, "物料BUYER CODE缺失,無法獲取簽核人");
                        }
                    }
                    else
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                    }
                }
                break;
                #endregion

            case "2675-MC01-I3":
                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "HL")
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "CZ2");     //半成品簽PC人員 CZ2 : CLWANG 2019/03/06
                    }
                    else
                    {
                        buyerCode             = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                        oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                    }
                }
                break;

            case "2675-SQE01-T1":
            case "2675-IQE01-T1":
                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    buyerCode             = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, buyerCode);
                }
                break;

            case "2675-QRA01-T1":
                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "RH");
                    }
                    else
                    {
                        //2019-04-18 HIS CZ2 T1轉倉單 變更簽核人 根據成本中心類型 N為lijuanxie  T為Owenwu
                        string KOSTL = dtHead.Rows[0]["KOSTL"].ToString();
                        if (KOSTL.Contains("N"))
                        {
                            oDOAHandler._sHandler = GetDOAHandler_HIS(roleCode, "HL", "N");
                        }
                        else if (KOSTL.Contains("T"))
                        {
                            oDOAHandler._sHandler = GetDOAHandler_HIS(roleCode, "HL", "T");
                        }
                        else
                        {
                            Hashtable dtSLoc = new Hashtable();
                            dtSLoc.Add("0023", "0023");
                            if (dtSLoc.Contains(sLOCFrom) || dtSLoc.Contains(sLOCTo))
                            {
                                oDOAHandler._sHandler = GetDOAHandler_HIS(roleCode, "HL", "A");
                            }
                            else
                            {
                                oDOAHandler._sHandler = GetDOAHandler_HIS(roleCode, "HL", "B");
                            }
                        }
                    }
                }
                break;

            case "2675-MFG01-T1":
            case "2675-IQM02-T1":
            case "2675-PC01-T1":
            case "2675-PMC02-T1":
            case "2675-WH01-T1":
            case "2675-MC02-T1":
                #region

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2675-MC01-T1":
                #region     //buyercode

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    buyerCode             = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                    oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                }

                break;
                #endregion

            case "2675-IQC01":
                switch (sAPTYP)
                {
                case "IA":
                case "IC":
                    string KOSTL = dtHead.Rows[0]["KOSTL"].ToString();
                    if (KOSTL.Contains("N"))
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "N");
                    }
                    else if (KOSTL.Contains("T"))
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "T");
                    }
                    break;
                }
                break;
            }
            #endregion
        }
Esempio n. 7
0
        /// <summary>
        /// 重載標準DOA-特殊規則獲取簽核人(TYPE C)
        /// </summary>
        /// <param name="roleCode"></param>
        /// <param name="dtHead"></param>
        /// <param name="dtDetail"></param>
        protected override void GetDOABySpeicalRule(string roleCode, DataTable dtHead, DataTable dtDetail)
        {
            #region
            string  sAPTYP    = string.Empty;
            string  sLOC      = string.Empty;
            string  buyerCode = string.Empty;
            string  sTemp     = string.Empty;
            DataRow drHead    = dtHead.Rows[0];

            string sCostCenter  = drHead["KOSTL"].ToString().ToUpper().Trim(); //成本中心
            string sDepartment  = drHead["ABTEI"].ToString().ToUpper().Trim(); //部門
            string materialType = string.Empty;                                //成品半成品/原物料

            string orderType = string.Empty;
            bool   jumpFlag  = false;                              //跳關標示
            sAPTYP = drHead["APTYP"].ToString();                   //AP TYPE
            sLOC   = drHead["LOCFM"].ToString();                   //儲位
            DataRow[] orderCheck = dtDetail.Select(" GMFLOW='R'"); //重工工單標誌 R:為重工,空為非重工
            if (orderCheck.Length > 0)
            {
                orderType = "R";
            }
            switch (roleCode.ToUpper())
            {
            case "2680-MFG02":    //I2,I7
                #region [check handler]
                //檢查APPLIER ID(GDS01-GDS05屬於MFG)
                switch (sAPTYP)
                {
                case "I2":
                    #region
                    switch (drHead["APPER"].ToString().ToUpper())
                    {
                    case "GDS01":
                    case "GDS02":
                    case "GDS03":
                    case "GDS04":
                    case "GDS05":
                        jumpFlag = false;
                        break;

                    default:
                        jumpFlag = true;
                        break;
                    }
                    #endregion
                    break;

                case "I7":
                    #region
                    switch (drHead["APPER"].ToString().ToUpper())
                    {
                    case "GDS01":
                    case "GDS02":
                    case "GDS03":
                    case "GDS04":
                    case "GDS05":
                        jumpFlag = false;
                        break;

                    default:
                        //非MFG無需簽核
                        jumpFlag = true;
                        break;
                    }


                    #endregion
                    break;

                default:
                    switch (drHead["APPER"].ToString().ToUpper())
                    {
                    case "GDS01":
                    case "GDS02":
                    case "GDS03":
                    case "GDS04":
                    case "GDS05":
                        jumpFlag = false;
                        break;

                    default:
                        //非MFG無需簽核
                        jumpFlag = true;
                        break;
                    }
                    break;
                }

                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }

                #endregion [check handler]
                break;

            case "2680-MFG02-A3":    //I7
                #region [check handler]
                //檢查APPLIER ID(GDS01-GDS05屬於MFG)
                switch (sAPTYP)
                {
                case "I7":
                    #region
                    switch (drHead["APPER"].ToString().ToUpper())
                    {
                    case "GDS30":
                        jumpFlag = true;
                        break;

                    default:
                        jumpFlag = false;
                        break;
                    }


                    #endregion
                    break;

                default:
                    switch (drHead["APPER"].ToString().ToUpper())
                    {
                    case "GDS30":
                        jumpFlag = true;
                        break;

                    default:
                        jumpFlag = false;
                        break;
                    }
                    break;
                }

                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }

                #endregion [check handler]
                break;

            case "2680-PUR01-A3":    //I7
                jumpFlag = false;
                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

            case "2680-WH01-A3":
                oDOAHandler._sJump = "N";
                switch (drHead["APPER"].ToString().ToUpper())
                {
                case "GDS30":
                    string pdLine = drHead["ZPLINE"].ToString().Trim().ToUpper();
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, pdLine);
                    break;

                default:
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                    break;
                }
                break;

            case "2680-MFG01-A3":
                oDOAHandler._sJump = "N";
                switch (drHead["APPER"].ToString().ToUpper())
                {
                case "GDS30":
                    string pdLine = drHead["ZPLINE"].ToString().Trim().ToUpper();
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, pdLine);
                    break;

                default:
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                    break;
                }
                break;

            case "2680-PUR01":               //i2,ic
                #region
                DataTable dt2680_PUR01 = GetPartList(roleCode);

                //PUR窗口依舊料號前兩碼區分負責窗口(料號與窗口對應信息記錄與DB)
                //只檢查第一顆料的採購
                #region [loop check window info]

                sTemp = dtDetail.Rows[0]["MAKTX"].ToString().Trim().ToUpper();

                for (int j = 2; j < 6; j++)
                {
                    string    sTemp2 = sTemp.Substring(0, 7 - j);
                    DataRow[] al     = dt2680_PUR01.Select("OldPartNo='" + sTemp2 + "'");
                    if (al.Length > 0)
                    {
                        oDOAHandler._sHandler = al[0]["handler"].ToString();
                        break;
                    }
                }
                if (oDOAHandler._sHandler.Length == 0)
                {
                    GetHandlerErrAlarm(dtHead, "物料對應採購簽核人資料缺失,無法獲取簽核人,請聯繫IT");
                }
                #endregion [loop check window info]
                #endregion
                break;

            case "2680-PUR02":              //I1,I7,IF
                #region
                DataTable dt2680_PUR02 = new DataTable();
                switch (sAPTYP)
                {
                case "I1":

                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    if (materialType.Length == 4 && materialType.Substring(2, 2) != "FT")
                    {
                        //原物料
                        jumpFlag = false;
                    }
                    else
                    {
                        //成品半成品
                        jumpFlag = true;
                    }

                    break;

                case "I7":
                case "IF":
                    jumpFlag = false;
                    break;

                default:
                    jumpFlag = true;
                    break;
                }

                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    //PUR窗口依舊料號前兩碼區分負責窗口(料號與窗口對應信息記錄與DB)
                    dt2680_PUR02 = GetPartList("2680-PUR01");

                    #region [loop check window info]

                    Hashtable ht = new Hashtable();
                    oDOAHandler._sJump = "N";
                    //檢查每顆料的採購,如有多個則進行並簽
                    foreach (DataRow dr in dtDetail.Rows)
                    {
                        sTemp = dr["MAKTX"].ToString().Trim().ToUpper();

                        for (int j = 2; j < 6; j++)
                        {
                            string    sTemp2 = sTemp.Substring(0, 7 - j);
                            DataRow[] al     = dt2680_PUR02.Select("OldPartNo='" + sTemp2 + "'");
                            if (al.Length > 0 && ht.Contains(al[0]["handler"].ToString().ToUpper()) == false)
                            {
                                ht.Add(al[0]["handler"].ToString().ToUpper(), 0);
                                if (oDOAHandler._sHandler.Length > 0)
                                {
                                    oDOAHandler._sHandler += ",";
                                }
                                oDOAHandler._sHandler += al[0]["handler"].ToString();
                                break;
                            }
                        }
                    }

                    if (oDOAHandler._sHandler.Length == 0)
                    {
                        GetHandlerErrAlarm(dtHead, "物料對應採購簽核人資料缺失,無法獲取簽核人,請聯繫IT");
                    }
                    #endregion [loop check window info]
                }
                #endregion
                break;

            case "2680-PUR03":              //I1 PUR主管窗口 2019-01-25
                #region
                switch (sAPTYP)
                {
                case "I1":
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    if (materialType.Length == 4 && materialType.Substring(2, 2) != "FT")
                    {
                        //原物料
                        jumpFlag = false;
                    }
                    else
                    {
                        //成品半成品
                        jumpFlag = true;
                    }
                    break;
                }
                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else     //PUR主管固定人員
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2680-PMM01":
                jumpFlag = true;
                //I2/I7如含有IC,PCB,线材等物料加会PMM主管
                switch (sAPTYP)
                {
                case "I2":
                case "I7":
                    string oldPartNo = string.Empty;
                    foreach (DataRow dr in dtDetail.Rows)
                    {
                        oldPartNo = dr["MAKTX"].ToString();
                        //PCB,IC,线材加会PMM MANAGER
                        if (oldPartNo.StartsWith("01X") || oldPartNo.StartsWith("32") || oldPartNo.StartsWith("04"))
                        {
                            jumpFlag = false;
                            break;
                        }
                    }

                    break;

                case "I1":          //I1,IA 簽PMM主管  2019-01-25
                case "IA":
                    jumpFlag = false;
                    break;

                default:
                    jumpFlag = true;
                    break;
                }

                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

            case "2680-WH01":      //IC
                #region
                //IC單(不良品退料)簽不良品倉管
                if (sAPTYP == "IC")
                {
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, sAPTYP);
                    break;
                }
                //I2單(溢領)且儲位為0019(AI倉庫)簽AI倉管
                if (sAPTYP == "I2" && sLOC == "0019")
                {
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, sAPTYP + "-" + sLOC);
                    break;
                }
                //I2單(溢領)且儲位非為0019(AI倉庫)簽MFG倉管
                //MFG WH窗口依舊料號前兩碼區分負責窗口(料號與窗口對應信息記錄與DB)
                #region [loop check]
                DataTable dtP2680_WH01 = GetPartList(roleCode);

                sTemp = dtDetail.Rows[0]["MAKTX"].ToString().Trim().ToUpper();

                for (int j = 4; j < 6; j++)
                {
                    string    sTemp2 = sTemp.Substring(0, 7 - j);
                    DataRow[] al     = dtP2680_WH01.Select("OldPartNo='" + sTemp2 + "'");
                    if (al.Length > 0)
                    {
                        oDOAHandler._sHandler = al[0]["handler"].ToString();
                        break;
                    }
                }

                #endregion [loop check]
                if (oDOAHandler._sHandler.Length == 0)
                {
                    GetHandlerErrAlarm(dtHead, "物料對應倉管簽核人資料缺失,無法獲取簽核人,請聯繫IT");
                }
                #endregion
                break;

            case "2680-WH02":      //I1需簽倉庫主管 2019-01-25
                #region
                switch (sAPTYP)
                {
                case "I1":
                case "IA":
                case "I6":
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                    break;
                }
                #endregion
                break;

            case "2680-IQC01":        //IC
                #region
                //IQC窗口依舊料號前兩碼區分負責窗口(料號與窗口對應信息記錄與DB)
                DataTable dt2680_IQC01 = GetPartList(roleCode);
                #region [loop check]

                sTemp = dtDetail.Rows[0]["MAKTX"].ToString().Trim().ToUpper();
                for (int j = 2; j < 6; j++)
                {
                    string    sTemp2 = sTemp.Substring(0, 7 - j);
                    DataRow[] al     = dt2680_IQC01.Select("OldPartNo='" + sTemp2 + "'");
                    if (al.Length > 0)
                    {
                        oDOAHandler._sHandler = al[0]["handler"].ToString();
                        break;
                    }
                }

                #endregion [loop check]
                if (oDOAHandler._sHandler.Length == 0)
                {
                    GetHandlerErrAlarm(dtHead, "物料對應IQC簽核人資料缺失,無法獲取簽核人,請聯繫IT");
                }
                #endregion
                break;

            case "2680-PC01":               //I1,I7.IA
                #region
                switch (sAPTYP)
                {
                case "I1":
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    if (materialType.Length == 4 && materialType.Substring(2, 2) != "FT")
                    {
                        jumpFlag = true;
                    }
                    else
                    {
                        jumpFlag = false;
                    }
                    break;

                case "I7":
                    if (orderType == "R")
                    {
                        //重工工單必簽
                        jumpFlag = false;
                    }
                    else
                    {
                        //非重工工單無需簽核
                        jumpFlag = true;
                    }
                    break;

                case "IA":
                    jumpFlag = false;
                    break;

                default:
                    jumpFlag = true;
                    break;
                }

                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                    if (oDOAHandler._sHandler.Length == 0)
                    {
                        GetHandlerErrAlarm(dtHead, "物料對應關務簽核人資料缺失,無法獲取簽核人,請聯繫IT");
                    }
                }
                #endregion
                break;

            case "2680-DEPT01":             //I1,IA
                #region
                switch (sAPTYP)
                {
                case "I1":
                case "IA":
                    oDOAHandler._sHandler = GetDOAHandler_POWER(roleCode, sCostCenter, sDepartment);
                    if (oDOAHandler._sHandler.Length == 0)
                    {
                        GetHandlerErrAlarm(dtHead, string.Format("CostCenter:{0},Department:{1} 信息有誤,無法獲取簽核人", sCostCenter, sDepartment));
                    }
                    break;

                default:
                    break;
                }
                #endregion
                break;

            case "2680-DEPT02":             //I1,IA
                #region
                switch (sAPTYP)
                {
                case "I1":
                case "IA":
                    oDOAHandler._sHandler = GetDOAHandler_POWER(roleCode, sCostCenter, "");
                    if (oDOAHandler._sHandler.Length == 0)
                    {
                        GetHandlerErrAlarm(dtHead, string.Format("CostCenter:{0},Department:{1} 信息有誤,無法獲取簽核人", sCostCenter, sCostCenter));
                    }
                    break;

                default:
                    break;
                }
                #endregion
                break;

            case "2680-CUST01":             //I1
                #region
                string    iPart     = string.Empty;
                DataTable dtSpecial = GetPartList("2680-Cust01");
                switch (sAPTYP)
                {
                case "I1":
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();

                    if (materialType.Length == 4 && materialType.Substring(2, 2) != "FT")
                    {
                        int i = 0;
                        foreach (DataRow dr in dtDetail.Rows)
                        {
                            if (dtSpecial.Select("PartDesc='" + dr["IPART"].ToString() + "'").Length > 0)
                            {
                                iPart = dr["IPART"].ToString();
                                i++;
                                break;
                            }
                        }
                        if (i > 0)
                        {
                            //原物料 簽
                            jumpFlag = false;
                        }
                        else
                        {
                            jumpFlag = true;
                        }
                    }
                    else
                    {
                        //成品半成品  跳
                        jumpFlag = true;
                    }
                    break;

                default:
                    jumpFlag = true;
                    break;
                }

                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    //string iPart = dtDetail.Rows[0]["IPART"].ToString().Trim().ToUpper();
                    oDOAHandler._sJump    = "N"; //依COST CENTER 獲取簽核人
                    oDOAHandler._sHandler = dtSpecial.Select("PartDesc='" + iPart + "'")[0]["handler"].ToString();
                    if (oDOAHandler._sHandler.Length == 0)
                    {
                        GetHandlerErrAlarm(dtHead, "物料對應關務簽核人資料缺失,無法獲取簽核人,請聯繫IT");
                    }
                }

                #endregion
                break;

            case "2680-MD01":                 //I1,I6
                #region
                switch (sAPTYP)
                {
                case "I1":
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    if (materialType.Length == 4 && materialType.Substring(2, 2) != "FT")
                    {
                        jumpFlag = true;
                    }
                    else
                    {
                        jumpFlag = false;
                    }
                    break;

                case "I6":
                    jumpFlag = false;
                    break;

                case "I2":
                case "I7":
                    jumpFlag = true;
                    string oldPartNo = string.Empty;
                    foreach (DataRow dr in dtDetail.Rows)
                    {
                        oldPartNo = dr["MAKTX"].ToString();
                        //CASE 累计溢领超0.3%加会MD
                        if (oldPartNo.StartsWith("46"))
                        {
                            try
                            {
                                if (double.Parse(dr["OVER_RATE"].ToString()) > 3)
                                {
                                    jumpFlag = false;
                                    break;
                                }
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }
                    break;

                default:
                    jumpFlag = true;
                    break;
                }

                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                    if (oDOAHandler._sHandler.Length == 0)
                    {
                        GetHandlerErrAlarm(dtHead, "MD簽核人資料缺失,無法獲取簽核人,請聯繫IT");
                    }
                }

                #endregion
                break;

            case "2680-QRA01":
                #region
                switch (sAPTYP)
                {
                case "I6":
                    oDOAHandler._sHandler = GetDOAHandler_POWER(roleCode, sCostCenter, sDepartment);
                    if (oDOAHandler._sHandler.Length == 0)
                    {
                        GetHandlerErrAlarm(dtHead, string.Format("CostCenter:{0},Department:{1} 信息有誤,無法獲取簽核人", sCostCenter, sDepartment));
                    }
                    break;
                }
                break;

                #endregion
            case "2680-QRA02":
                #region
                switch (sAPTYP)
                {
                case "I6":
                    oDOAHandler._sHandler = GetDOAHandler_POWER(roleCode, sCostCenter, sDepartment);
                    if (oDOAHandler._sHandler.Length == 0)
                    {
                        GetHandlerErrAlarm(dtHead, string.Format("CostCenter:{0},Department:{1} 信息有誤,無法獲取簽核人", sCostCenter, sDepartment));
                    }
                    break;
                }
                break;

                #endregion
            case "2680-QRA03":
                #region
                switch (sAPTYP)
                {
                case "I6":
                    oDOAHandler._sHandler = GetDOAHandler_POWER(roleCode, sCostCenter, sDepartment);
                    if (oDOAHandler._sHandler.Length == 0)
                    {
                        GetHandlerErrAlarm(dtHead, string.Format("CostCenter:{0},Department:{1} 信息有誤,無法獲取簽核人", sCostCenter, sDepartment));
                    }
                    break;
                }
                break;

                #endregion
            case "2680-DEPT01-A3":     //I1
                #region
                switch (sAPTYP)
                {
                case "I1":
                    oDOAHandler._sHandler = GetDOAHandler_POWER(roleCode, sCostCenter, "");
                    if (!string.IsNullOrEmpty(oDOAHandler._sHandler))
                    {
                        jumpFlag = false;
                    }
                    else
                    {
                        jumpFlag = true;
                    }
                    break;

                default:
                    jumpFlag = true;
                    break;
                }
                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler_POWER(roleCode, sCostCenter, "");
                }
                #endregion
                break;

            case "2680-DEPT02-A3":             //I1
                #region
                switch (sAPTYP)
                {
                case "I1":
                    oDOAHandler._sHandler = GetDOAHandler_POWER(roleCode, sCostCenter, "");
                    if (oDOAHandler._sHandler.Length == 0)
                    {
                        GetHandlerErrAlarm(dtHead, string.Format("CostCenter:{0},Department:{1} 信息有誤,無法獲取簽核人", sCostCenter, sCostCenter));
                    }
                    break;

                default:
                    break;
                }
                #endregion
                break;

            case "2680-MD02":
                #region 根據金額簽核到廠長 大於等於2萬
                double TWD01 = GetAmount(dtDetail);    //匯率
                //double TWD01 = 100000;
                if (TWD01 >= 20000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2680-MD03":
                #region 根據金額簽核到總廠長 大於等於2萬
                double TWD05 = GetAmount(dtDetail);    //匯率
                //double TWD01 = 100000;
                if (TWD05 >= 20000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2680-BUHEAD":
                #region 根據金額簽核到BUHEAD 大於等於20萬
                double TWD00 = GetAmount(dtDetail);    //匯率
                //double TWD00 = 100000;
                if (TWD00 >= 200000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2680-BGHEAD":
                #region 根据金额判断是否需要签核至BGUHEAD  大於等於75萬
                double TWD02 = GetAmount(dtDetail);    //匯率
                //double TWD02 = 250001;
                if (TWD02 >= 750000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2680-CEO":
                #region 根据金额判断是否需要签核至CEO   大於等於500萬
                double TWD03 = GetAmount(dtDetail);    //匯率
                //double TWD03 = 600000;
                if (TWD03 >= 5000000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2680-CHAIRMAN":
                #region 根据金额判断是否需要签核至董事長 大於等於1000萬
                double TWD04 = GetAmount(dtDetail);    //匯率
                //double TWD04 = 100000000;
                if (TWD04 > 10000000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            default:
                break;
            }
            #endregion
        }
        /// <summary>
        /// 獲取DOA簽核人
        /// </summary>
        /// <param name="sLogonId">申請人</param>
        /// <param name="sDOA">DOA資訊</param>
        /// <param name="dtHead">單據表頭</param>
        /// <param name="dtDetail">單據DATA</param>
        /// <returns></returns>
        public Model_DOAHandler GetStepHandler(Model_DOAHandler pDOAHandler, DataTable dtHead, DataTable dtDetail)
        {
            oDOAHandler = pDOAHandler;
            //獲取當前簽核角色
            string currentRole = SPMAppLine.GetCurrentApprover(oDOAHandler._sDOA).Replace("{", "").Replace("}", "");

            //並簽檢查
            ParallelApprovalCheck(oDOAHandler, currentRole);
            oDOAHandler._sRoleCode = currentRole;
            //檢查是否最后一關簽核角色
            string nextRole = SPMAppLine.GetNextStep(oDOAHandler._sDOA);

            if (nextRole != "*")
            {
                //當前非最後一關簽核角色
                //檢查當前簽核角色是否並簽,是否最後一個並簽人員
                if (oDOAHandler._ParallelFlag == true && oDOAHandler._FinalFlag == false)
                {
                    //並簽,非最後一個人,將關卡打入下一關即END,觸發SPM並簽控制機制
                    oDOAHandler._sEndFlag = "Y";
                    //設置更新並簽FLAG為TRUE
                    oDOAHandler._UpdateParallelFlag = true;
                }
                else
                {
                    //非並簽或並簽且為最後一個人
                    //對DOA XML進行跳關處理
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                    do
                    {
                        //獲取當前簽核角色
                        currentRole = SPMAppLine.GetCurrentApprover(oDOAHandler._sDOA).Replace("{", "").Replace("}", "");
                        //並簽檢查
                        ParallelApprovalCheck(oDOAHandler, currentRole);
                        //CAL FUNCTION 抓取關卡簽核人直至該關卡非跳關狀態
                        StepCheck(dtHead, dtDetail);

                        //防止最後一個簽核角色為選簽時,前置條件不足陷於死循環
                        string currentStep = SPMAppLine.GetCurrentStep(oDOAHandler._sDOA);
                        if (currentStep == "*")
                        {
                            oDOAHandler._sJump    = "N";
                            oDOAHandler._sEndFlag = "Y";
                        }
                    }while (oDOAHandler._sJump == "Y");
                }
            }
            else
            {
                //當前為最後一關簽核角色
                //檢查當前簽核角色是否並簽
                if (oDOAHandler._ParallelFlag == true)
                {
                    //並簽,且為最後一個人
                    if (oDOAHandler._FinalFlag == true)
                    {
                        //對DOA XML進行跳關處理
                        oDOAHandler._sEndFlag = "Y";
                        try
                        {
                            oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                        }
                        catch (Exception ex)
                        {
                            DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                            throw new Exception("Server or network is busy now,pls try again");
                        }
                    }
                    else
                    {
                        //並簽,非最後一個人,將關卡打入下一關即END,觸發SPM並簽控制機制
                        oDOAHandler._sEndFlag = "Y";
                    }
                    //設置更新並簽FLAG為TRUE
                    oDOAHandler._UpdateParallelFlag = true;
                }
                else
                {
                    //非並簽,對DOA XML進行跳關處理
                    oDOAHandler._sEndFlag = "Y";
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
            }
            return(oDOAHandler);
        }
        /// <summary>
        /// 重載標準DOA-特殊規則獲取簽核人(TYPE C)
        /// </summary>
        /// <param name="roleCode"></param>
        /// <param name="dtHead"></param>
        /// <param name="dtDetail"></param>
        protected override void GetDOABySpeicalRule(string roleCode, DataTable dtHead, DataTable dtDetail)
        {
            DataRow drHead          = dtHead.Rows[0];
            DataRow drDetail        = dtDetail.Rows[0];
            string  reasonCode      = drHead["GRUND"].ToString();
            string  sAPTYP          = drHead["APTYP"].ToString();
            string  sLOC            = drHead["LOCFM"].ToString();
            string  costCenter      = drHead["KOSTL"].ToString().ToUpper();
            string  procurementType = drDetail["BESKZ"].ToString().Trim().ToUpper();
            string  prdSuppervisor  = drDetail["FEVOR"].ToString().Trim().ToUpper();
            string  applydate       = drHead["ERDAT"].ToString().Trim().ToUpper();
            string  mrpcontroller   = drDetail["DISPO"].ToString().Trim().ToUpper();

            bool jumpFlag = false;//跳關標示

            switch (roleCode)
            {
            case "CE01-DEPT01":
                switch (costCenter)
                {
                case "B315":                  //PM
                    oDOAHandler._sJump = "Y"; //PM部門 窗口不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                    break;

                default:
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, costCenter);
                    break;
                }
                break;

            case "CE01-DEPT02":
                if (costCenter.Length > 0)
                {
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, costCenter);
                }
                else
                {
                    GetHandlerErrAlarm(dtHead, "COST CENTER信息為空,無法獲取簽核人");
                }
                break;

            case "CE01-IPQC01":
                switch (sAPTYP)
                {
                case "I5":
                    switch (costCenter)
                    {
                    case "B460":            //I5單據,CC為CQS時無需簽核
                        jumpFlag = true;
                        break;

                    default:
                        jumpFlag = false;
                        break;
                    }
                    break;

                default:
                    jumpFlag = false;
                    break;
                }
                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N"; //依COST CENTER 獲取簽核人
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, costCenter);
                }

                break;

            case "CE01-IQC01":
                #region
                if (sAPTYP == "IC")
                {
                    switch (costCenter)
                    {
                    case "B411":
                    case "B412":
                    case "B450":
                        if (reasonCode == "0021" && procurementType != "E")            //  F 或 X 必簽
                        {
                            jumpFlag = false;
                        }
                        else
                        {
                            jumpFlag = true;
                        }
                        break;

                    default:
                        jumpFlag = true;
                        break;
                    }
                }
                else
                {
                    jumpFlag = true;
                }
                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N"; //依COST CENTER 獲取簽核人
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, costCenter);
                }
                #endregion
                break;

            case "CE01-MC01":
                #region
                if (procurementType != "E")     //外購F or X
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }
                if (jumpFlag)                 //自制往後跳
                {
                    oDOAHandler._sJump = "Y"; //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump = "N";
                    //依MRP CODE 獲取簽核人
                    Hashtable ht = new Hashtable();
                    foreach (DataRow dr in dtDetail.Rows)
                    {
                        string mrpcode = dr["DISPO"].ToString();     //取物料的MRP Controller
                        if (mrpcontroller.Length > 0)
                        {
                            string buyer = GetDOAHandler(roleCode, mrpcode);
                            if (buyer.Length > 0)
                            {
                                if (ht.Contains(buyer) == false)
                                {
                                    ht.Add(buyer, 0);
                                    if (oDOAHandler._sHandler.Length > 0)
                                    {
                                        oDOAHandler._sHandler += ",";
                                    }
                                    oDOAHandler._sHandler += buyer;
                                }
                            }
                        }
                    }
                }
                #endregion
                break;

            case "CE01-PC01":
                #region
                if (sAPTYP == "IC")
                {
                    switch (costCenter)
                    {
                    case "B411":
                    case "B412":
                    case "B450":
                        if (procurementType == "E")
                        {
                            jumpFlag = false;
                        }
                        else
                        {
                            jumpFlag = true;
                        }
                        break;

                    default:
                        jumpFlag = true;
                        break;
                    }
                }
                else
                {
                    if (procurementType == "E")
                    {
                        jumpFlag = false;
                    }
                    else
                    {
                        jumpFlag = true;
                    }
                }

                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    //依production Suppervisor 獲取簽核人
                    oDOAHandler._sJump = "N";

                    Hashtable ht = new Hashtable();
                    foreach (DataRow dr in dtDetail.Rows)
                    {
                        string mrpcode = dr["DISPO"].ToString();     //取物料的MRP Controller
                        if (mrpcode.Length > 0)
                        {
                            string controller = GetDOAHandler(roleCode, mrpcode);
                            if (controller.Length > 0)
                            {
                                if (ht.Contains(controller) == false)
                                {
                                    ht.Add(controller, 0);
                                    if (oDOAHandler._sHandler.Length > 0)
                                    {
                                        oDOAHandler._sHandler += ",";
                                    }

                                    oDOAHandler._sHandler += controller;
                                }
                            }
                        }
                    }
                }
                #endregion
                break;

            case "CE01-MC02":
                #region
                if (procurementType != "E")     //外購 F or X
                {
                    switch (costCenter)
                    {
                    case "B315":
                    case "B460":           //B315,B460 I5單據MC主管為必簽
                        if (sAPTYP == "I5")
                        {
                            jumpFlag = false;
                        }
                        else
                        {
                            //CC B315,B460 其它單據MC主管需檢查KPI
                            //jumpFlag = (CheckKPI(sAPTYP, costCenter, applydate, procurementType, dtDetail) == true) ? false : true;
                            jumpFlag = (CheckKPI(sAPTYP, costCenter, applydate, "F", dtDetail) == true) ? false : true;
                        }
                        break;

                    default:
                        //其它CC 所有單據MC主管需檢查KPI
                        //jumpFlag = (CheckKPI(sAPTYP, costCenter, applydate, procurementType, dtDetail) == true) ? false : true;
                        jumpFlag = (CheckKPI(sAPTYP, costCenter, applydate, "F", dtDetail) == true) ? false : true;
                        break;
                    }
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                #endregion
                break;

            case "CE01-PC02":
                #region
                if (procurementType == "E")
                {
                    switch (costCenter)
                    {
                    case "B315":
                    case "B460":           //B315,B460 I5單據PC主管為必簽
                        if (sAPTYP == "I5")
                        {
                            jumpFlag = false;
                        }
                        else
                        {
                            //CC B315,B460 其它單據PC主管需檢查KPI
                            jumpFlag = (CheckKPI(sAPTYP, costCenter, applydate, procurementType, dtDetail) == true) ? false : true;
                        }
                        break;

                    default:
                        //其它CC 所有單據PC主管需檢查KPI
                        jumpFlag = (CheckKPI(sAPTYP, costCenter, applydate, procurementType, dtDetail) == true) ? false : true;
                        break;
                    }
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                #endregion
                break;

            case "CE01-LMD01":
                #region
                switch (costCenter)
                {
                case "B315":
                case "B460":           //B315,B460 I5單據LMD主管為必簽
                    if (sAPTYP == "I5")
                    {
                        jumpFlag = false;
                    }
                    else
                    {
                        //CC B315,B460 其它單據LMD主管需檢查KPI
                        jumpFlag = (CheckKPI(sAPTYP, costCenter, applydate, procurementType, dtDetail) == true) ? false : true;
                    }
                    break;

                default:
                    //其它CC 所有單據PC主管需檢查KPI
                    if (procurementType == "X")
                    {
                        jumpFlag = (CheckKPI(sAPTYP, costCenter, applydate, "F", dtDetail) == true) ? false : true;
                    }
                    else
                    {
                        jumpFlag = (CheckKPI(sAPTYP, costCenter, applydate, procurementType, dtDetail) == true) ? false : true;
                    }

                    break;
                }
                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                #endregion
                break;

            default:
                break;
            }
        }
Esempio n. 10
0
        /// <summary>
        /// 重載標準DOA-特殊規則獲取簽核人(TYPE C)
        /// </summary>
        /// <param name="roleCode"></param>
        /// <param name="dtHead"></param>
        /// <param name="dtDetail"></param>
        protected override void GetDOABySpeicalRule(string roleCode, DataTable dtHead, DataTable dtDetail)
        {
            #region
            bool    jumpFlag     = false;//跳關標示
            string  buyerCode    = string.Empty;
            DataRow drHead       = dtHead.Rows[0];
            string  sAPTYP       = drHead["APTYP"].ToString();
            string  sLOCFrom     = drHead["LOCFM"].ToString();
            string  sLOCTo       = drHead["LOCTO"].ToString();
            string  sCostCenter  = drHead["KOSTL"].ToString().ToUpper().Trim();
            string  sDepartment  = drHead["ABTEI"].ToString().ToUpper().Trim();
            string  materialType = string.Empty;
            switch (roleCode)
            {
            case "2670-PMC01":
                #region
                switch (sAPTYP)
                {
                case "T1":
                    oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                    if (oDOAHandler._sJump == "Y")
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    else
                    {
                        buyerCode = dtDetail.Rows[0]["EKGRP"].ToString();
                        //儲位0010簽MC
                        if (sLOCTo == "0019" && (sLOCFrom == "0030" || sLOCFrom == "0020" || sLOCFrom == "001A"))
                        {
                            //非儲位0030/0030 轉0019簽PC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                        }

                        else
                        {
                            //簽MC
                            buyerCode = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                            if (buyerCode.Length > 0)
                            {
                                oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                            }
                            else
                            {
                                GetHandlerErrAlarm(dtHead, "物料BUYER CODE缺失,無法獲取簽核人");
                            }
                            break;
                        }
                    }
                    break;

                case "I1":
                    //material storage location
                    Hashtable dtSLoc = new Hashtable();
                    dtSLoc.Add("0010", "0010");
                    dtSLoc.Add("0013", "0013");
                    dtSLoc.Add("0012", "0012");
                    dtSLoc.Add("0019", "0019");
                    dtSLoc.Add("SHJ1", "SHJ1");
                    //sepcial storage location(include material/fg/ft)
                    Hashtable dtSLoc2 = new Hashtable();
                    dtSLoc2.Add("0024", "0024");
                    dtSLoc2.Add("0028", "0028");

                    if (dtSLoc.Contains(sLOCFrom))
                    {
                        Hashtable ht = new Hashtable();
                        //檢查每顆料的採購,如有多個則進行並簽
                        foreach (DataRow dr in dtDetail.Rows)
                        {
                            buyerCode = dr["EKGRP"].ToString().Trim().ToUpper();
                            string logonId = GetDOAHandlerByBuyerCode(buyerCode);
                            if (ht.Contains(logonId) == false)
                            {
                                ht.Add(logonId, 0);
                                if (oDOAHandler._sHandler.Length > 0)
                                {
                                    oDOAHandler._sHandler += ",";
                                }
                                oDOAHandler._sHandler += logonId;
                                break;
                            }
                        }
                        if (oDOAHandler._sHandler.Length == 0)
                        {
                            GetHandlerErrAlarm(dtHead, "物料對應BuyerCode信息有誤,無法獲取簽核人");
                        }
                    }
                    else if (dtSLoc2.Contains(sLOCFrom))
                    {
                        materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                        //看最後兩碼 FT =成品
                        //RH = 材料
                        //HL = 半品
                        //VP = 包材
                        if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                        {
                            buyerCode = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                            string logonId =
                                oDOAHandler._sJump = "N";
                            //簽MC
                            oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                        }
                        else
                        {
                            oDOAHandler._sJump = "N";
                            //簽PC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                        }
                    }
                    else
                    {
                        //簽PC
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                    }
                    break;

                case "IA":

                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                    {
                        buyerCode = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                        string logonId =
                            oDOAHandler._sJump = "N";
                        //簽MC
                        oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                    }
                    else
                    {
                        oDOAHandler._sJump = "N";
                        //簽PC
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                    }
                    break;
                }
                break;

                #endregion
            case "2670-MFG02":

                #region
                switch (sAPTYP)
                {
                case "T1":
                    oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                    if (oDOAHandler._sJump == "Y")
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    else
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "A");        //抓取簽核人空白 Bug 修復
                    }
                    break;

                default:        //應稽核要求 7302N成本中心 I3,I5單第一關簽核人 單獨指定 2019-05-30
                    if (sCostCenter == "7302N")
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, sCostCenter);
                    }
                    else
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "A");
                    }
                    break;
                }
                break;

                #endregion
            case "2670-PMC02":

                #region
                switch (sAPTYP)
                {
                case "T1":
                    //儲位0010簽MC主管
                    if (sLOCFrom == "0010")
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "MC");
                        break;
                    }
                    else
                    {
                        //非儲位0010簽PC主管
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                    }
                    break;

                case "IS":
                case "I1":
                    //material storage location
                    Hashtable dtSLoc = new Hashtable();
                    dtSLoc.Add("0010", "0010");
                    dtSLoc.Add("0013", "0013");
                    dtSLoc.Add("0019", "0019");
                    dtSLoc.Add("SHJ1", "SHJ1");
                    dtSLoc.Add("0012", "0012");
                    //sepcial storage location(include material/fg/ft)
                    Hashtable dtSLoc2 = new Hashtable();
                    dtSLoc2.Add("0024", "0024");
                    dtSLoc2.Add("0028", "0028");
                    if (dtSLoc.Contains(sLOCFrom))
                    {
                        if (sCostCenter == "7406N" && sDepartment == "MC")
                        {
                            //本部門申請跳過
                            oDOAHandler._sJump = "Y";
                            oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                        }
                        else
                        {
                            oDOAHandler._sJump = "N";
                            //簽MC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "MC");
                        }
                    }
                    else if (dtSLoc2.Contains(sLOCFrom))
                    {
                        materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                        //看最後兩碼 FT =成品
                        //RH = 材料
                        //HL = 半品
                        //VP = 包材
                        if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                        {
                            if (sCostCenter == "7406N" && sDepartment == "MC")
                            {
                                //本部門申請跳過
                                oDOAHandler._sJump = "Y";
                                oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                            }
                            else
                            {
                                oDOAHandler._sJump = "N";
                                //簽MC
                                oDOAHandler._sHandler = GetDOAHandler(roleCode, "MC");
                            }
                        }
                        else
                        {
                            if (sCostCenter == "7406N" && sDepartment == "PC")
                            {
                                //本部門申請跳過
                                oDOAHandler._sJump = "Y";
                                oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                            }
                            else
                            {
                                oDOAHandler._sJump = "N";
                                //簽PC
                                oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                            }
                        }
                    }
                    else
                    {
                        if (sCostCenter == "7406N" && sDepartment == "PC")
                        {
                            //本部門申請跳過
                            oDOAHandler._sJump = "Y";
                            oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                        }
                        else
                        {
                            oDOAHandler._sJump = "N";
                            //簽PC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                        }
                    }
                    break;

                case "I6":
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                    {
                        if (sCostCenter == "7406N" && sDepartment == "MC")
                        {
                            //本部門申請跳過
                            oDOAHandler._sJump = "Y";
                            oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                        }
                        else
                        {
                            oDOAHandler._sJump = "N";
                            //簽MC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "MC");
                        }
                    }
                    else
                    {
                        if (sCostCenter == "7406N" && sDepartment == "PC")
                        {
                            //本部門申請跳過
                            oDOAHandler._sJump = "Y";
                            oDOAHandler._sDOA  = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                        }
                        else
                        {
                            oDOAHandler._sJump = "N";
                            //簽PC
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                        }
                    }
                    break;

                case "IA":
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                    {
                        buyerCode = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                        string logonId =
                            oDOAHandler._sJump = "N";
                        //簽MC
                        oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                    }
                    else
                    {
                        oDOAHandler._sJump = "N";
                        //簽PC
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                    }

                    break;
                }

                break;

                #endregion
            case "2670-DEPT01":

                #region
                oDOAHandler._sHandler = GetDOAHandler_HIS(roleCode, sCostCenter, sDepartment);
                if (oDOAHandler._sHandler.Length == 0)
                {
                    GetHandlerErrAlarm(dtHead, string.Format("CostCenter:{0},Department:{1} 信息有誤,無法獲取簽核人", sCostCenter, sDepartment));
                }
                break;

                #endregion
            case "2670-DEPT02":

                #region
                oDOAHandler._sHandler = GetDOAHandler(roleCode, sCostCenter);
                if (oDOAHandler._sHandler.Length == 0)
                {
                    oDOAHandler._sJump = "Y";    //PCT不用簽,主管與窗口為同一人向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump = "N";
                }
                break;

                #endregion
            case "2670-APP01":

                #region
                oDOAHandler._sHandler = GetDOAHandler(roleCode, sCostCenter);
                if (oDOAHandler._sHandler.Length == 0)
                {
                    GetHandlerErrAlarm(dtHead, string.Format("CostCenter:{0},Department:{1} 信息有誤,無法獲取簽核人", sCostCenter, sDepartment));
                }
                break;

                #endregion
            case "2670-FIN01":

                #region
                oDOAHandler._sHandler = GetDOAHandler(roleCode);
                break;

                #endregion
            case "2670-CUST01":

                #region
                switch (sAPTYP)
                {
                case "IS":
                    jumpFlag = false;
                    break;

                case "I1":
                    string returnFlag = drHead["RTNIF"].ToString();
                    if (returnFlag == "N")
                    {
                        jumpFlag = false;
                    }
                    else
                    {
                        jumpFlag = true;
                    }
                    break;

                default:
                    jumpFlag = true;
                    break;
                }
                if (jumpFlag)
                {
                    oDOAHandler._sJump = "Y";    //不用簽,向后跳關
                    try
                    {
                        oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                    }
                    catch (Exception ex)
                    {
                        DBIO.RecordTraceLog("E", ex.Message, oDOAHandler);
                        throw new Exception("Server or network is busy now,pls try again");
                    }
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            default:
                break;

            case "2670-DEPT01-T1":

                #region     //costcenter +dept

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    oDOAHandler._sHandler = GetDOAHandler_HIS(roleCode, sCostCenter, sDepartment);
                }
                break;


                #endregion
            case "2670-DEPT02-T1":

                #region       //costcenter

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, sCostCenter);
                }

                break;
                #endregion

            case "2670-PMC01-T1":

                #region

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                    {
                        buyerCode = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                        if (buyerCode.Length > 0)
                        {
                            oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                        }
                        else
                        {
                            GetHandlerErrAlarm(dtHead, "物料BUYER CODE缺失,無法獲取簽核人");
                        }
                    }
                    else
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "PC");
                    }
                }
                break;

                #endregion
            case "2670-SQE01-T1":

            case "2670-IQE01-T1":

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    buyerCode             = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                    oDOAHandler._sHandler = GetDOAHandler(roleCode, buyerCode);
                }
                break;

            case "2670-QRA01-T1":

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "RH")
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "RH");
                    }
                    else
                    {
                        Hashtable dtSLoc = new Hashtable();
                        dtSLoc.Add("0023", "0023");
                        if (dtSLoc.Contains(sLOCFrom) || dtSLoc.Contains(sLOCTo))
                        {
                            oDOAHandler._sHandler = GetDOAHandler_HIS(roleCode, "HL", "A");
                        }
                        else if (sLOCFrom == "0024")
                        {
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "FT");
                        }
                        else
                        {
                            oDOAHandler._sHandler = GetDOAHandler_HIS(roleCode, "HL", "B");
                        }
                    }
                }
                break;

            case "2670-MC01-I3":
                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "HL")
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "CZ1");     //半成品簽PC人員 CZ1 : Michael Liao 2019/03/06
                    }
                    else
                    {
                        buyerCode             = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                        oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                    }
                }
                break;

            case "2670-IQC01":
                switch (sAPTYP)
                {
                case "IA":
                    materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                    //看最後兩碼 FT =成品
                    //RH = 材料
                    //HL = 半品
                    //VP = 包材
                    if (materialType.Length == 4 && materialType.Substring(2, 2) == "FT")
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode, "FT");            //簽成品負責人
                    }
                    else
                    {
                        oDOAHandler._sHandler = GetDOAHandler(roleCode);            //簽其他負責人
                    }
                    break;

                case "IC":
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);            //簽其他負責人
                    break;
                }
                break;

            case "2670-MFG01-T1":
            case "2670-IQM02-T1":
            case "2670-PC01-T1":
            case "2670-PMC02-T1":
            case "2670-WH01-T1":
            case "2670-MC02-T1":
                #region

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    switch (sAPTYP)
                    {
                    case "IA":
                        materialType = dtDetail.Rows[0]["MTART"].ToString().Trim().ToUpper();
                        //看最後兩碼 FT =成品
                        //RH = 材料
                        //HL = 半品
                        //VP = 包材
                        if (materialType.Length == 4 && materialType.Substring(2, 2) == "FT")
                        {
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "FT");        //簽成品負責人
                        }
                        else
                        {
                            oDOAHandler._sHandler = GetDOAHandler(roleCode);        //簽其他負責人
                        }
                        break;

                    default:
                        if (sLOCFrom == "0010" && sLOCTo == "0013" && sAPTYP == "T1")         //原材料良品倉轉到原材料不良品倉 2670 簽核人變更  2018-12-24
                        {
                            oDOAHandler._sHandler = GetDOAHandler(roleCode, "UH");
                        }
                        else
                        {
                            oDOAHandler._sHandler = GetDOAHandler(roleCode);
                        }
                        break;
                    }
                }
                break;

                #endregion
            case "2670-MC01-T1":

                #region     //buyercode

                oDOAHandler._sJump = CheckJump(sLOCFrom, sLOCTo, roleCode, sAPTYP) == true ? "Y" : "N";
                if (oDOAHandler._sJump == "Y")
                {
                    oDOAHandler._sDOA = SPMAppLine.GetApproveXML(oDOAHandler._sDOA);
                }
                else
                {
                    buyerCode             = dtDetail.Rows[0]["EKGRP"].ToString().Trim().ToUpper();
                    oDOAHandler._sHandler = GetDOAHandlerByBuyerCode(buyerCode);
                }

                break;

                #endregion

            case "2670-MD02":
                #region 根據金額簽核到廠長 大於等於2萬
                double TWD01 = GetAmount(dtDetail);    //匯率
                //double TWD01 = 100000;
                if (TWD01 >= 20000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2670-BUHEAD":
                #region 根據金額簽核到BUHEAD 大於等於20萬
                double TWD00 = GetAmount(dtDetail);    //匯率
                //double TWD00 = 100000;
                if (TWD00 >= 200000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2670-BGHEAD":
                #region 根据金额判断是否需要签核至BGUHEAD  大於等於50萬
                double TWD02 = GetAmount(dtDetail);    //匯率
                //double TWD02 = 250001;
                if (TWD02 >= 500000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2670-CEO":
                #region 根据金额判断是否需要签核至CEO   大於等於500萬
                double TWD03 = GetAmount(dtDetail);    //匯率
                //double TWD03 = 600000;
                if (TWD03 >= 5000000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;

                #endregion
            case "2670-CHAIRMAN":
                #region 根据金额判断是否需要签核至董事長 大於等於1000萬
                double TWD04 = GetAmount(dtDetail);    //匯率
                //double TWD04 = 100000000;
                if (TWD04 > 10000000)
                {
                    jumpFlag = false;
                }
                else
                {
                    jumpFlag = true;
                }

                if (jumpFlag)
                {
                    DOAJump();
                }
                else
                {
                    oDOAHandler._sJump    = "N";
                    oDOAHandler._sHandler = GetDOAHandler(roleCode);
                }
                break;
                #endregion
            }
            #endregion
        }