/// <summary>
 /// 傳入參數:@畫面之查詢條件
 /// 
 /// 回傳:GridView畫面資料List
 /// 
 /// 語法:
 ///    查詢資料庫VDS_CAA_CONNECT_MAIN欄位
 /// 
 /// 欄位:
 ///    (1)繳款單號:WASH_NO
 ///    (2)發票/折讓/暫收編號:DUE_NO
 ///    (3)沖帳金額:WASH_AMT
 ///    (4)沖帳日期:WASH_DATE
 ///    (5)建立人員:CREATEUID
 /// 
 /// 顯示欄位:
 ///    (1)繳款單號:WASH_NO
 ///    (2)單別:CUBE_TYPE(1=發票、2=折讓、3=暫收)
 ///    (3)發票/折讓/暫收編號:DUE_NO
 ///    (4)沖帳金額:WASH_AMT
 ///    (5)沖帳日期:WASH_DATE
 /// </summary>
 public DataTable QueryAccountSetByFind(ArrayList ParameterList)
 {
     try
     {
         CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB);
         DataTable dt = DBO.QueryAccountSetByFind(ParameterList);
         return dt;
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
        /// <summary>
        /// 傳入參數:@畫面上有異動欄位List
        /// 
        /// 處理:
        /// 【繳款資訊】
        /// 判斷其繳款別:1=電匯(專案代收)、2=支票/本票/匯票、3=應收付調整
        /// IF 繳款別=1 THEN
        ///   依COLL_NO = @收款單號 異動資料庫VDS_CAA_COLL_MAIN欄位如下:
        ///   (1)DIFF_AMT = @沖尾差
        ///   (2)OTHER_DIFF = @其他差異
        ///   (3)REMIT_DIFF = @匯兌差異
        ///   (4)COLL_REMAIN_AMT = @沖帳餘額
        ///   (5)最後沖帳日=系統日(AP)
        ///   (6)IF COLL_AMT <> COLL_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///      END IF
        /// ELSEIF 繳款別=2 THEN
        ///   依BOND_NO = @收款單號 異動資料庫VDS_CAA_BOND_MAIN欄位如下:
        ///   (1)DIFF_AMT = @沖尾差
        ///   (2)OTHER_DIFF = @其他差異
        ///   (3)REMIT_DIFF = @匯兌差異
        ///   (4)BOND_REMAIN_AMT = @沖帳餘額
        ///   (5)最後沖帳日=系統日(AP)
        ///   (6)IF BOND_AMT <> BOND_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///      END IF
        /// ELSE
        ///   依DUE_NO = @收款單號 異動資料庫VDS_CAA_DUE_MAIN欄位如下:
        ///   (1)DIFF_AMT = @沖尾差
        ///   (2)OTHER_DIFF = @其他差異
        ///   (3)REMIT_DIFF = @匯兌差異
        ///   (4)DUE_REMAIN_AMT = @沖帳餘額
        ///   (5)最後沖帳日=系統日(AP)
        ///   (6) SUM_DUE_AMT = DUE_AMT - DUE_REMAIN_AMT
        ///   (7) IF DUE_AMT <> DUE_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///       END IF
        /// 
        /// 【發票/折讓/暫收資訊】
        /// 判斷其單別:1=發票、2=折讓、3=暫收
        /// IF 單別=1 THEN
        ///   依INV_NO = @發票/折讓/暫收單號 異動資料庫VDS_CAA_INV_MAIN欄位如下:
        ///   (1)INV_REMAIN_AMT = @沖帳餘額
        ///   (2)INDEED_DATE = @確認付款日
        ///   (3)MEMO= @備註
        ///   (4) IF INV_UAMT <> INV_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///       END IF
        /// ELSEIF 單別=2 THEN
        ///   依DISC_NO = @發票/折讓/暫收單號 異動資料庫VDS_CAA_DISC_MAIN欄位如下:
        ///   (1)DISC_REMAIN_AMT = @沖帳餘額
        ///   (2)MEMO= @備註
        ///   (3) IF DISC_UAMT <> DISC_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///       END IF
        /// ELSE
        ///   依TEMP_NO = @發票/折讓/暫收單號 異動資料庫VDS_CAA_TEMP_MAIN欄位如下:
        ///   (1)TEMP_REMAIN_AMT = @沖帳餘額
        ///   (2)MEMO= @備註
        ///   (3) IF TEMP_AMT <> TEMP_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///       END IF
        ///   (4) SUM_TEMP_AMT = TEMP_AMT - TEMP_REMAIN_AMT
        /// END IF
        /// 
        /// 【發票/折讓/暫收資訊】
        /// 將畫面之資料新增、刪除、異動至資料庫VDS_CAA_CONNECT_MAIN
        /// CUBE_NO = @發票/折讓/暫收單號
        /// CUBE_TYPE = @單別(1=發票、2=折讓、3=暫收)
        /// WASH_NO = @收款單號
        /// WASH_TYPE = @繳款別(1=電匯(專案代收)、2=支票/本票/匯票、3=應收付調整)
        /// WASH_AMT = @沖帳金額
        /// WASH_DATE = @沖帳日期
        /// CREATEDATE=系統日(AP)
        /// CREATEUID=登入之使用者
        /// 
        /// 回傳:
        /// 新增是否成功
        /// </summary>
        public bool SaveAccountRecord(ArrayList ParameterList)
        {
            bool bResult = false;
            ArrayList Param = new ArrayList();
            DbTransaction RootDBT = null;
            int iResult = 0;
            try
            {
                DataRow[] drPays = (DataRow[])ParameterList[0];
                DataRow[] drInvDisTmps = (DataRow[])ParameterList[1];
                DataTable dtConnectDel = (DataTable)ParameterList[2];
                DataRow[] drConnects = (DataRow[])ParameterList[3];
                DataTable dtInvDisTmpReCal = (DataTable)ParameterList[4];

                string strUPDATEUID = ParameterList[5].ToString();
                string strUPDATEDATE = ParameterList[6].ToString();
                string strPAY_TYPE = "";
                string strCUBE_TYPE = "";
                string strLINK_NO = "";
                string strLINK_TYPE = "";
                CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB);

                string strAPL_DATE = GetAPLDATE();

                //獨立呼叫啟動Transcation
                Conn = USEDB.CreateConnection();
                Conn.Open();
                DBT = Conn.BeginTransaction();

                //先更新立沖資訊 再更新繳款資訊 因為要取得最大沖帳日

                #region 先刪除有異動過的立沖資訊
                foreach (DataRow drDel in dtConnectDel.Rows)
                {
                    Param.Clear();
                    Param.Add(drDel["LINK_NO"].ToString()); //1.收款單號                    
                    Param.Add("1");                         //SOURCE_TYPE (1)=>立沖帳 (2)=>轉暫收 (3)=>前期餘額                    
                    iResult = DBO.DelConnect(DBT, Param);
                }
                #endregion

                #region 更新立沖資訊
                string strTempNo = "";
                double iTempAmt = 0;
                foreach (DataRow drConnect in drConnects)
                {
                    strCUBE_TYPE = Get_CubeTypeNo(drConnect["CUBE_TYPE"].ToString());
                    if (strCUBE_TYPE == "1") //只有新增CUBE_TYPE為發票的資料到 VDS_CAA_CONNECT_MAIN
                    {
                        if (strTempNo != drConnect["LINK_NO"].ToString()) //因為要用CREATEDATE時間來排序 所以多加這個判斷
                        {
                            iTempAmt = 0;
                            strTempNo = drConnect["LINK_NO"].ToString();
                        }
                        iTempAmt++;
                        strPAY_TYPE = Get_WashTypeNo(drConnect["WASH_TYPE"].ToString());
                        strLINK_TYPE = Get_WashTypeNo(drConnect["LINK_TYPE"].ToString());
                        Param.Clear();
                        Param.Add(drConnect["CUBE_NO"].ToString());                     //0.發票
                        Param.Add(strCUBE_TYPE);                                        //1.單別(1.發票)
                        Param.Add(drConnect["WASH_NO"].ToString());                     //2.沖帳單號
                        Param.Add(strPAY_TYPE);                                         //3.沖帳別(1.電匯 2.支票 3.應收付調整 4.折讓 5.暫收)
                        Param.Add(drConnect["WASH_AMT"].ToString());                    //4.沖帳金額
                        Param.Add(ConvertDB_Date(drConnect["WASH_DATE"].ToString()));   //5.沖帳日期                    
                        Param.Add(ConvertDB_Date_Add(drConnect["CREATEDATE"].ToString(), iTempAmt));  //6.CREATEDATE
                        Param.Add(drConnect["CREATEUID"].ToString());                   //7.CREATEUID                    
                        Param.Add(drConnect["LINK_NO"].ToString());                     //8.收款單號
                        Param.Add(strLINK_TYPE);                                        //9.繳款別(0.發票與繳款直接沖 =>發票與暫收折讓沖 1.電匯 2.支票 3.應收付調整)
                        Param.Add(drConnect["SOURCE_TYPE"].ToString());                 //10.source_type (1)=>立沖帳 (2)=>轉暫收 (3)=>前期餘額
                        iResult = DBO.UpdateConnect(DBT, Param);
                    }
                }
                #endregion

                #region 更新繳款資訊

                foreach (DataRow drPay in drPays)
                {
                    strPAY_TYPE = Get_WashTypeNo(drPay["PAY_TYPE"].ToString());
                    Param.Clear();
                    Param.Add(strPAY_TYPE);                      //1.繳款別
                    Param.Add(drPay["COLL_NO"].ToString());      //2.收款單號
                    Param.Add(drPay["DIFF_AMT"].ToString());     //3.沖尾差
                    Param.Add(drPay["OTHER_DIFF"].ToString());   //4.其他差異
                    Param.Add(drPay["REMIT_DIFF"].ToString());   //5.匯兌差異
                    Param.Add(drPay["REMAIN_AMT"].ToString());   //6.沖帳餘額
                    Param.Add(strAPL_DATE);                      //7.最後沖帳日
                    //8.狀態
                    Param.Add(Get_WashStatus(int.Parse(drPay["COLL_AMT"].ToString()) + int.Parse(drPay["CHARGE"].ToString()), int.Parse(drPay["REMAIN_AMT"].ToString())));
                    Param.Add(strUPDATEUID);    //9.UPDATEUID                    
                    Param.Add(ConvertDB_Date(strUPDATEDATE));    //10.UPDATEDATE
                    iResult = DBO.UpdatePay(DBT, Param);
                }

                #endregion

                #region 更新發票/折讓/暫收資訊

                foreach (DataRow drInvDisTmp in drInvDisTmps)
                {
                    strCUBE_TYPE = Get_CubeTypeNo(drInvDisTmp["CUBE_TYPE"].ToString());
                    Param.Clear();
                    Param.Add(strCUBE_TYPE);                                            //1.單別
                    Param.Add(drInvDisTmp["CUBE_NO"].ToString());                       //2.單號
                    Param.Add(drInvDisTmp["REMIT_AMT"].ToString());                     //3.沖帳餘額
                    Param.Add(ConvertDB_Date(drInvDisTmp["INDEED_DATE"].ToString()));   //4.確認付款日
                    Param.Add(drInvDisTmp["MEMO"].ToString());                          //5.備註                    
                    Param.Add(Get_WashStatus(int.Parse(drInvDisTmp["INV_AMT"].ToString()), int.Parse(drInvDisTmp["REMIT_AMT"].ToString()))); //6.狀態                                        
                    Param.Add(strUPDATEUID);                     //7.UPDATEUID                    
                    Param.Add(ConvertDB_Date(strUPDATEDATE));    //8.UPDATEDATE
                    iResult = DBO.UpdateInvDisTemp(DBT, Param);
                }

                #endregion

                #region 所有異動過立沖的發票/折讓/暫收單號 重算餘額

                foreach (DataRow dr in dtInvDisTmpReCal.Rows)
                {
                    strCUBE_TYPE = Get_CubeTypeNo(dr["CUBE_TYPE"].ToString());
                    Param.Clear();
                    Param.Add(dr["CUBE_NO"].ToString());        //單號
                    Param.Add(strCUBE_TYPE);                    //單別
                    Param.Add(ConvertDB_Date(strUPDATEDATE));   //UPDATEDATE                    
                    Param.Add(strUPDATEUID);                    //UPDATEUID                                        
                    iResult = DBO.ReCalInvDisTemp(DBT, Param);
                }

                #endregion

                #region 刪除金額為零的立沖資訊

                foreach (DataRow drDel in dtConnectDel.Rows)
                {
                    Param.Clear();
                    Param.Add(drDel["LINK_NO"].ToString());                     //1.收款單號                          
                    iResult = DBO.DelConnectZero(DBT, Param);
                }

                #endregion

                //獨立呼叫Transcation成立
                DBT.Commit();
                bResult = true;

            }
            catch (Exception ex)
            {
                #region 交易失敗

                if (DBT != null)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }

                #endregion

                throw ex;
            }
            finally
            {
                //獨立呼叫Transcation,關閉連線
                if (Conn.State == ConnectionState.Connecting)
                {
                    Conn.Close();
                }
            }
            return bResult;
        }
        /// <summary>
        /// 傳入參數:@沖方單號、@繳款別、@沖尾差、@其它差異、@匯兌差異、@合計、@沖帳餘額
        /// 回傳:是否異動成功
        /// 
        /// 動作:
        /// (1)判斷繳款別類型(1=電匯、2=支票、3=應收付調整)
        ///   (1.1)電匯:
        ///    (A)依COLL_NO=@沖方單號異動資料庫VDS_CAA_COLL_MAIN欄位
        ///       (a)DIFF_AMT=@沖尾差
        ///       (b)OTHER_AMT=@其它差異
        ///       (c)REMIT_AMT=@匯兌差異
        ///       (d)SUM_DUE_AMT=@合計
        ///       (e)DUE_REMAIN_AMT=@沖帳餘額
        ///       (f)TEMPORAL_FLG=1
        ///       (g)TEMPORAL_DATE=系統日(AP)
        /// 
        ///     (B)依COLL_NO=@沖方單號取得資料庫VDS_CAA_COLL_MAIN欄位
        ///       (a)STORE_ID=M.STORE_ID
        ///       (b)ROOT_NO=""
        ///       (c)TAX_TYPE=""
        ///       (d)TEMP_AMT=M.COLL_REMAIN_AMT
        ///       (e)SUM_WASH_AMT=0
        ///       (f)TEMP_REMAIN_AMT=M.COLL_REMAIN_AMT
        /// 
        ///   (1.2)支票:
        ///    (A)依BOND_NO=@沖方單號異動資料庫VDS_CAA_BOND_MAIN欄位
        ///       (a)DIFF_AMT=@沖尾差
        ///       (b)OTHER_AMT=@其它差異
        ///       (c)REMIT_AMT=@匯兌差異
        ///       (d)SUM_BOND_AMT=@合計
        ///       (e)BOND_REMAIN_AMT=@沖帳餘額
        ///       (f)TEMPORAL_FLG=1
        ///       (g)TEMPORAL_DATE=系統日(AP)
        ///     (B)依BOND_NO=@沖方單號取得資料庫VDS_CAA_BOND_MAIN欄位
        ///       (a)STORE_ID=M.STORE_ID
        ///       (b)ROOT_NO=""
        ///       (c)TAX_TYPE=""
        ///       (d)TEMP_AMT=M.BOND_REMAIN_AMT
        ///       (e)SUM_WASH_AMT=0
        ///       (f)TEMP_REMAIN_AMT=M.BOND_REMAIN_AMT
        /// 
        ///   (1.3)應收應付調整:
        ///    (A)依DUE_NO=@沖方單號異動資料庫VDS_CAA_DUE_MAIN欄位
        ///       (a)DIFF_AMT=@沖尾差
        ///       (b)OTHER_AMT=@其它差異
        ///       (c)REMIT_AMT=@匯兌差異
        ///       (d)SUM_DUE_AMT=@合計
        ///       (e)DUE_REMAIN_AMT=@沖帳餘額
        ///       (f)TEMPORAL_FLG=1
        ///      (g)TEMPORAL_DATE=系統日(AP)
        ///     (B)依DUE_NO=@沖方單號取得資料庫VDS_CAA_DUE_MAIN欄位
        ///       (a)STORE_ID=M.STORE_ID
        ///       (b)ROOT_NO=M.ROOT_NO
        ///       (c)TAX_TYPE=M.TAX_TYPE
        ///       (d)TEMP_AMT=M.DUE_REMAIN_AMT
        ///       (e)SUM_WASH_AMT=0
        ///       (f)TEMP_REMAIN_AMT=M.DUE_REMAIN_AMT
        /// 
        /// (2)新增一筆資料至暫收檔VDS_CAA_TEMP_MAIN
        ///     (2.1)TEMP_NO =取號原則
        ///     (2.2)SOURCE_TYPE=2(1表銷折轉暫收、2表溢付)
        ///     (2.3)SOURCE_NO=@沖方單號
        ///     (2.4)STORE_ID=流程(B)取得之欄位STORE_ID
        ///     (2.5)ROOT_NO=流程(B)取得之欄位ROOT_NO
        ///     (2.6)TAX_TYPE==流程(B)取得之欄位TAX_TYPE
        ///     (2.7)TEMP_AMT=流程(B)取得之欄位DISC_AMT
        ///     (2.8)SUM_WASH_AMT=流程(B)取得之欄位SUM_WASH_AMT
        ///     (2.9)TEMP_REMAIN_AMT=流程(B)取得之欄位TEMP_REMAIN_AMT
        ///     (2.10)CHG_INCOME_TYPE=0
        ///     (2.11)CHG_INCOME_DATE=''
        /// 
        /// 
        /// (3)以上三個動作均一併完成,若有一個失敗則rollback回去。
        /// </summary>
        public bool ChangeStatusToTemp(ArrayList ParameterList)
        {
            bool bResult = false;
            bool IsRootTranscation = false;
            DbTransaction RootDBT = null;
            int iResult = 0;
            try
            {
                CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB);

                //判斷是否有傳入Root Transcation 
                IsRootTranscation = (RootDBT == null) ? true : false;

                #region 啟動交易或指定RootTranscation

                if (IsRootTranscation)
                {
                    //獨立呼叫啟動Transcation
                    Conn = USEDB.CreateConnection();
                    Conn.Open();
                    DBT = Conn.BeginTransaction();
                }
                else
                {
                    DBT = RootDBT;
                }
                #endregion

                string strPAY_TYPE = ParameterList[0].ToString();
                string strWASH_NO = ParameterList[1].ToString();
                string strUID = ParameterList[2].ToString();
                string strUPDATEDATE = ParameterList[3].ToString();
                string strCLOSE_MONTH = ParameterList[4].ToString();
                string strTEMPORAL_DATE = strUPDATEDATE;

                //string strAPL_DATE = ConvertDB_Date(GetAPLDATE());
                ArrayList ParaData = new ArrayList();
                ParaData.Clear();
                ParaData.Add(strPAY_TYPE);
                ParaData.Add(strWASH_NO);
                ParaData.Add(strUID);
                ParaData.Add(strUPDATEDATE);
                DataTable dtData = DBO.QueryPayToTemp(ParaData);

                string strSTORE_ID = "";
                string strROOT_NO = "";
                string strTAX_TYPE = "";
                string strTEMP_AMT = "";
                string strSUM_WASH_AMT = "0";
                string strTEMP_REMAIN_AMT = "";
                string strTEMP_DATE = "";
                if (dtData.Rows.Count > 0)
                {
                    strSTORE_ID = dtData.Rows[0]["STORE_ID"].ToString().Trim();
                    strROOT_NO = dtData.Rows[0]["ROOT_NO"].ToString().Trim();
                    strTAX_TYPE = dtData.Rows[0]["TAX_TYPE"].ToString().Trim();
                    strTEMP_AMT = dtData.Rows[0]["REMAIN_AMT"].ToString().Trim();
                    strTEMP_REMAIN_AMT = dtData.Rows[0]["REMAIN_AMT"].ToString().Trim(); ;
                    strTEMP_DATE = dtData.Rows[0]["TEMP_DATE"].ToString().Trim(); ;
                }
                else
                {
                    throw new Exception("找不到[" + strWASH_NO + "]此筆繳款資料");
                }
                #region 寫入暫收檔

                ArrayList ParaTemp = new ArrayList(); //新增暫收檔參數
                string strTEMP_NO = string.Empty;
                string strID = string.Empty;

                ParaTemp.Clear();
                ParaTemp.Add("2");                // (1)  來源	    = SOURCE_TYPE
                ParaTemp.Add(strWASH_NO);         // (2)  來源單號	= SOURCE_NO           
                ParaTemp.Add(strSTORE_ID);        // (3)  客戶店號	= STORE_ID           
                ParaTemp.Add(strROOT_NO);         // (4)  商品群分類	= ROOT_NO
                ParaTemp.Add(strTAX_TYPE);        // (5)  稅別	    = TAX_TYPE
                ParaTemp.Add(strTEMP_AMT);        // (6)  暫收金額	= TEMP_AMT
                ParaTemp.Add(strSUM_WASH_AMT);    // (7)  累計沖帳金額	= SUM_TEMP_AMT
                ParaTemp.Add(strTEMP_REMAIN_AMT); // (8)  暫收餘額	= TEMP_REMAIN_AMT
                ParaTemp.Add("");                 // (9) 備註說明	= MEMO
                ParaTemp.Add(strCLOSE_MONTH);     // (10) 結帳年月	= CLOSE_MONTH
                ParaTemp.Add("0");                // (11) 轉其它收入	= CHG_INCOME_TYPE
                ParaTemp.Add("");                 // (12) 轉其它收入日期	= CHG_INCOME_DATE
                ParaTemp.Add(strUPDATEDATE);      // (13) 建立日期	= CREATEDATE (系統抓取目前AP機器之時間)
                ParaTemp.Add(strUID);             // (14) 建立人員	= CREATEUID  (系統抓取登入之使用者ID)
                //ParaTemp.Add(strAPL_DATE.Substring(0, 10));        // (15) 暫收日期	= TEMP_DATE 10碼就好了               
                ParaTemp.Add(strTEMP_DATE);        // (15) 暫收日期
                iResult = DBO.CreateTempRecord(DBT, ParaTemp, out strTEMP_NO, out strID);

                #endregion

                #region 繳款資料寫入Flag
                ArrayList ParaPay = new ArrayList();
                ParaPay.Clear();
                ParaPay.Add(strPAY_TYPE);       //1.V_PAY_TYPE
                ParaPay.Add(strWASH_NO);        //2.V_COLL_NO
                ParaPay.Add(strTEMPORAL_DATE);  //3.V_TEMPORAL_DATE
                ParaPay.Add(strUID);            //4.V_UPDATEUID
                ParaPay.Add(strUPDATEDATE);     //5.V_UPDATEDATE
                iResult = DBO.UpdatePayToTemp(DBT, ParaPay);
                #endregion

                #region 交易成功

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation成立
                    DBT.Commit();
                    bResult = true;
                }

                #endregion


            }
            catch (Exception ex)
            {
                #region 交易失敗

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }

                #endregion

                throw ex;
            }
            finally
            {
                #region 判斷是否關閉交易連線

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation,關閉連線
                    if (Conn.State == ConnectionState.Connecting)
                    {
                        Conn.Close();
                    }
                }

                #endregion
            }
            return bResult;
        }
        //結案或是結案解除
        //strWASH_STATUS 2:結案 1:結案解除
        private bool RecordCloseOrOpen(string strWASH_STATUS, ArrayList ParameterList)
        {
            bool IsRootTranscation = false;
            DbTransaction RootDBT = null;
            int iResult = 0;
            bool bResult = false;
            try
            {
                CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB);

                //判斷是否有傳入Root Transcation 
                IsRootTranscation = (RootDBT == null) ? true : false;

                #region 啟動交易或指定RootTranscation

                if (IsRootTranscation)
                {
                    //獨立呼叫啟動Transcation
                    Conn = USEDB.CreateConnection();
                    Conn.Open();
                    DBT = Conn.BeginTransaction();
                }
                else
                {
                    DBT = RootDBT;
                }
                #endregion


                DataRow[] drPays = (DataRow[])ParameterList[0];
                DataRow[] drInvDisTmps = (DataRow[])ParameterList[1];
                string strUPDATEUID = ParameterList[2].ToString();
                string strUPDATEDATE = ParameterList[3].ToString();

                //繳款資料 結案/結案解除
                ArrayList ParaPay = new ArrayList();
                foreach (DataRow drPay in drPays)
                {
                    ParaPay.Clear();
                    ParaPay.Add(Get_WashTypeNo(drPay["PAY_TYPE"].ToString()));  //單別                                     
                    ParaPay.Add(drPay["COLL_NO"].ToString());                   //單號                    
                    ParaPay.Add(strWASH_STATUS);                                //結案狀態      
                    ParaPay.Add(strUPDATEUID);                                  //UPDATEUID                                                            
                    ParaPay.Add(ConvertDB_Date(strUPDATEDATE));                 //UPDATEDATE   
                    iResult = DBO.ChangeRecordByOpenClosePay(DBT, ParaPay);
                }

                //發票/折讓/暫收 結案/結案解除
                ArrayList ParaInv = new ArrayList();
                foreach (DataRow drInvDisTm in drInvDisTmps)
                {
                    ParaInv.Clear();
                    ParaInv.Add(Get_CubeTypeNo(drInvDisTm["CUBE_TYPE"].ToString())); //單別                                     
                    ParaInv.Add(drInvDisTm["CUBE_NO"].ToString());                   //單號                    
                    ParaInv.Add(strWASH_STATUS);                                     //結案狀態
                    ParaInv.Add(strUPDATEUID);                                       //UPDATEUID                                                            
                    ParaInv.Add(ConvertDB_Date(strUPDATEDATE));                      //UPDATEDATE   
                    iResult = DBO.ChangeRecordByOpenCloseInv(DBT, ParaInv);
                }


                #region 交易成功

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation成立
                    DBT.Commit();
                    bResult = true;
                }

                #endregion


            }
            catch (Exception ex)
            {
                #region 交易失敗

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }

                #endregion

                throw ex;
            }
            finally
            {
                #region 判斷是否關閉交易連線

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation,關閉連線
                    if (Conn.State == ConnectionState.Connecting)
                    {
                        Conn.Close();
                    }
                }

                #endregion
            }
            return bResult;
        }
 public bool CheckMonthClose(ArrayList ParameterList)
 {
     bool bResult = false;
     try
     {
         CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB);
         DataTable dt = DBO.CheckMonthClose(ParameterList);
         if (dt.Rows.Count > 0)
             bResult = true;
     }
     catch (Exception ex)
     {
         throw ex;
     }
     return bResult;
 }
 public int DeleteControlChk(ArrayList ParameterList)
 {
     try
     {
         CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB);
         return DBO.DeleteControlChk(ParameterList);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
 //取得繳款沖銷餘額大於零的資料
 public DataTable CheckRemitAmtZero(ArrayList ParameterList)
 {
     try
     {
         CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB);
         DataTable dt = DBO.CheckRemitAmtZero(ParameterList);
         return dt;
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
 //取得APLDATE
 public DataTable QueryAPL_DATE()
 {
     try
     {
         CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB);
         DataTable dt = DBO.QueryAPL_DATE();
         return dt;
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }