private bool isLastFlowNow(string CompID, string flowCaseID, string Model, string insystemID)
    {
        DataRow retrunRow;
        string  message = "";

        try
        {
            if (!OBFlowUtility.QueryHRFlowEngineDatas_Now(CompID, flowCaseID, Model, out retrunRow, out message, insystemID))
            {
                return(false);
            }
            else if (retrunRow.Table.Rows.Count > 0)
            {
                string FlowEndFlag = retrunRow["FlowEndFlag"].ToString();
                return(FlowEndFlag == "1" ? true : false);
            }
            else
            {
                return(true);
            }
        }
        catch (Exception)
        {
            return(true);
        }
    }
Пример #2
0
    /// <summary>
    /// Insert_UpdateVisitFormSign
    /// 公出申請、公出修改
    /// 申請後送簽流程
    /// </summary>
    /// <param name="model">畫面model</param>
    /// <param name="datas">回傳資料</param>
    /// <param name="msg">回傳訊息</param>
    /// <returns>bool</returns>
    public static bool Insert_UpdateVisitFormSign(OnBizPublicOutModel model, string regStr, out long seccessCount, out string msg)
    {
        bool result = false;

        seccessCount = 0;
        msg          = "";
        try
        {
            Dictionary <string, string> ValidUserData = new Dictionary <string, string>();
            FlowExpress flow                       = new FlowExpress(Util.getAppSetting("app://AattendantDB_OnBiz/"));
            string      KeyValue                   = "";//字串
            string[]    strarray                   = null;
            string      strFlowCaseID              = "";
            Dictionary <string, string> empData    = new Dictionary <string, string>();
            Dictionary <string, string> toUserData = new Dictionary <string, string>();
            string flowCode       = "";
            string flowSN         = "";
            bool   nextIsLastFlow = false;
            string meassge        = "";

            DbHelper      db = new DbHelper(_attendantDBName);
            CommandHelper sb = db.CreateCommandHelper();
            DbConnection  cn = db.OpenConnection();

            OnBizPublicOutBean dataBean = new OnBizPublicOutBean()
            {
                CompID            = model.CompID,
                oldCompID         = model.oldCompID,
                EmpID             = model.EmpID,
                oldEmpID          = model.oldEmpID,
                EmpNameN          = model.EmpNameN,
                WriteDate         = model.OBWriteDate,
                WriteTime         = model.OBWriteTime,
                WriterID          = model.OBWriterID,
                oldWriteDate      = model.oldOBWriteDate,
                WriterName        = model.OBWriterName,
                FormSeq           = model.OBFormSeq,
                oldFormSeq        = model.oldOBFormSeq,
                FlowCaseID        = "",
                TransactionSeq    = "",
                OBFormStatus      = "2",
                ValidDate         = "",
                ValidID           = "",
                ValidName         = "",
                RejectReasonID    = "",
                RejectReasonCN    = "",
                DeptID            = model.OBDeptID,
                DeptName          = model.OBDeptName,
                OrganID           = model.OBOrganID,
                OrganName         = model.OBOrganName,
                WorkTypeID        = model.OBWorkTypeID,
                WorkType          = model.OBWorkType,
                FlowOrganID       = model.OBFlowOrganID,
                FlowOrganName     = model.OBFlowOrganName,
                TitleID           = model.OBTitleID,
                TitleName         = model.OBTitleName,
                PositionID        = model.OBPositionID,
                Position          = model.OBPosition,
                Tel_1             = model.OBTel_1,
                Tel_2             = model.OBTel_2,
                VisitBeginDate    = model.OBVisitBeginDate,
                BeginTime         = model.OBBeginTime,
                VisitEndDate      = model.OBVisitEndDate,
                EndTime           = model.OBEndTime,
                DeputyID          = model.OBDeputyID,
                DeputyName        = model.OBDeputyName,
                LocationType      = model.OBLocationType,
                InterLocationID   = model.OBInterLocationID,
                InterLocationName = model.OBInterLocationName,
                ExterLocationName = model.OBExterLocationName,
                VisiterName       = model.OBVisiterName,
                VisiterTel        = model.OBVisiterTel,
                VisitReasonID     = model.OBVisitReasonID,
                VisitReasonCN     = model.OBVisitReasonCN,
                VisitReasonDesc   = model.OBVisitReasonDesc,
                LastChgComp       = model.OBLastChgComp,
                LastChgID         = model.OBLastChgID,
            };
            OBFlowUtility.QueryFlowDataAndToUserData_First(dataBean.CompID, dataBean.OrganID, dataBean.FlowOrganID, dataBean.EmpID, dataBean.WriterID, dataBean.VisitBeginDate,
                                                           out empData, out toUserData, out flowCode, out flowSN, out nextIsLastFlow, out meassge);

            dataBean.ValidID   = toUserData["SignID"].ToString();
            dataBean.ValidName = SelectSupervisor(toUserData["SignIDComp"], toUserData["SignID"]);

            KeyValue      = dataBean.CompID + "," + dataBean.EmpID + "," + dataBean.WriteDate + "," + dataBean.FormSeq;
            strarray      = (dataBean.EmpID + "," + dataBean.EmpNameN + "," + dataBean.VisitBeginDate + "," + dataBean.BeginTime + "," + dataBean.EndTime).Split(",");
            ValidUserData = CustVerify.getEmpID_Name_Dictionary(toUserData["SignID"], toUserData["SignIDComp"]);
            if (FlowExpress.IsFlowInsVerify(flow.FlowID, KeyValue.Split(","), strarray, "btnBefore", ValidUserData, ""))
            {
                strFlowCaseID       = FlowExpress.getFlowCaseID(flow.FlowID, KeyValue);
                dataBean.FlowCaseID = strFlowCaseID;
                switch (regStr)
                {
                case "Addes": { SqlCommand.InesrtVisitFormSendSql(dataBean, ref sb); break; }

                case "Modify": { SqlCommand.UpdateVisitFormSend(dataBean, ref sb); break; }
                }
                OBFlowUtility.InsertHROtherFlowLogCommand(strFlowCaseID, "1", strFlowCaseID + "1".PadLeft(5, '0'), "B", dataBean.EmpID, dataBean.OrganID, dataBean.FlowOrganID, dataBean.WriterID,
                                                          flowCode, flowSN, "1", "1", toUserData["SignIDComp"], toUserData["SignID"], toUserData["SignOrganID"], toUserData["SignFlowOrganID"], "1", false, ref sb);

                sendEMail(dataBean, ref sb);
            }
            try
            {
                using (var trans = cn.BeginTransaction())
                {
                    try
                    {
                        seccessCount = db.ExecuteNonQuery(sb.BuildCommand(), trans); //執行新增,成功筆數回傳,並做Transaction機制
                        trans.Commit();                                              //成功Transaction直接Commit
                    }
                    catch (Exception)
                    {
                        trans.Rollback(); //失敗Transaction Rollback
                        FlowExpress.IsFlowRollBack(flow.FlowID, dataBean.FlowCaseID);
                        throw;
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }

            result = true;
        }
        catch (Exception ex)
        {
            msg = ex.Message;
        }
        return(result);
    }
Пример #3
0
    /// <summary>
    /// CancelVisitForm
    /// 公出查詢
    /// 送簽後取消流程
    /// </summary>
    /// <param name="model">畫面model</param>
    /// <param name="datas">回傳資料</param>
    /// <param name="msg">回傳訊息</param>
    /// <returns>bool</returns>
    public static bool CancelVisitForm(List <OnBizPublicOutModel> model, out long seccessCount, out string msg)
    {
        bool result = false;

        seccessCount = 0;
        msg          = "";
        try
        {
            Dictionary <string, string> ValidUserData = new Dictionary <string, string>();
            FlowExpress   flow = new FlowExpress(Util.getAppSetting("app://AattendantDB_OnBiz/"));
            DbHelper      db   = new DbHelper(_attendantDBName);
            CommandHelper sb   = db.CreateCommandHelper();
            DbConnection  cn   = db.OpenConnection();
            string        flowCaseIDForRollBack = "";
            try
            {
                using (var trans = cn.BeginTransaction())
                {
                    try
                    {
                        foreach (OnBizPublicOutModel item in model)
                        {
                            OnBizPublicOutBean dataBean = new OnBizPublicOutBean()
                            {
                                CompID      = item.CompID,
                                EmpID       = item.EmpID,
                                WriteDate   = item.OBWriteDate,
                                FormSeq     = item.OBFormSeq,
                                FlowCaseID  = item.FlowCaseID,
                                FlowLogID   = item.FlowLogID,
                                ValidID     = item.ValidID,
                                LastChgComp = item.OBLastChgComp,
                                LastChgID   = item.OBLastChgID,
                                LastChgDate = item.OBLastChgDate
                            };

                            ValidUserData = CustVerify.getEmpID_Name_Dictionary(dataBean.ValidID, dataBean.CompID);

                            if (FlowExpress.IsFlowVerify(flow.FlowID, dataBean.FlowLogID, "btnCancel", ValidUserData, "取消"))
                            {
                                sb.Reset();
                                flowCaseIDForRollBack += dataBean.FlowCaseID + ",";
                                OBFlowUtility.ChangeFlowFlag(dataBean.FlowCaseID, "OB01", "0001", dataBean.CompID, dataBean.ValidID, "0", ref sb);
                                SqlCommand.CancelVisitFormSql(dataBean, ref sb);
                                SqlCommand.UpdateHROtherFlowLogSql(dataBean, ref sb);
                            }
                        }
                        seccessCount = db.ExecuteNonQuery(sb.BuildCommand(), trans); //執行新增,成功筆數回傳,並做Transaction機制
                        trans.Commit();                                              //成功Transaction直接Commit
                    }
                    catch (Exception)
                    {
                        trans.Rollback(); //失敗Transaction Rollback
                        string[] flowCaseIDAry = flowCaseIDForRollBack.Split(",");
                        for (int i = 0; i < flowCaseIDAry.Length - 1; i++)
                        {
                            FlowExpress.IsFlowRollBack(flow.FlowID, flowCaseIDAry[i]);
                        }
                        throw;
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }

            result = true;
        }
        catch (Exception ex)
        {
            msg = ex.Message;
        }
        return(result);
    }
    private bool nextFlowBtn(Punch_Confirm_Remedy_Bean Bean, out string flowCode, out string flowSN, ref string btnName, out Dictionary <string, string> toUserData, out string msg)
    {
        flowCode   = ""; flowSN = ""; msg = "";
        toUserData = new Dictionary <string, string>();
        string OTEmpID    = Bean.EmpID,
               AssignTo   = Bean.ValidID,
               CompID     = Bean.CompID,
               PunchDate  = Bean.PunchDate,
               FlowCaseID = Bean.FlowCaseID;

        bool IsUpValidRankID = true;
        bool IsUpEmpRankID   = false;

        bool   isLastFlow, nextIsLastFlow;
        string signLineDefine = "", meassge = "";
        string SignOrganID = "", SignID = "", SignIDComp = "";

        string        FlowStepID = "";
        DbHelper      db         = new DbHelper(Aattendant._AattendantDBName);
        CommandHelper sb         = db.CreateCommandHelper();

        sb.Reset();
        sb.Append("SELECT FlowStepID from " + FlowCustDB + "FlowOpenLog ");
        sb.Append(" where FlowCaseID=").AppendParameter("FlowCaseID", FlowCaseID);
        try
        {
            FlowStepID = db.ExecuteScalar(sb.BuildCommand()).ToString();
        }
        catch (Exception)
        {
            FlowStepID = "";
            msg        = "永豐流程查無資料";
            return(false);
        }
        //讀取現在關卡與下一關相關資料,因為不論回傳是否,我還是要資料,所以沒檢核return與meassge
        OBFlowUtility.QueryFlowDataAndToUserData(CompID, AssignTo, PunchDate, FlowCaseID, "P",
                                                 out toUserData, out flowCode, out flowSN, out signLineDefine, out isLastFlow, out nextIsLastFlow, out meassge, "PO");

        //如果QueryFlowDataAndToUserData出錯(HR關與改派容易出現沒有下一關卻無法判定現在是最後一關的狀況),會找不到現在是否為最後一關,這裡單獨再找一次
        isLastFlow = isLastFlowNow(Bean.CompID, FlowCaseID, "P", "PO");

        //如果沒有下一關資料,則用現在關卡資料取代(對應上述QueryFlowDataAndToUserData問題 )
        if (toUserData.Count == 0)
        {
            //取[最近的行政or功能]資料 取代 [現在關卡]資料
            DataTable dtHROtherFlowLog_toUD = PunchUpdate.HROtherFlowLog(FlowCaseID, true);
            toUserData.Add("SignLine", dtHROtherFlowLog_toUD.Rows[0]["SignLine"].ToString());
            toUserData.Add("SignIDComp", dtHROtherFlowLog_toUD.Rows[0]["SignIDComp"].ToString());
            toUserData.Add("SignID", AssignTo);
            toUserData.Add("SignOrganID", dtHROtherFlowLog_toUD.Rows[0]["SignOrganID"].ToString());
            toUserData.Add("SignFlowOrganID", dtHROtherFlowLog_toUD.Rows[0]["SignFlowOrganID"].ToString());
        }

        //如果下一關主管與現在主管相同,則再往上階找下一關主管資料
        if (toUserData["SignID"] == AssignTo && signLineDefine != "3")
        {
            switch (toUserData["SignLine"])
            {
            //HR線 或 行政線
            case "4":
            case "1":
                if (EmpInfo.QueryOrganData(Bean.CompID, toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp))
                {
                    toUserData["SignID"]          = SignID;
                    toUserData["SignIDComp"]      = SignIDComp;
                    toUserData["SignOrganID"]     = SignOrganID;
                    toUserData["SignFlowOrganID"] = "";
                }
                break;

            //功能線
            case "2":
                if (EmpInfo.QueryFlowOrganData(toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp))
                {
                    toUserData["SignID"]          = SignID;
                    toUserData["SignIDComp"]      = SignIDComp;
                    toUserData["SignOrganID"]     = "";
                    toUserData["SignFlowOrganID"] = SignOrganID;
                }
                break;

            //原本switch的是signLineDefine,現在改成toUserData["SignLine"]後,
            //case "3"裏頭的if基本只會用到else[非功能線一律走行政線],以防萬一先保留。
            //改派
            case "3":
                if (toUserData["SignLine"] == "2")
                {
                    if (EmpInfo.QueryFlowOrganData(toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp))
                    {
                        toUserData["SignID"]          = SignID;
                        toUserData["SignIDComp"]      = SignIDComp;
                        toUserData["SignOrganID"]     = "";
                        toUserData["SignFlowOrganID"] = SignOrganID;
                    }
                }
                else
                {
                    if (EmpInfo.QueryOrganData(Bean.CompID, toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp))
                    {
                        toUserData["SignID"]          = SignID;
                        toUserData["SignIDComp"]      = SignIDComp;
                        toUserData["SignOrganID"]     = SignOrganID;
                        toUserData["SignFlowOrganID"] = "";
                    }
                }
                break;
            }
        }

        RankIDCheck(CompID, FlowCaseID, out IsUpValidRankID, out IsUpEmpRankID);
        if (signLineDefine == "4")           //HR特別關(後台沒有送簽功能的話,這裡不會用到)
        {
            if (IsUpValidRankID)             //大於Rank16
            {
                Session["btnVisible"] = "2"; //給永豐流程按鈕隱藏判斷
                btnName = "btnClose";        //回傳按鈕名稱,給多筆審核組進DataTable傳給審核畫面
            }
            else
            {
                if (FlowStepID == "A10") //預防HR送錯關,本來資料上HR關是只有A20或A40等最後一關
                {
                    Session["btnVisible"] = "0";
                    btnName = "btnApprove";
                }
                else
                {
                    Session["btnVisible"] = "1";
                    btnName = "btnReApprove";
                }
            }
        }
        else if (!isLastFlowNow(CompID, FlowCaseID, "P", "PO")) //非最後一關
        {
            if (IsUpEmpRankID)                                  //大於Rank19
            {
                Session["btnVisible"] = "2";
                btnName = "btnClose";
            }
            else
            {
                if (nextIsLastFlow) //下一關是否進入A40最後一關
                {
                    Session["btnVisible"] = "0";
                    btnName = "btnApprove";
                }
                else
                {
                    Session["btnVisible"] = "1";
                    btnName = "btnReApprove";
                }
            }
        }
        else//最後一關
        {
            if (OTEmpID.Trim().Equals(UserInfo.getUserInfo().UserID.Trim()))//當加班人是自己主管的代理人並審自己的加班單
            {
                if (IsUpEmpRankID)//加班人RankID>19
                {
                    Session["btnVisible"] = "2";
                    btnName = "btnClose";
                }
                else
                {
                    Session["btnVisible"] = "1";
                    btnName = "btnReApprove";
                }
            }
            else if (IsUpValidRankID)//大於Rank16
            {
                Session["btnVisible"] = "2";
                btnName = "btnClose";
            }
            else
            {
                Session["btnVisible"] = "1";
                btnName = "btnReApprove";
            }
        }

        //如果找不到下一關主管資料,彈跳視窗並且return false
        if (toUserData["SignID"] == "")
        {
            toUserData["SignIDComp"] = UserInfo.getUserInfo().CompID.Trim();
            toUserData["SignID"]     = UserInfo.getUserInfo().UserID.Trim();
            //Util.MsgBox("查無下一關主管資料");
            if (isLastFlow) //最後一關不用找下一關主管
            {
                return(true);
            }
            else
            {
                msg = "查無下一關主管資料";
                return(false);
            }
        }
        return(true);
    }
Пример #5
0
    public static bool PunchAppdOperation_SaveData(Punch_Confirm_Remedy_Bean model, Dictionary <string, string> oAssDic, string btnName, string FlowStepOpinion, out long seccessCount, out string msg, string flowCode = "", string flowSN = "", string flowSeq = "", string FlowLogBatNo = "", string FlowLogID = "", Dictionary <string, string> toUserData = null)
    {
        seccessCount = 0;
        msg          = "";
        Punch_Confirm_Remedy_Bean datas = new Punch_Confirm_Remedy_Bean();

        try
        {
            FlowExpress flow         = new FlowExpress(Util.getAppSetting("app://AattendantDB_PunchUpdate/"), model.FlowCaseID, false);
            string      strFlowLogID = flow.FlowCurrLastLogID;
            //string strFlowLogID=PunchUpdate.getFlowLogID(Util.getAppSetting("app://AattendantDB_PunchUpdate/"), model.FlowCaseID);
            //FlowExpress flow = new FlowExpress(Util.getAppSetting("app://AattendantDB_PunchUpdate/"), model.FlowCaseID);
            //FlowExpress flow = new FlowExpress(Util.getAppSetting("app://AattendantDB_PunchUpdate/"), strFlowLogID);
            DbHelper      db = new DbHelper(Aattendant._AattendantDBName);
            CommandHelper sb = db.CreateCommandHelper();
            DbConnection  cn = db.OpenConnection();
            DbTransaction tx = cn.BeginTransaction();

            Punch_Confirm_Remedy_Bean dataBean = new Punch_Confirm_Remedy_Bean()
            {
                FlowCaseID       = model.FlowCaseID,
                CompID           = model.CompID,
                EmpID            = model.EmpID,
                EmpName          = model.EmpName,
                DutyDate         = model.DutyDate,
                DutyTime         = model.DutyTime,
                PunchDate        = model.PunchDate,
                PunchTime        = model.PunchTime,
                PunchConfirmSeq  = model.PunchConfirmSeq,
                DeptID           = model.DeptID,
                DeptName         = model.DeptName,
                OrganID          = model.OrganID,
                OrganName        = model.OrganName,
                FlowOrganID      = model.FlowOrganID,
                FlowOrganName    = model.FlowOrganName,
                ConfirmStatus    = model.ConfirmStatus,
                PunchRemedySeq   = model.PunchRemedySeq,
                RemedyReasonID   = model.RemedyReasonID,
                RemedyReasonCN   = model.RemedyReasonCN,
                RemedyPunchTime  = model.RemedyPunchTime,
                AbnormalFlag     = model.AbnormalFlag,
                AbnormalReasonID = model.AbnormalReasonID,
                AbnormalReasonCN = model.AbnormalReasonCN,
                AbnormalDesc     = model.AbnormalDesc,

                Remedy_MAFT10_FLAG      = model.Remedy_MAFT10_FLAG,
                Remedy_AbnormalFlag     = model.Remedy_AbnormalFlag,
                Remedy_AbnormalReasonID = model.Remedy_AbnormalReasonID,
                Remedy_AbnormalReasonCN = model.Remedy_AbnormalReasonCN,
                Remedy_AbnormalDesc     = model.Remedy_AbnormalDesc,
                LastChgComp             = model.LastChgComp,
                LastChgID   = model.LastChgID,
                LastChgDate = model.LastChgDate,
                //Remedy
                RemedyPunchFlag = model.RemedyPunchFlag,
                BatchFlag       = model.BatchFlag,
                PORemedyStatus  = model.PORemedyStatus,
                RejectReason    = model.RejectReason,
                RejectReasonCN  = model.RejectReasonCN,
                ValidDateTime   = model.ValidDateTime,
                ValidCompID     = model.ValidCompID,
                ValidID         = model.ValidID,
                ValidName       = model.ValidName
            };
            try
            {
                SqlCommand.PunchAppdOperation_UpdatePunchRemedyLog(dataBean, ref sb);
                SqlCommand.PunchAppdOperation_UpdatePunchConfirm(dataBean, ref sb); //內部判定結案or駁回
                SqlCommand.PunchAppdOperation_UpdateHROtherFlowLog(dataBean.FlowCaseID, dataBean.ConfirmStatus == "4" ? "3" : "2", ref sb);

                if (dataBean.PORemedyStatus == "2")//沒結案(送簽中)
                {
                    OBFlowUtility.InsertHROtherFlowLogCommand(dataBean.FlowCaseID, CustVerify.addone(FlowLogBatNo), CustVerify.FlowLogIDadd(FlowLogID), "P", dataBean.EmpID, dataBean.OrganID, dataBean.FlowOrganID, UserInfo.getUserInfo().UserID, flowCode, flowSN, CustVerify.addone(flowSeq), toUserData["SignLine"], toUserData["SignIDComp"], toUserData["SignID"], toUserData["SignOrganID"], toUserData["SignFlowOrganID"], "1", false, ref sb);
                }
                else if (dataBean.PORemedyStatus == "3" || dataBean.PORemedyStatus == "4")//結案
                {
                    FlowUtility.ChangeFlowFlag(dataBean.FlowCaseID, flowCode, flowSN, UserInfo.getUserInfo().CompID, UserInfo.getUserInfo().UserID, "0", ref sb);
                }
                //======(test錯誤的存在)=======
                //sb.Append("test錯誤的存在");
                msg = "注定失敗";
                return(false);

                //======(test錯誤的存在)=======
                seccessCount = db.ExecuteNonQuery(sb.BuildCommand(), tx); //執行新增,成功筆數回傳,並做Transaction機制
                if (seccessCount > 0)
                {
                    if (FlowExpress.IsFlowVerify(flow.FlowID, flow.FlowCurrLastLogID, btnName, oAssDic, FlowStepOpinion))
                    {
                        tx.Commit(); //成功Transaction直接Commit
                    }
                    else
                    {
                        tx.Rollback(); //失敗Transaction Rollback
                        msg = "永豐流程寫入失敗";
                    }
                }
                else
                {
                    tx.Rollback(); //失敗Transaction Rollback
                    msg = "審核失敗,更新0筆資料";
                }
            }
            catch (Exception ex)
            {
                tx.Rollback(); //失敗Transaction Rollback
                msg = ex.Message;
                throw ex;
            }
        }
        catch (Exception ex)
        {
            //tx.Rollback(); //失敗Transaction Rollback
            msg = ex.Message;
            return(false);
        }
        return(true);
    }
Пример #6
0
    /// <summary>
    /// 申請後送簽流程
    /// </summary>
    /// <param name="model">畫面model</param>
    /// <param name="datas">回傳資料</param>
    /// <param name="msg">回傳訊息</param>
    /// <returns>bool</returns>
    public static bool PunchUpdateModify_SaveData(Punch_Confirm_Remedy_Bean model, out long seccessCount, out string msg)
    {
        bool result = false;

        seccessCount = 0;
        msg          = "";

        bool validResult = false;
        Punch_Confirm_Remedy_Bean datas = new Punch_Confirm_Remedy_Bean();
        string validMsg = "";

        try
        {
            Dictionary <string, string> empData       = new Dictionary <string, string>();
            Dictionary <string, string> toUserData    = new Dictionary <string, string>();
            Dictionary <string, string> ValidUserData = new Dictionary <string, string>();
            string      flowCode       = "";
            string      flowSN         = "";
            bool        nextIsLastFlow = false;
            string      meassge        = "";
            FlowExpress flow           = new FlowExpress(Util.getAppSetting("app://AattendantDB_PunchUpdate/"));
            string      KeyValue       = "";//字串
            string      ShowValue      = "";
            string      strFlowCaseID  = "";

            DbHelper      db = new DbHelper(Aattendant._AattendantDBName);
            CommandHelper sb = db.CreateCommandHelper();
            DbConnection  cn = db.OpenConnection();
            DbTransaction tx = cn.BeginTransaction();

            Punch_Confirm_Remedy_Bean dataBean = new Punch_Confirm_Remedy_Bean()
            {
                FlowCaseID              = model.FlowCaseID,
                CompID                  = model.CompID,
                EmpID                   = model.EmpID,
                EmpName                 = model.EmpName,
                DutyDate                = model.DutyDate,
                DutyTime                = model.DutyTime,
                PunchDate               = model.PunchDate,
                PunchTime               = model.PunchTime,
                PunchConfirmSeq         = model.PunchConfirmSeq,
                DeptID                  = model.DeptID,
                DeptName                = model.DeptName,
                OrganID                 = model.OrganID,
                OrganName               = model.OrganName,
                FlowOrganID             = model.FlowOrganID,
                FlowOrganName           = model.FlowOrganName,
                MAFT10_FLAG             = model.MAFT10_FLAG,
                ConfirmStatus           = model.ConfirmStatus,
                PunchRemedySeq          = model.PunchRemedySeq,
                RemedyReasonID          = model.RemedyReasonID,
                RemedyReasonCN          = model.RemedyReasonCN,
                RemedyPunchTime         = model.RemedyPunchTime,
                AbnormalFlag            = model.AbnormalFlag,
                AbnormalReasonID        = model.AbnormalReasonID,
                AbnormalReasonCN        = model.AbnormalReasonCN,
                AbnormalDesc            = model.AbnormalDesc,
                Remedy_MAFT10_FLAG      = model.Remedy_MAFT10_FLAG,
                Remedy_AbnormalFlag     = model.Remedy_AbnormalFlag,
                Remedy_AbnormalReasonID = model.Remedy_AbnormalReasonID,
                Remedy_AbnormalReasonCN = model.Remedy_AbnormalReasonCN,
                Remedy_AbnormalDesc     = model.Remedy_AbnormalReasonID == "99" ? model.Remedy_AbnormalDesc : "",
                LastChgComp             = model.LastChgComp,
                LastChgID               = model.LastChgID,
                LastChgDate             = model.LastChgDate,
                //Remedy
                RemedyPunchFlag = model.RemedyPunchFlag,
                BatchFlag       = model.BatchFlag,
                PORemedyStatus  = model.PORemedyStatus,
                RejectReason    = model.RejectReason,
                RejectReasonCN  = model.RejectReasonCN,
                ValidDateTime   = model.ValidDateTime,
                //ValidTime = model.ValidTime,
                ValidCompID = model.ValidCompID,
                ValidID     = model.ValidID,
                ValidName   = model.ValidName
            };

            OBFlowUtility.QueryFlowDataAndToUserData_First(dataBean.CompID, dataBean.OrganID, dataBean.FlowOrganID, dataBean.EmpID, dataBean.EmpID, dataBean.PunchDate, out empData, out toUserData, out flowCode, out flowSN, out nextIsLastFlow, out meassge, "PO01", "PO");

            Punch_Confirm_Remedy_Model validInfo = new Punch_Confirm_Remedy_Model()
            {
                CompID = toUserData["SignIDComp"],
                EmpID  = toUserData["SignID"]
            };
            validResult = GetValidInfo(validInfo, out datas, out validMsg);
            if (!validResult)
            {
                throw new Exception(validMsg);
            }
            dataBean.ValidCompID = toUserData["SignIDComp"];
            dataBean.ValidID     = toUserData["SignID"];
            dataBean.ValidName   = datas.ValidName;

            KeyValue      = dataBean.CompID + "," + dataBean.EmpID + "," + dataBean.PunchDate + "," + dataBean.PunchRemedySeq;
            ShowValue     = dataBean.CompID + "," + dataBean.EmpID + "," + dataBean.PunchDate + "," + dataBean.PunchTime;
            ValidUserData = CustVerify.getEmpID_Name_Dictionary(toUserData["SignID"], toUserData["SignIDComp"]);

            if (FlowExpress.IsFlowInsVerify(flow.FlowID, KeyValue.Split(","), ShowValue.Split(","), nextIsLastFlow ? "btnSendLast" : "btnSend", ValidUserData, ""))
            {
                strFlowCaseID       = FlowExpress.getFlowCaseID(flow.FlowID, KeyValue);
                dataBean.FlowCaseID = strFlowCaseID;
                SqlCommand.PunchUpdateModify_InsertPunchRemedyLog(dataBean, ref sb);
                OBFlowUtility.ChangeFlowFlag(strFlowCaseID, flowCode, flowSN, dataBean.ValidCompID, dataBean.ValidID, "1", ref sb);
                OBFlowUtility.InsertHROtherFlowLogCommand(strFlowCaseID, "1", strFlowCaseID + "." + "1".PadLeft(5, '0'), "P", dataBean.EmpID, dataBean.OrganID,
                                                          dataBean.FlowOrganID, dataBean.ValidID, flowCode, flowSN, "1", "1", toUserData["SignIDComp"], toUserData["SignID"], toUserData["SignOrganID"], toUserData["SignFlowOrganID"], "1", false, ref sb);

                try
                {
                    //================
                    //sb.Append("錯誤製造");
                    //=================
                    seccessCount = db.ExecuteNonQuery(sb.BuildCommand(), tx); //執行新增,成功筆數回傳,並做Transaction機制
                    tx.Commit();                                              //成功Transaction直接Commit
                }
                catch (Exception)
                {
                    FlowExpress.IsFlowCaseDeleted(flow.FlowID, strFlowCaseID, true); //送簽用IsFlowCaseDeleted //審核用IsFlowRollBack
                    tx.Rollback();                                                   //失敗Transaction Rollback
                    throw;
                }
                result = true;
            }
        }
        catch (Exception ex)
        {
            msg = ex.Message;
        }
        return(result);
    }
Пример #7
0
    /// <summary>
    /// 檢核所有東西,並將下一關相關資訊回傳
    /// </summary>
    public static bool nextAssignTo(Punch_Confirm_Remedy_Bean Bean, out Dictionary <string, string> toUserData)
    {
        string
            CompID      = Bean.CompID,
            AssignTo    = Bean.ValidID,
            OTStartDate = Bean.PunchDate,
            FlowCaseID  = Bean.FlowCaseID;

        bool   isLastFlow, nextIsLastFlow;
        string flowCode = "", flowSN = "", signLineDefine = "", meassge = "";

        string SignOrganID = "", SignID = "", SignIDComp = "";

        //讀取現在關卡與下一關相關資料,因為不論回傳是否,我還是要資料,所以沒檢核回傳值與錯誤訊息
        OBFlowUtility.QueryFlowDataAndToUserData(CompID, AssignTo, OTStartDate, FlowCaseID, "P",
                                                 out toUserData, out flowCode, out flowSN, out signLineDefine, out isLastFlow, out nextIsLastFlow, out meassge, "PO");

        //若是後台HR送簽依照填單人公司,否則用加班人公司
        //string HRLogCompID = signLineDefine == "4" || flowCode.Trim() == "" ?Bean.CompID :Bean.CompID;
        string HRLogCompID = Bean.CompID;

        //如果沒有下一關資料,則用現在關卡資料取代
        if (toUserData.Count == 0)
        {
            //取[最近的行政or功能]資料 取代 [現在關卡]資料
            DataTable dtHROtherFlowLog_toUD = PunchUpdate.HROtherFlowLog(FlowCaseID, true);
            toUserData.Add("SignLine", dtHROtherFlowLog_toUD.Rows[0]["SignLine"].ToString());
            toUserData.Add("SignIDComp", dtHROtherFlowLog_toUD.Rows[0]["SignIDComp"].ToString());
            toUserData.Add("SignID", AssignTo);
            toUserData.Add("SignOrganID", dtHROtherFlowLog_toUD.Rows[0]["SignOrganID"].ToString());
            toUserData.Add("SignFlowOrganID", dtHROtherFlowLog_toUD.Rows[0]["SignFlowOrganID"].ToString());
        }

        //如果下一關主管與現在主管相同,則再往上階找下一關主管資料
        if (toUserData["SignID"] == AssignTo && signLineDefine != "3")
        {
            switch (toUserData["SignLine"])
            {
            //HR線 或 行政線
            case "4":
            case "1":
                if (EmpInfo.QueryOrganData(HRLogCompID, toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp))
                {
                    toUserData["SignID"]          = SignID;
                    toUserData["SignIDComp"]      = SignIDComp;
                    toUserData["SignOrganID"]     = SignOrganID;
                    toUserData["SignFlowOrganID"] = "";
                }
                break;

            //功能線
            case "2":
                if (EmpInfo.QueryFlowOrganData(toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp))
                {
                    toUserData["SignID"]          = SignID;
                    toUserData["SignIDComp"]      = SignIDComp;
                    toUserData["SignOrganID"]     = "";
                    toUserData["SignFlowOrganID"] = SignOrganID;
                }
                break;

            //原本switch的是signLineDefine,現在改成toUserData["SignLine"]後,
            //case "3"裏頭的if基本只會用到else[非功能線一律走行政線],以防萬一先保留。
            //改派
            case "3":
                if (toUserData["SignLine"] == "2")
                {
                    if (EmpInfo.QueryFlowOrganData(toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp))
                    {
                        toUserData["SignID"]          = SignID;
                        toUserData["SignIDComp"]      = SignIDComp;
                        toUserData["SignOrganID"]     = "";
                        toUserData["SignFlowOrganID"] = SignOrganID;
                    }
                }
                else
                {
                    if (EmpInfo.QueryOrganData(HRLogCompID, toUserData["SignOrganID"], Bean.PunchDate, out SignOrganID, out SignID, out SignIDComp))
                    {
                        toUserData["SignID"]          = SignID;
                        toUserData["SignIDComp"]      = SignIDComp;
                        toUserData["SignOrganID"]     = SignOrganID;
                        toUserData["SignFlowOrganID"] = "";
                    }
                }
                break;
            }
        }

        //如果找不到下一關主管資料,彈跳視窗並且return false
        if (toUserData["SignID"] == "")
        {
            toUserData["SignIDComp"] = UserInfo.getUserInfo().CompID.Trim();
            toUserData["SignID"]     = UserInfo.getUserInfo().UserID.Trim();
            //Util.MsgBox("查無下一關主管資料");
            if (isLastFlow) //最後一關不用找下一關主管
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        return(true);
    }