Beispiel #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);
        }
Beispiel #2
0
        /// <summary>
        ///更新並簽狀態
        /// </summary>
        /// <param name="pDOAHandler"></param>
        /// <returns></returns>
        static public bool UpdateParallelApprovalStatus(Model_DOAHandler pDOAHandler)
        {
            bool flag = true;

            if (pDOAHandler._ParallelFlag == true)
            {
                sql = "UPDATE TB_GDS_ParallelApproval SET ActualCount=ActualCount+1 WHERE Plant = @Plant AND DocYear=@DocYear AND DocNo = @DocNo AND RoleCode = @RoleCode ";
                opc.Clear();
                opc.Add(DataPara.CreateDataParameter("@Plant", SqlDbType.VarChar, pDOAHandler._sPlant));
                opc.Add(DataPara.CreateDataParameter("@DocYear", SqlDbType.VarChar, pDOAHandler._sDocYear));
                opc.Add(DataPara.CreateDataParameter("@DocNo", SqlDbType.VarChar, pDOAHandler._sDocNo));
                opc.Add(DataPara.CreateDataParameter("@RoleCode", SqlDbType.VarChar, pDOAHandler._sRoleCode));
                try
                {
                    sdb.ExecuteNonQuery(sql, opc);
                }
                catch (Exception ex)
                {
                    flag = false;
                    throw new Exception("# Fail: db access error " + ex.Message);
                }
            }

            return(flag);
        }
Beispiel #3
0
        /// <summary>
        /// 記錄簽核角色為並簽情形
        /// </summary>
        /// <param name="pDOAHandler"></param>
        /// <returns></returns>
        static public bool RecordParallelApprovalInfo(Model_DOAHandler pDOAHandler)
        {
            bool flag = true;

            if (pDOAHandler._sEndFlag == "N")
            {
                string[] handlerList = pDOAHandler._sHandler.Split(',');
                if (handlerList.Length > 1)
                {
                    sql = "INSERT INTO TB_GDS_ParallelApproval (Plant,DocYear,DocNo,RoleCode,TotalCount,ActualCount,UPDATE_TIME) VALUES (@Plant,@DocYear,@DocNo,@RoleCode,@TotalCount,0,getdate()) ";
                    opc.Clear();
                    opc.Add(DataPara.CreateDataParameter("@Plant", SqlDbType.VarChar, pDOAHandler._sPlant));
                    opc.Add(DataPara.CreateDataParameter("@DocYear", SqlDbType.VarChar, pDOAHandler._sDocYear));
                    opc.Add(DataPara.CreateDataParameter("@DocNo", SqlDbType.VarChar, pDOAHandler._sDocNo));
                    opc.Add(DataPara.CreateDataParameter("@RoleCode", SqlDbType.VarChar, pDOAHandler._sRoleCode));
                    opc.Add(DataPara.CreateDataParameter("@TotalCount", SqlDbType.Int, handlerList.Length));
                    try
                    {
                        sdb.ExecuteNonQuery(sql, opc);
                    }
                    catch (Exception ex)
                    {
                        flag = false;
                        throw new Exception("# Fail: db access error " + ex.Message);
                    }
                }
            }

            return(flag);
        }
        /// <summary>
        /// 重載-檢查是否並簽
        /// </summary>
        /// <param name="caseId"></param>
        /// <param name="roleName"></param>
        /// <returns></returns>
        protected override void ParallelApprovalCheck(Model_DOAHandler DOAHandler, string roleCode)
        {
            try
            {
                sql = "SELECT * FROM TB_GDS_ParallelApproval  with(nolock) WHERE  Plant = @Plant AND DocYear=@DocYear AND DocNo = @DocNo AND RoleCode = @RoleCode ORDER BY UPDATE_TIME DESC ";
                opc.Clear();
                opc.Add(DataPara.CreateDataParameter("@RoleCode", SqlDbType.VarChar, roleCode));
                opc.Add(DataPara.CreateDataParameter("@Plant", SqlDbType.VarChar, DOAHandler._sPlant));
                opc.Add(DataPara.CreateDataParameter("@DocNo", SqlDbType.VarChar, DOAHandler._sDocNo));
                opc.Add(DataPara.CreateDataParameter("@DocYear", SqlDbType.VarChar, DOAHandler._sDocYear));
                DataTable dt = sdb.GetDataTable(sql, opc);

                if (dt.Rows.Count > 0)
                {
                    DataRow dr = dt.Rows[0];
                    oDOAHandler._ParallelFlag = true;
                    int totalCount  = int.Parse(dr["totalCount"].ToString());
                    int actualcount = int.Parse(dr["actualcount"].ToString());
                    switch (roleCode)
                    {
                    case "CE01-DEPT01":
                    case "CE01-DEPT02":
                    case "CE01-IPQC01":
                    case "CE01-IQC01":
                        //case "CE01-PC01":
                        //任意一個人簽就跳關

                        oDOAHandler._FinalFlag = true;
                        break;

                    default:
                        //全部簽就跳關
                        if (totalCount - 1 > actualcount)
                        {
                            oDOAHandler._FinalFlag = false;
                        }
                        else
                        {
                            oDOAHandler._FinalFlag = true;
                        }

                        break;
                    }
                }
                else
                {
                    oDOAHandler._ParallelFlag = false;
                    oDOAHandler._FinalFlag    = false;
                }
            }
            catch (Exception)
            {
                throw new Exception(" DB Access fail,pls contact sys administrator");
            }
        }
        /// <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_StartForm(Model_DOAHandler pDOAHandler, DataTable dtHead, DataTable dtDetail)
        {
            oDOAHandler = pDOAHandler;
            oDOAHandler._ParallelFlag = false;
            oDOAHandler._FinalFlag    = false;
            do
            {
                StepCheck(dtHead, dtDetail);//CAL FUNCTION 抓取關卡簽核人直至該關卡非跳關狀態
            }while (oDOAHandler._sJump == "Y");

            return(oDOAHandler);
        }
Beispiel #6
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);
        }
Beispiel #7
0
 /// <summary>
 /// write Trace log to database
 /// </summary>
 /// <param name="logString">log</param>
 /// <param name="appName">程序名稱</param>
 static public void WriteTraceLog(string logString, Model_DOAHandler DOAHandler)
 {
     sql = "INSERT INTO TB_GDS_LOG (Application, LogTime, Message,Plant,DocNo,DocYear) VALUES (@APP, @LOGTIME, @MESSAGE, @Plant, @DocNo, @DocYear)";
     opc.Clear();
     opc.Add(DataPara.CreateDataParameter("@APP", SqlDbType.VarChar, "DOA Trace"));
     opc.Add(DataPara.CreateDataParameter("@LOGTIME", SqlDbType.DateTime, DateTime.Now));
     opc.Add(DataPara.CreateDataParameter("@MESSAGE", SqlDbType.VarChar, logString));
     opc.Add(DataPara.CreateDataParameter("@Plant", SqlDbType.VarChar, DOAHandler._sPlant));
     opc.Add(DataPara.CreateDataParameter("@DocNo", SqlDbType.VarChar, DOAHandler._sDocNo));
     opc.Add(DataPara.CreateDataParameter("@DocYear", SqlDbType.VarChar, DOAHandler._sDocYear));
     try
     {
         sdb.ExecuteNonQuery(sql, opc);
     }
     catch (Exception ex)
     {
         throw new Exception("# Fail: db access error " + ex.Message);
     }
 }
        /// <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);
        }